少し前の話だが、Golang.tokyoさんの同人誌『文Go』を写経していて詰まった部分があったのでメモしておく。
[sql-migrateとは]
sql-migrateはGoで書かれたマイグレーションツールである。
ここでいうマイグレーションとは、sqlという名前からもわかる通り、データベース定義のバージョン管理を指す*1。同類のツールとして有名どころはRuby on RailsのActive Recordや、Flywayなどがある。
[インストール、いざ実行……あれ?]
利用しているGoのバージョンは以下の通り。
$ go version go version go1.13 darwin/amd64
(MacはMojaveの10.14.6
を利用している)
「文Go」に記載通り、go get -u github.com/rubenv/sql-migrate/sql-migrate
とコマンドを実行して、sql-migrateをインストールする。
$ go get -u github.com/rubenv/sql-migrate/sql-migrate go: creating new go.mod: module github.com/kdnakt/go-sql-sample go: finding github.com/rubenv/sql-migrate/sql-migrate latest go: finding github.com/rubenv/sql-migrate latest go: downloading github.com/rubenv/sql-migrate v0.0.0-20190902133344-8926f37f0bc1 go: extracting github.com/rubenv/sql-migrate v0.0.0-20190902133344-8926f37f0bc1 (後略)
よし、インストールできた!と思ってヘルプを見ようとコマンドを実行しようとするも、コマンドが見つからずエラーに。
$ sql-migrate --help bash: sql-migrate: command not found
Google先生に聞いてみると、パスを通せと言われた。なるほど。
[パスを通す]
とりあえず指定された通りにパスを通す。
~/.bash_profile
ファイルを開き、以下の行を追記する。
export PATH="$HOME/go/bin:$PATH"
設定を反映させるために新しくターミナルを開き*2、改めてコマンドを実行してみる。
$ sql-migrate --help Usage: sql-migrate [--version] [--help] <command> [<args>] Available commands are: down Undo a database migration new Create a new migration redo Reapply the last migration skip Sets the database level to the most recent version available, without running the migrations status Show migration status up Migrates the database to the most recent version available
今度は無事にヘルプを表示することができた。
しかしパスぐらいGo言語を入れた時に自動で通してくれればいいのに、と思ったらそれらしいissueがGitHubに上がっていた。
Goをインストールしたからといってユーザープロファイルを変更すべきではないという意見が出ていたし、Goで開発するエンジニア向けの説明として以下のようにパスを設定せよとも書かれている。なるほど……。
export PATH=$PATH:$(go env GOPATH)/bin
Tour of Goをやって以降あまりちゃんと勉強してないのがバレてしまった。GoはEffective Goとか他にもドキュメントが色々あるので、年末年始にでもじっくり読んでみようかな。
[まとめ]
- Goをインストールしたらまずは~/go/binを環境変数PATHに追加しておく
- export PATH=$PATH:$(go env GOPATH)/bin
- export PATH=$PATH:~/go/bin
それでは、素敵なGoライフを!