経緯
本番環境へあげる際に、rails db:migrateの順番が複雑化したことがありました。その結果、本番環境へデプロイする担当者が手間取ってしまうことが多々ありました。そこで、Rakeタスクを利用してマイグレーション順を自動化し、誰でも簡単にデプロイできるようにする方法を紹介します。
Rakeタスクの基本
まず、Rakeタスクの基本的な作成方法を説明します。Rakeタスクは、Railsのプロジェクト内のlib/tasksディレクトリに配置します。
Rakeタスクのファイル作成
以下のようなファイルをlib/tasksディレクトリに作成します。
touch lib/tasks/db_migrate.rake
Rakeタスクのファイル作成
以下のようなファイルをlib/tasksディレクトリに作成します。
# lib/tasks/db_migrate.rake
namespace :task do
desc "Custom DB Migrate"
task migrate_custom: :environment do
puts "Running migrations in custom order..."
system("rails db:migrate:up VERSION=20220101010101")
#別の処理
system("rails db:migrate:up VERSION=20220101010201")
#別の処理
system("rails db:migrate:up VERSION=20220101010301")
puts "All migrations completed."
end
end
上記のように好きな順番でマイグレーションの順番を設定できます。
具体的な例として、複数のテーブル作成と既存テーブルへのカラム追加を行うマイグレーションを順番に実行するRakeタスクを作成します。
上記のタスクでは、以下の順番でマイグレーションファイルを作成します。
実際に打ち込まれるコマンド:
rails generate migration CreateUsers name:string email:string
rails generate migration AddAgeToUsers age:integer
rails generate migration CreatePosts title:string body:text user:references
マイグレーションファイル:
# db/migrate/20220101010101_create_users.rb
class CreateUsers < ActiveRecord::Migration[6.0]
def change
create_table :users do |t|
t.string :name
t.string :email
t.timestamps
end
end
end
# db/migrate/20220101010201_add_age_to_users.rb
class AddAgeToUsers < ActiveRecord::Migration[6.0]
def change
add_column :users, :age, :integer
end
end
# db/migrate/20220101010301_create_posts.rb
class CreatePosts < ActiveRecord::Migration[6.0]
def change
create_table :posts do |t|
t.string :title
t.text :body
t.references :user, foreign_key: true
t.timestamps
end
end
end
Rakeタスクの実行
Rakeタスクを実行するには、以下のコマンドを使用します。
bundle exec rake task:migrate_custom
このコマンドを実行することで、指定した順番でマイグレーションが実行されます。
またマイグレーションによっては、up,downの設定も必要になるかもしれません。
up,downについての参考記事:
https://qiita.com/sinke_123/items/d12494a70ac00b8096ef
これにより、指定したマイグレーションを順番に実行し、その間に必要な追加の処理を行うことができます。
まとめ
Rakeタスクを使うことで、マイグレーションの順番を明確に設定し、本番環境へのデプロイを容易にすることができます。また、個別のマイグレーションファイルを指定して手動で実行することも可能です。今回の記事では、具体的な例として複数のテーブル作成と既存テーブルへのカラム追加を順番に実行する方法を紹介しました。これにより、本番環境へのデプロイ時の手間を大幅に減らすことができます。