📦
Migrations(マイグレーション)
コードでデータベーススキーマをバージョン管理
MigrationはデータベーススキーマのRubyコードによる管理システムです。SQLを直接実行する代わりに、マイグレーションファイルを作成しrails db:migrateで適用します。
# db/migrate/20240101000000_create_posts.rb
class CreatePosts < ActiveRecord::Migration[8.0]
def change
create_table :posts do |t|
t.string :title, null: false
t.text :content
t.references :user, null: false, foreign_key: true
t.string :status, default: 'draft'
t.timestamps # created_at、updated_atを自動追加
end
add_index :posts, :status
end
end
主要コマンド:
rails db:migrate— 未適用マイグレーション実行rails db:rollback— 最後のマイグレーションを巻き戻しrails db:migrate:status— マイグレーション適用状態確認
ファイル名のタイムスタンプ(20240101000000)で実行順序が決まり、schema_migrationsテーブルに適用済みマイグレーションが記録されます。
キーポイント
1
rails generate migration CreatePosts title:string content:text → マイグレーションファイル生成
2
生成ファイルのchangeメソッドにスキーマ変更を定義
3
create_table、add_column、remove_column、rename_column等のDSL使用
4
rails db:migrate実行 → SQLに変換されDBに適用
5
db/schema.rbが自動更新(現在のスキーマスナップショット)
6
rails db:rollbackで巻き戻し可能(changeメソッドは自動逆転)
メリット
- ✓ DBスキーマをGitでバージョン管理
- ✓ チームメンバー間スキーマ同期自動化
- ✓ changeメソッドで自動ロールバックサポート
- ✓ DB種類に依存しないDSL
デメリット
- ✗ 本番マイグレーションは慎重に(データ損失リスク)
- ✗ 大容量テーブルマイグレーションは時間がかかる
- ✗ downメソッドがないとロールバック不可
- ✗ マイグレーションファイルが増え続ける
ユースケース
テーブル作成/削除
カラム追加/修正/削除
インデックス追加
外部キー設定
チーム間スキーマ同期