#5「GitDDLまじイノベーティブ」 tech.kayac.com Advent Calendar 2012

好きな IPA は志賀高原ビールの @soh335 です。

早くビール飲みたいのですが書かないと怒られるので今日は、隣の発明家が作った GitDDL というモジュールについて説明しますね。

(隣の発明家に任せると「GitDDLまじイノベーティブ(完)」としか説明してくれないので)

なにするものなの

名前を見て通り、Git で database の schema 管理をするものです。それ以前は、DBIx::Class::Schema::Versioned とかを使っていたようです。

仕組み

まず、Git で管理されている schema ファイルを指し示すコミットのハッシュを database 上で管理します。 schema に変更があった場合、このコミットのハッシュが databse 上のものとで差異が生まれます。よって database 上の schema は期待する schema ではないと見なします。

次に、database 上で管理されているコミットのハッシュを利用し、そのハッシュが指し示す schema ファイルと現在の schema ファイルの差分を SQL::Translator::Diff を使い生成します。

上記の方法によって求めた差分を database に反映し、database 上で管理されている schema を指し示すコミットのハッシュを更新します

GitDDL では上記の仕組みで動いています

日本語分かりづらい

すいません

イメージが湧きづらい

ちょうど手元に GitDDL 等の説明を仰せつかったけど、isucon 2 社内報告会 と被って、陽の目を浴びることがなかったスライドがあったのでそこから流用しますね

git-ddl.png

うれしいこと

  • 2つの状態の差分で求めるのでシンプル
  • ブランチごとに気軽に schema を変えられる
  • ついでに databse の内容も同じ方法で管理するとより捗る

明日は

@ken39arg 大先生が 1年と5ヶ月ぶりに blog 書きます

vim の捗る話とか書きたかったわー。早く麦酒飲みたい。