🪵

【Rails】migrationからRidgepoleに移行する

2023/06/22に公開

はじめに

本記事では、RailsのDBスキーマ管理をActive Recordのmigration機能からgemのRidgepoleに移行する手順をまとめます。

Ridgepoleとは

Ridgepoleは、migrationを使用しなくてもDBスキーマ管理をできるようにするgemです。
デフォルトのRailsでは変更のたびにmigrationファイルを増やす必要がありますが、Ridgepoleを使用すると"スキーマファイル"を編集することでDBスキーマを更新することができます。
https://github.com/ridgepole/ridgepole

Ridgepoleに移行する

Gemfileに

Gemfile
gem "ridgepole"

を追記して

❯ bundle install

します。

次に、Ridgepoleで使用する"スキーマファイル"を作ります。私の場合は、dbディレクトリにSchemafileという名前のファイルを作成しました。

db/
├── migrate/
├── schema.rb
└── Schemafile

それでは、既存のschema.rbSchemafileにエクスポートします。

❯ 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