2025.12.17
Goのマイグレーション管理で消耗してた話。migrateコマンドを使おう!
2025.12.17
DBGoのマイグレーション管理で消耗してた話。migrateコマンドを使おう!

GoでAPI開発を始めたばかりの頃、私はデータベースのマイグレーションファイルを既存ファイルをコピーして手打ちして作っていました。
「前の番号が 000003 だから、次は 000004 で……」と、睨めっこしながらファイルを作成。
めんどくさすぎる~!と多少のイラつきを覚えながら作業していましたが、実はそんなことしなくていいんです。
今回は、私のような「手打ち派」を卒業するための、migrate(golang-migrate)ツールの導入と使い方をまとめます。
Windows環境なら、パッケージマネージャーのScoopを使うとインストールが簡単です。
PowerShellを開いて以下のコマンドを実行します。
# 1. 実行ポリシーの変更(外部スクリプトの実行を許可)
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser
# 2. Scoopのインストール
Invoke-RestMethod -Uri https://get.scoop.sh | Invoke-Expression
# 3. migrateツールのインストール
scoop install migrate
これで、ターミナルから migrate コマンドが使えるようになります。
# マイグレーションファイルを生成
migrate create -ext sql -dir database/migrations -seq ファイル名
実行すると、指定したディレクトリ(例では database/migrations)に以下の2ファイルが自動生成されます。
00000x_ファイル名.up.sql (テーブル作成などの変更用)
00000x_ファイル名.down.sql (変更を取り消す用)
自動で連番を振ってくれるので、手動管理による番号被りの心配がなくなります。
以下を実行することでマイグレーションの適用や戻しをすることができます。
接続情報は環境変数を使用したほうがスマートかもですね。
# 【Up】1つ分のマイグレーションを適用する
migrate --path database/migrations --database "接続情報" -verbose up 1
# 【Down】1つ分だけマイグレーションを戻す
migrate --path database/migrations --database "接続情報" -verbose down 1
🚨 【超重要】Down実行時の注意点
downの後の数字(1など)を忘れると、デフォルトでは「全削除(all)」扱いになります。 苦労して作ったテーブルが全て消え去ってしまうため、「必ず数字を指定する」**ことを癖にしましょう!
手打ちで頑張っていた頃は、連番の管理や up/down のペア作りをいそいそと行っていましたが、migrate コマンドを覚えてからはそういったストレスから解放されました!
「手動でやってるけど、これ効率悪いな…」と感じている方の参考になれば幸いです!
さらば、手動コピー!
【記事への感想募集中!】
記事への感想・ご意見がありましたら、ぜひフォームからご投稿ください!【テクノデジタルではエンジニア/デザイナーを積極採用中です!】
下記項目に1つでも当てはまる方は是非、詳細ページへ!Qangaroo(カンガルー)
【テクノデジタルのインフラサービス】
当社では、多数のサービスの開発実績を活かし、
アプリケーションのパフォーマンスを最大限に引き出すインフラ設計・構築を行います。
AWSなどへのクラウド移行、既存インフラの監視・運用保守も承りますので、ぜひご相談ください。
詳細は下記ページをご覧ください。
最近の記事
タグ検索