🐳

【Rails × Docker】マイグレーション済みのテーブルを安全に修正する方法 🐳

に公開

Docker環境でRailsのマイグレーションを安全に修正する方法

Rails開発では、マイグレーション実行後にカラムの型を変更したくなることがあります。

この記事では、Docker環境でRailsアプリケーションのテーブル構造を安全に変更する方法を解説します。具体例として「Booksテーブルのpriceカラムをstring型からinteger型に変更する」ケースを扱います。


想定するテーブル構造

以下のマイグレーションが実行済みとします。

class CreateBooks < ActiveRecord::Migration[7.1]
  def change
    create_table :books do |t|
      t.string :price

      t.timestamps
    end
  end
end

しかし、「価格を数値として扱う」などの理由から、後で型を変更したくなることがあります。


推奨される修正方法(新しいマイグレーションを作成)

Railsでは既存のマイグレーションを書き換えるのではなく、新規にマイグレーションを作成して修正するケースが多いです。

Step1. Docker環境で新しいマイグレーションファイルを作成

Dockerの場合、Railsコマンドはコンテナ内で実行します。

docker compose exec web bundle exec rails generate migration ChangeBooksPriceToInteger

上記コマンドで以下のファイルが作成されます。

db/migrate/20250314000000_change_books_price_to_integer.rb

Step2. マイグレーションファイルを編集

生成されたマイグレーションファイルを開き、カラム型を変更する処理を追加します。

class ChangeBooksPriceToInteger < ActiveRecord::Migration[7.1]
  def up
    change_column :books, :price, :integer
  end

  def down
    change_column :books, :price, :string
  end
end
  • upメソッド:マイグレーション実行時に適用される変更。
  • downメソッド:ロールバック時に適用される変更。

Step3. マイグレーションをDocker環境で実行

変更をデータベースに反映させます。

docker compose exec web bundle exec rails db:migrate

これにより、Booksテーブルのpriceカラムはinteger型になります。



まとめ

  • Docker環境では、マイグレーション作成・実行時にRailsコマンドはコンテナ内で実行。
  • 新しいマイグレーションファイルを追加することで、Railsのマイグレーションを安全に実施。
  • updownメソッドを使い、変更とロールバック処理を明示的に定義。

以上がDocker環境でRailsマイグレーションを安全に修正する方法です。

参考

https://railsguides.jp/active_record_migrations.html#changeメソッドを使う

Discussion