Ridgepoleでスキーマ管理をする

はじめに

はじめまして、飯塚(@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

参考:https://github.com/ridgepole/ridgepole?tab=readme-ov-file#usage


まとめ

  • Schemafileだけで完結できること
  • ロールバックを意識して書く必要がない

すごく簡単にスキーマ管理できるのでいいですよね。一方でRailsにとっては外部ライブラリである以上、ridgepoleのメンテナンスが終わってしまったら少し大変そうだなと思いました。(CequelというCassandraのORM的なGemがまさにそんな感じなので…)現在もちゃんとメンテナンスされているので今のところは心配なさそうですが!

以上、簡単ですが最近使ったGemの紹介でした。

参考記事

コメントする

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

上部へスクロール