メニューを閉じる

テクノデジタルグループ

メニューを開く

2025.12.17

DB

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

はじめに

GoでAPI開発を始めたばかりの頃、私はデータベースのマイグレーションファイルを既存ファイルをコピーして手打ちして作っていました。
「前の番号が 000003 だから、次は 000004 で……」と、睨めっこしながらファイルを作成。
めんどくさすぎる~!と多少のイラつきを覚えながら作業していましたが、実はそんなことしなくていいんです。

今回は、私のような「手打ち派」を卒業するための、migrate(golang-migrate)ツールの導入と使い方をまとめます。

1. 準備:まずは道具を揃える(初回のみ)

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 コマンドが使えるようになります。

2. マイグレーションファイルの作成

# マイグレーションファイルを生成
migrate create -ext sql -dir database/migrations -seq ファイル名

実行すると、指定したディレクトリ(例では database/migrations)に以下の2ファイルが自動生成されます。
00000x_ファイル名.up.sql (テーブル作成などの変更用)
00000x_ファイル名.down.sql (変更を取り消す用)

自動で連番を振ってくれるので、手動管理による番号被りの心配がなくなります。

3. マイグレーションの実行

以下を実行することでマイグレーションの適用や戻しをすることができます。
接続情報は環境変数を使用したほうがスマートかもですね。

# 【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つでも当てはまる方は是非、詳細ページへ!
  • 自分でアプリを作ってみたい
  • ITで世の中にワクワクを生み出したい
  • 使いやすさ、デザインにこだわったWebサイトを開発したい

採用情報の詳細はこちら


Qangaroo(カンガルー)

  • 徹底した見やすさと優れた操作性で、テストの「見える化」を実現。
  • テストの進捗が見える。開発がスマートに進む。
  • クラウド型テスト管理ツール『Qangaroo(カンガルー)』

【テクノデジタルのインフラサービス】

当社では、多数のサービスの開発実績を活かし、
アプリケーションのパフォーマンスを最大限に引き出すインフラ設計・構築を行います。
AWSなどへのクラウド移行、既存インフラの監視・運用保守も承りますので、ぜひご相談ください。
詳細は下記ページをご覧ください。

https://www.tcdigital.jp/infrastructure/

最近の記事