🪵
【Rails】migrationからRidgepoleに移行する
はじめに
本記事では、RailsのDBスキーマ管理をActive Recordのmigration機能からgemのRidgepoleに移行する手順をまとめます。
Ridgepoleとは
Ridgepoleは、migrationを使用しなくてもDBスキーマ管理をできるようにするgemです。
デフォルトのRailsでは変更のたびにmigrationファイルを増やす必要がありますが、Ridgepoleを使用すると"スキーマファイル"を編集することでDBスキーマを更新することができます。
Ridgepoleに移行する
Gemfileに
Gemfile
gem "ridgepole"
を追記して
❯ bundle install
します。
次に、Ridgepoleで使用する"スキーマファイル"を作ります。私の場合は、db
ディレクトリにSchemafile
という名前のファイルを作成しました。
db/
├── migrate/
├── schema.rb
└── Schemafile
それでは、既存のschema.rb
をSchemafile
にエクスポートします。
❯ ridgepole --config config/database.yml --export --output db/Schemafile
Export Schema
db/Schemafile
を見ると、エクスポートできていることが確認できると思います。
db/Schemafile
# encoding: utf-8 << 任意追記
# -*- mode: ruby -*-
# vi: set ft=ruby :
create_table "users", force: :cascade do |t|
...
また、# encoding: utf-8
を一番上に追記すると日本語文字を扱うことができるようになります。
以下でRidgepoleのスキーマファイルを適用してDBスキーマを変更できます。
❯ ridgepole --config config/database.yml --apply --file db/Schemafile
Apply `db/Schemafile`
No change
まだ、Schemafile
を編集していないのでNo change
と出力されています。
これで、Schemafile
を編集することでDBスキーマを変更できるようになりました。
確認できたら、migrate/
とschema.rb
を削除しても問題ありません。
(スキーマファイルが2つあると紛らわしいので、削除した方がいいと思います。)
Discussion