【Rails】rails migrationを使わずにridgepoleを使ってみた

公開:2021/02/10
更新:2021/02/10
1 min読了の目安(約1100字TECH技術記事

公式ドキュメント

https://github.com/winebarrel/ridgepole

導入理由

現職の現場で導入する機会があり、個人の開発においても利用してみようと思ったのがきっかけです。
よくmigrationが壊れて修正することがあったので、開放されたかったのも理由の一つです。

利用している中でのメリット

  1. DB変更をするたびにマイグレーションファイルを作る必要がない(テーブルの数とschemaファイルの数がイコール)

  2. rails migrationのような失敗することもない(環境によるファイルバージョンの不整合が発生しない)

導入方法

Gemfileに下記のコードを追加します

gem 'ridgepole'

ファイルの管理方法

schemaを管理するディレクトリを作り、テーブルごとにschemaファイルを作成しました。
(Schemafileを作成し、その中に全てのテーブル情報を書く方法もあったので、好みかと思います。)

例) ファイル名: articles.schema
中身: 
create_table "articles", force: :cascade do |t|
 t.string   "title"
 t.text     "text"
 t.datetime "created_at"
 t.datetime "updated_at"
end
※ 公式ドキュメントを参照

テーブルごとにファイルを分割する場合、Schemafileで、各ファイルをDir.globなどを利用してディレクトリを読み込めるようにしておく必要がございます。DBへの適応時にSchemafileで各テーブルの情報を参照するためです。

DBへの適応方法

公式では、config.ymlからDBの情報を取得しているみたいですが、railsではDBの情報はconfig/database.ymlに記載されているので、config/database.ymlを指定しています。
下記コマンドを実行することで、DBにテーブルが作成されます。また、テーブル情報を変更する場合は、各テーブルのschemaファイルの中身からカラムを消したり、データ型を変更したりして、保存し、再度下記コマンドを実行するだけで適応されます。どのカラム・テーブルが削除・変更されたのかの情報もコマンド実行時に出力されるため、安心して利用できます。

bundle exec ridgepole --file Schemafile -c config/database.yml -E development --apply