簡易 Migration ツール Ekot(エコー) を作ったよ
1回書いたエントリが消えちゃったのでやっつけで書いちゃうよ。
Rails っていうのは僕にとってそう魅力的でないけれど、1つだけ羨ましい機能がある。それが Migration.
あまりに羨ましすぎて、PHP や Java のお仕事でも Rails のプロジェクトを作って Migration の機能だけ使ったりしてた。でも、それもめんどいので PHP 製で探し始めたところあるにはあるが、ORM の付属だったり array で定義をゴリゴリ書いたりして性にあわないので、自分で作ることにした。
ダウンロードはここから ekot-0.0.1.zip をダウンロードして下さい。
使い方
php ekot generate user
_20100516143705_user.php
<?php /** * _20100516143705_user */ require_once 'system/Migration.php '; class _20100516143705_user extends Migration { /** * up */ public function up() { } /** * down */ public function down() { } }
でこのファイルにこんな感じで追記します。
<?php /** * _20100516143705_user */ require_once 'system/Migration.php '; class _20100516143705_user extends Migration { /** * up */ public function up() { $this->_adapter->createTable('user') ->addColumn('user', 'name', 'string') ->addColumn('user', 'address', 'string'); } /** * down */ public function down() { $this->_adapter->dropTable('user'); } }
そしてコマンドプロンプトに戻って「php ekot migrate」ってやると「user」テーブルが出来上がります。
ちなみにこんな SQL が発行されてます。
-- _20100516143705_user CREATE TABLE `user` ( `id` int(11) NOT NULL auto_increment, `updated_at` datetime default NULL, `created_at` datetime default NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; ALTER TABLE `user` ADD COLUMN `name` varchar(255) ; ALTER TABLE `user` ADD COLUMN `address` varchar(255) ;
これは「php ekot dump」ってやると「dump.sql」っていうファイルができます。過去のマイグレーションもすべて出力するので素敵な感じです。
いつものようにドキュメント書く気力がないのであれですが、テーブルを作る際のオプション・カラムを作る際のオプションとかも綺麗に書ける感じです。rollback もできるし、現在の version もとれるし、さっき書いたけど dump も取れるので他の DB に入れる際には便利だと思います。
今のところ MySQL のみの対応です。お酒をおごってくれたり、お金をくれたりすると他のDBにも対応すると思います。
あ、最後に。Ekot という名前は Sketch Show の曲名から。Google さんに聞いてみたところスウェーデン語らしいです。