Rakeでスマートに操作! Railsマイグレーション個別実行・巻き戻しの極意
Ruby on Rails で Rake を使って単一のマイグレーションを実行する方法
単一のマイグレーションを実行するには、以下のコマンドを使用します。
rake db:migrate VERSION=TIMESTAMP
このコマンドでは、TIMESTAMP
をマイグレーションファイル名のタイムスタンプに置き換える必要があります。例えば、マイグレーションファイル名が 20240521153000_create_users.rb
であれば、以下のコマンドになります。
rake db:migrate VERSION=20240521153000
このコマンドを実行すると、指定されたマイグレーションのみが実行されます。他のマイグレーションは実行されません。
単一のマイグレーションを実行するその他の方法
上記の方法以外にも、以下の方法で単一のマイグレーションを実行できます。
rake db:migrate:up VERSION=TIMESTAMP
コマンドを使用する。- マイグレーションファイルの先頭に
require 'rails/version'
行を追加し、その後にActiveRecord::Migration.execute("SQL STATEMENT")
行を追加する。
以下の例では、create_users.rb
という名前のマイグレーションファイルを作成し、users
テーブルを作成します。
# create_users.rb
class CreateUsers < ActiveRecord::Migration[5.2]
def up
create_table :users do |t|
t.string :name
t.string :email
t.timestamps
end
end
def down
drop_table :users
end
end
rake db:migrate VERSION=20240521153000
このコマンドを実行すると、users
テーブルがデータベースに作成されます。
注意事項
- 単一のマイグレーションを実行する前に、必ず
rake db:schema:load
コマンドを実行して、既存のマイグレーションを適用していることを確認してください。 - 単一のマイグレーションを実行すると、データベースのスキーマが変更されます。マイグレーションを取り消す場合は、
rake db:migrate:down VERSION=TIMESTAMP
コマンドを実行する必要があります。
Ruby on Rails で Rake を使って単一のマイグレーションを実行するサンプルコード
# create_users.rb
class CreateUsers < ActiveRecord::Migration[5.2]
def up
create_table :users do |t|
t.string :name
t.string :email
t.timestamps
end
end
def down
drop_table :users
end
end
rake db:migrate VERSION=20240521153000
説明
このコードは、以下の内容を記述しています。
class CreateUsers < ActiveRecord::Migration[5.2]
:マイグレーションクラスを定義します。def up
:マイグレーションを実行する際に実行されるメソッドを定義します。create_table :users do |t|
:users
テーブルを作成します。t.string :name
:name
という名前の文字列カラムを作成します。t.timestamps
:created_at
とupdated_at
という名前のタイムスタンプカラムを作成します。end
:up
メソッドの終了を示します。
このサンプルコードは、Rake を使って単一のマイグレーションを実行する方法を理解するための出発点として役立ちます。
Ruby on Rails で Rake を使って単一のマイグレーションを実行するその他の方法
このコマンドは、rake db:migrate VERSION=TIMESTAMP
コマンドとほぼ同じですが、マイグレーションを アップ 方向にのみ実行します。つまり、データベーススキーマを最新の状態に更新します。
この方法は、より高度なマイグレーションを実行する場合に役立ちます。ActiveRecord::Migration.execute
メソッドを使用して、任意の SQL ステートメントを実行できます。
Rails コンソールを使用して、マイグレーションを手動で実行することもできます。以下の手順に従ってください。
- Rails コンソールを開きます。
- 以下のコマンドを実行して、マイグレーションファイルをロードします。
require 'rails/version'
require 'rails/db/schema'
ActiveRecord::Migration.execute("SQL STATEMENT")
例
# create_users.rb
class CreateUsers < ActiveRecord::Migration[5.2]
def up
execute "CREATE TABLE users (id INTEGER PRIMARY KEY AUTOINCREMENT, name VARCHAR(255) NOT NULL, email VARCHAR(255) NOT NULL, created_at DATETIME NOT NULL, updated_at DATETIME NOT NULL)"
end
def down
execute "DROP TABLE users"
end
end
rake db:migrate VERSION=20240521153000
- マイグレーションを手動で実行すると、データベースのスキーマが変更されます。マイグレーションを取り消す場合は、以下のコマンドを実行する必要があります。
ActiveRecord::Migration.execute("SQL STATEMENT")
ruby-on-rails database migration