🐳
【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のマイグレーションを安全に実施。
-
up
・down
メソッドを使い、変更とロールバック処理を明示的に定義。
以上がDocker環境でRailsマイグレーションを安全に修正する方法です。
参考
Discussion