3
3

Rakeタスクの使い方

Posted at

経緯

本番環境へあげる際に、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タスクを使うことで、マイグレーションの順番を明確に設定し、本番環境へのデプロイを容易にすることができます。また、個別のマイグレーションファイルを指定して手動で実行することも可能です。今回の記事では、具体的な例として複数のテーブル作成と既存テーブルへのカラム追加を順番に実行する方法を紹介しました。これにより、本番環境へのデプロイ時の手間を大幅に減らすことができます。

3
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
3