2013-05-02
■[dbup] downコマンドがなくupだけのDBマイグレーションツール Dbup
ビー・バップ・ハイスクールって知ってますか? Dカップって大きいですよね?
というわけで、超シンプルなDBマイグレーションツール Dbup を作ってみたので紹介。
Dbup
インストールから実行までのデモンストレーション
dbup demo from brtriver on Vimeo.
特徴
- 準備はdbup.pharをダウンロードするだけ
- up コマンドしかありません。down コマンドは存在しません
- マイグレーションの記述は親しみあるSQLそのままです。ORMやDSLを新しく覚える必要はありません
- PHP標準のPDOクラスを利用しています
- マイグレーションのステータス管理のためにデータベースに専用のテーブルを作る必要がありません
- PHP5.4以上。5.3.xでは動きません。
なぜDBマイグレーションツールを作ったか
DBマイグレーションはデプロイ自動化や継続的インテグレーションにおいて一般的に使われるようになってきました。PHPのDBマイグレーションツールとしてはDoctrine2 Migraionがすぐ思い浮かびます。フレームワークに特化したORMの一部として用意されているもの( CakePHP Migrations PluginとかCodeIgniterのマイグレーション )もあったりします。
これらは、ORMの機能の一部だったりするので、ORMの使い方を理解している必要があったり、DSLを覚えたりする必要があったりと手軽さがありません。
DBマイグレーションはDBに対してSQLを発行するのがお仕事なので、アプリの言語とは同じである必要はありません。なので、MyBatis Schema Migration*1 やFlywayのようなツールを使うほうが導入が楽だったり再利用性が高かったりします。
ただ、これでもまだコストが高いと思っています。というのは、DBマイグレーションというとスキーマのバージョンをUpしたりDownしたり、または特定の時点のバージョンに戻したりというのができて幸せ!ということができるようになっているのですが、事実上Downや特定のバージョンにマイグレーションツールを使って安全に戻せることはとても至難だと思います。
たとえば、カラムを追加しデータがその新しいカラムに追加された時点でDownを実行してデータを消していいかどうかは場合によると思いますし、実際はアプリケーションもあわせてロールバックしなくてはならない場合もあります。
ソースコードと違い、DBマイグレーションは常に歴史を進めていく(Upしつづける)のも運用方法の1つだと考えます。
もし、Upして何か問題が発生した場合も、新しくSQLを用意しそのSQLを発行することで修正を行う方法です。
そして、このようにUpだけできれば良いシンプルなマイグレーションツールが無く、あれば良いよなぁってことで作ってみました。
ドキュメントに書いてないこと
- 当たり前ですが、フレームワークとか全く関係なく、使いたいときに使えます。
- PHP環境であれば、他言語のプロジェクトでも使えます。たまたまたPHPで書かれてるだけです。PDOのドライバが対応していれば大丈夫(なはず)
- githubからcloneしてきて適当にカスタマイズし、php dbup compile すれば俺マイグレーション作れます
- 実装は Symfony Component の Consoleですので、Symfonyのコマンドの一部として作り込むなんてのも簡単
- 「とりあえず作ってみた」感が強いので、実プロジェクトで使うときは要注意です。(dev環境やpre環境など本番とは別環境で十分確認できるようになっている等)
- バグ見つけたらPull Requestくだしあ
作ってすっきり。
- 56 http://b.hatena.ne.jp/
- 37 http://b.hatena.ne.jp/hotentry/it
- 24 http://reader.livedoor.com/reader/
- 24 http://t.co/XxpRCKaIjK
- 10 http://t.co/YkREjGPCFO
- 8 http://b.hatena.ne.jp/entry/d.hatena.ne.jp/brtRiver/20130502/1367499172
- 8 http://ow.ly/kDYQw
- 8 http://pipes.yahoo.com/pipes/pipe.info?_id=f8e50936209277c7946c9bc16b988bf7
- 7 http://b.hatena.ne.jp/entrylist?of=20
- 6 http://w3q.jp/go/14128
- 2013-04-28 かまたま日記2 7/111 6%
- 2013-04-28 Yusk’s UseCase 4/65 6%
- 2013-05-02 torutkの日記 5/98 5%
- 2013-04-29 かずきのBlog@Hatena 4/76 5%
2008 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2009 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2010 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2011 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2012 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2013 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |