約束の地

キャロ組

Ridgepole を用いて データベース の スキーマ を Git で管理する

Ridgepole

こちらです。

データベースの構造の履歴を取る

Ridgepole はマイグレーションツールとしての側面が強いですが、データベースのスキーマを取得するツールとしても便利です。

実行時のオプションに --export をつけるだけで指定したデータベースのスキーマを瞬時に書き出してくれます。

この機能を用いて、データベースのスキーマの履歴を取得しようとしました。

流れ

流れは単純です。

1. スキーマを出力できるように設定ファイルを書く

データベースへの接続設定を書きます。

ドキュメントでは YAML に設定を書く例が載っていますが、ユーザ名やパスワードを隠したいために、以下ではハードコーディングをしています。そのため、冒頭で dotenvyaml を require しています。

dotenv についてはこちらのドキュメント などを参照してください。

require 'dotenv/load'
require 'yaml'

database = {
  adapter: 'mysql2',
  host: '123.123.123.123',
  database: 'your_database',
  username: ENV['DB_USERNAME'],
  password: ENV['DB_PASSWORD'],
}.to_yaml

command = "ridgepole -c '#{database}' --export -o Schemafile"
`#{command}`

2. cron で回す

あとは「1.」のコードを cron で回します。whenever を使うと楽です。

3. cron で実行する内容に git commit を入れる

「2.」で cron を実行してスキーマファイルを取得するわけですが、取得後に git add git commit git push するコードも入れておきます。

こうすることで変更があった場合に自動で push されます。

当然ですが、いつも同じディレクトリで実行してスキーマファイルを上書きする形にならないと正常に差分が取れないので注意です。

Powered by はてなブログ