rails
Pocket

最近、Rails + Reactの案件をやっていたりして、Railsの知見もちょっとずつ溜まっているのでメモ。

ridgepoleはDBスキーマを管理するgemです。

Railsでデータを追加したり、データ構造を変える時、いちいち以下のようなコマンドでmigrationファイルを作って、rails db:migrateするのがめっちゃめんどくさいと思っていました。がっつりRailsをやることはないので、AddAgeToUsersあたりの並び順をたまにやるといつも忘れます。。。

rails generate migration AddAgeToUsers age:integer

そこで、ridgepoleを使うとスキーマはファイルで一覧できるし、変更したい時はそのファイルを修正して、適用するコマンドを打つだけ。データ構造見やすいし、変更も追加もしやすいというもので便利でした。

準備

Gemfileに以下を追加し、bundle install

gem 'ridgepole'

すでにmigrateでスキーマを定義してる場合は、以下のコマンドを打つと、ridgepole用に自動生成してくれます。

bundle exec ridgepole -c config/database.yml -E development --split --export -o db/Schemafile

–splitをつけるとテーブルごとに分割してファイルを作ってくれます。

適用

適用する時は以下のコマンドを打ちます。

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

変更があれば、変更内容がコマンドで表示されます。

追加や変更など

追加や変更がある場合は、articles.schemaのような感じでdb以下に作り、このような感じで書きます。すでにあるものを変更する場合は、このファイルを書き換えるだけです。

create_table "articles", force: :cascade do |t|
  t.text "url"
  t.text "title"
  t.integer "user_id"
end

–splitで分割して作った場合は、Schemafileでrequireするのも忘れずに。

require 'articles.schema'

追加や変更をした後は、適用のコードを打ちます。

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

最後に

変更したい時はファイルを編集して、適用。追加したい時はファイルを作るという操作でDBスキーマを管理できるようになって、構造を見やすいし、変更も楽になりました。便利!

参考

db:migrateの管理からridgepoleに移行する

Qiita @paranishian
Pocket

カテゴリー: タグ: