0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【Go言語】WebフレームワークBeego、PostgreSQLを使ってテーブルをマイグレーションする

Posted at

ゴール

このようにPostgreSQLにTodoテーブルをマイグレーションする方法です。

BeegoのTodoテーブルを作成.png

プロジェクトのディレクトリ構造

My-First-Beego-Project
├─ conf
│  └─ app.conf
├─ controllers
│  └─ default.go
├─ models
│  └─ todo.go
├─ routers
│  └─ router.go
├─ static
│  ├─ css
│  ├─ img
│  ├─ js
│  │  ├─ form.js
│  │  └─ reload.min.js
│  └─ lib
│     └─ boostrap
│        ├─ css
│        │  ├─ bootstrap-grid.min.css
│        │  └─ bootstrap.min.css
│        ├─ js
│        │  ├─ bootstrap-bundle.min.js
│        │  └─ bootstrap.min.js
│        └─ jquery
│           └─ jquery.js
├─ views
│     ├─ index.tpl
│     ├─ subIndex.tpl
│     └─ thirdIndex.tpl
└─ main.go

モジュールのインストール

beego ormのインストール

cdコマンドでプロジェクトに入って、下記のコマンドでインストールしましょう。

go get github.com/beego/beego/v2/client/orm

pqのインストール

PostgreSQLと接続するモジュールをインストールしましょう。

go get github.com/lib/pq

configファイルの編集

PostgreSQLの接続情報を下記のように追加しておきます。

conf/app.conf
appname = my-first-beego-project
httpport = 8080
runmode = dev

db_driver = postgres
db_user = postgres
db_password = postgres
db_host = localhost
db_port = 5432
db_name = beegoDb

modelsの編集

todoテーブルを作るため、``Modelクラスを下記のように編集します。

models/todo.go
package models // ここでパッケージ名を指定

import (
	"github.com/beego/beego/v2/client/orm"
	_ "github.com/lib/pq" // PostgreSQL ドライバをインポート
)

type Todo struct {
	Id          int64  `orm:"auto"`
	Title       string `orm:"size(128)"`
	Description string `orm:"size(255)"`
	Completed   bool   `orm:"default(false)"`
}

func init() {
	// PostgreSQLのドライバ登録
	orm.RegisterDriver("postgres", orm.DRPostgres)

	// データベース接続設定
	orm.RegisterDataBase("default", "postgres", "user=postgres password=postgres host=localhost port=5432 dbname=beegoDb sslmode=disable")

	// モデルの登録
	orm.RegisterModel(new(Todo))

	// テーブルが存在しない場合に作成(強制的にマイグレーション)
	orm.RunSyncdb("default", false, true)
}

main.goの編集

実行ファイルmain.goに編集したモデルクラスをインポートしておきます。

main.go
package main

import (
	_ "my-first-beego-project/models" // modelsパッケージをインポート
	_ "my-first-beego-project/routers"

	"github.com/astaxie/beego"
)

func main() {
	beego.Run()
}

マイグレーションする

いよいよモデルクラスをPostgreSQLに反映させます。

bee run

このようにコマンドパレットに表示されたらOKです。

Beegoマイグレーション完成.png

トラブルシューティング

bee runコマンドを入力してもmodule依存関係エラーが表示される。

0003 Initializing watcher...
..\..\go\pkg\mod\github.com\astaxie\beego@v1.12.3\context\output.go:34:2: missing go.sum entry for module providing package gopkg.in/yaml.v2 (imported by github.com/astaxie/beego/context); to add:
        go get github.com/astaxie/beego/context@v1.12.3
..\..\go\pkg\mod\github.com\astaxie\beego@v1.12.3\admin.go:28:2: missing go.sum entry for module providing package github.com/prometheus/client_golang/prometheus/promhttp (imported by github.com/astaxie/beego); to add:
        go get github.com/astaxie/beego@v1.12.3
..\..\go\pkg\mod\github.com\astaxie\beego@v1.12.3\app.go:33:2: missing go.sum entry for module providing package golang.org/x/crypto/acme/autocert (imported by github.com/astaxie/beego); to add:
        go get github.com/astaxie/beego@v1.12.3
2025/02/07 23:56:03 ERROR    ▶ 0004 Failed to build the application: ..\..\go\pkg\mod\github.com\astaxie\beego@v1.12.3\context\output.go:34:2: missing go.sum entry for module providing package gopkg.in/yaml.v2 (imported by github.com/astaxie/beego/context); to add:
        go get github.com/astaxie/beego/context@v1.12.3
..\..\go\pkg\mod\github.com\astaxie\beego@v1.12.3\admin.go:28:2: missing go.sum entry for module providing package github.com/prometheus/client_golang/prometheus/promhttp (imported by github.com/astaxie/beego); to add:
        go get github.com/astaxie/beego@v1.12.3
..\..\go\pkg\mod\github.com\astaxie\beego@v1.12.3\app.go:33:2: missing go.sum entry for module providing package golang.org/x/crypto/acme/autocert (imported by github.com/astaxie/beego); to add:
        go get github.com/astaxie/beego@v1.12.3

⇒このエラーメッセージは、Goモジュールが依存関係に必要なgo.sumエントリを欠いていることが原因です。go.sumファイルは、プロジェクトで使用しているGoパッケージのチェックサムを記録し、正確な依存関係のバージョンを管理します。エラーメッセージで「missing go.sum entry for module providing package...」とあるのは、必要なモジュールのチェックサムがgo.sumにないということを意味します。

これを解決するには、以下の手順を試してください。

go get gopkg.in/yaml.v2
go get github.com/prometheus/client_golang/prometheus/promhttp
go get golang.org/x/crypto/acme/autocert

これでも問題が解決しない場合は、``を実行して、未使用の依存関係を整理し、必要な依存関係を正しく解決することができます。

go mod tidy

すると、このように依存関係を調整してくれます。

Beego modo tidy.png

参考にしたサイト

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?