DBFlute Intro で異なる環境の DB スキーマ同士の diff をとる #dbflute

はじめに

サーバサイドアプリケーション開発プロジェクトにおいては、ローカル開発環境・ステージング環境・本番環境など複数の環境を用意していることが多いと思います。 それぞれの環境で、異なるバージョンのアプリケーション・データベースをデプロイし、開発を進めていくわけですが、デプロイスケジュールや DB 変更を伴う Issue が錯綜してくると、各環境同士の DB スキーマの diff を取りたくなります。

そこで、jflute さん作の DBFlute Intro で異なる環境の DB スキーマ同士の diff をとってみました。

DBFlute Intro のダウンロード・インストール

DBFlute Intro とは

DBFlute Intro は、DB 変更運用まわりの支援ツールです。

O/R マッパーである DBFlute 本体 とは独立しているので、 DBFlute を使っていないプロジェクトでも Intro だけを DB 変更運用支援ツールとして使用することができます。

詳しくは本家サイトをご覧ください。

DBFlute Intro のダウンロード

DBFlute Introのサイトへ行き、jarをダウンロードします。

jarを任意の場所に保存します。

インストール

ダウンロードした jar をダブルクリックすると GUI が立ち上がります。

OK をクリックするとツール本体が jar と同じ場所にダウンロードされます。

これでインストールは完了です。

DB 接続情報の設定

比較元 DB 接続情報の設定

初期画面は以下のようになっています。

この画面の各項目を埋めていきます。 JDBC ドライバが必要なので、別途 JDBC ドライバの jar を用意しておき指定します。

ローカルの MySQL を指定した場合の最終的なイメージは以下のようになります。

比較先 DB 接続情報の設定

「他のDB環境」欄の+ボタンをクリックします。

ダイアログが出てくるので環境がわかるような名前を付けます。

DB 接続情報を入力します。

※ SSH トンネルの指定はできないので、必要な場合は予め自分でトンネルを掘っておく必要があります。

「作成」ボタンをクリックして完了です。

diff をとる

早速diffをとってみましょう。

接続情報設定後の画面にて、「スキーマの差分チェック」ボタンをクリックします。

比較先の DB を選択すると diff が開始します。

diff で差異が出ると「異常終了」と表示されますが、diff 自体は成功しているので慌てる必要はありません。

おそらく、スキーマの差分チェック機能は各環境で一致することを機械的に確認するためのものであり、差分を見たいという用途を想定しているものではないのでしょう。

詳細を確認するには「差分チェック結果を開く」をクリックします。

差分チェック結果はブラウザで確認することができます。 見方は以下のとおりです。

使ってみて

これまでも、異なる環境の DB スキーマ同士の差異を把握したいことがありましたが、ツールで機械的に行うと間違いが起きないとわかっていながら、なんとなく目検で済ませてしまうことが多かったように思います。 DBFlute Intro は GUI で手軽に扱える上、カラムコメントまで細かく比較してくれるので、目検では気づかなかったところまで検出することができます。

ネットワークを越えた環境では事前に SSH トンネルを掘っておく必要があるかも知れませんが、運用フェーズに入ったサービスにおけるリリース確認作業にはとても有用です。 同じ問題を抱えている方は是非試してみてください。