はじめに
はじめまして、飯塚(@029udonn)と申します!たぶんTechBull内では珍しいアプリ側をメインで触るソフトウェアエンジニア(3年目)です。アパレル販売員→アパレル経理として働いたのち、現在の会社でソフトウェアエンジニアに転職しました。エンジニア転職活動の時期に自作アプリを作る過程でMENTAでAWSの学習サポートを@adachin0817(安達)さんにお願いしていた繋がりでTechBullに参画しました。
普段の業務ではRailsをメインにExpress, Reactなども少し書いていています。最近の業務ではCircleCIからGitHub Actionsに移行するなど、CIの構築が好きになってきました。CI/CDって便利だし、カッコいいですよね。
さて、今回は最近個人的に触って便利だなと思ったridgepoleというGem(ライブラリ)を紹介しようと思います!
Railsのマイグレーションシステム
Railsの標準機能でもスキーマ管理はできます。
ざっくりと以下の流れでやります。
- マイグレーションファイルを作る
rails db:migrate
を実行する- マイグレーションファイルに沿ってschemaが更新される
さすがRails、めちゃくちゃ簡単ですね。しかし、ロールバックできるようにreversibleを使ったり、up/downメソッドを使って書く必要がありますし、システムが長く運用されていくとDBスキーマの変更に伴ってマイグレーションファイルがすごい数になるなど少なからず気になる点もあります。
ridgepoleの紹介
そんな気になる点を解決してくれるのがridgepoleです。READMEにも書いてある通り、RidgepoleとはDBのスキーマを管理してくれるライブラリです。(Cookpadの方が作ったらしい)
Ridgepole is a tool to manage DB schema.
使い方は簡単で、Gemをインストール後にSchemafile
を作成してDBのスキーマ情報を記述してridgepole --apply
コマンドを叩くだけ 。(以下は簡単な例をChatGPTで生成)これだけでDBに反映することができます。
仕組み的にはridgepole --apply
を実行すると、実際のDBとSchemafileを比較して差分だけを ALTER TABLE
してくれるので冪等性が保証されているようです。
- Schemafile
1 2 3 4 5 6 7 8 9 10 11 12 13 |
create_table "users", force: :cascade do |t| t.string "name", null: false t.string "email", null: false t.integer "age" t.timestamps null: false end create_table "posts", force: :cascade do |t| t.string "title", null: false t.text "content" t.references :user, foreign_key: true t.timestamps null: false end |
参考:https://github.com/ridgepole/ridgepole?tab=readme-ov-file#usage
まとめ
- Schemafileだけで完結できること
- ロールバックを意識して書く必要がない
すごく簡単にスキーマ管理できるのでいいですよね。一方でRailsにとっては外部ライブラリである以上、ridgepoleのメンテナンスが終わってしまったら少し大変そうだなと思いました。(CequelというCassandraのORM的なGemがまさにそんな感じなので…)現在もちゃんとメンテナンスされているので今のところは心配なさそうですが!
以上、簡単ですが最近使ったGemの紹介でした。
参考記事
アパレル販売員→アパレル経理として働いたのち、ソフトウェアエンジニアに転職。エンジニア転職活動の時期に自作Railsアプリを作る過程でMENTAでAWSの学習サポートを@adachin0817にフォローしてもらいTechBullに参画。アプリケーション周りの記事を執筆。