localdisk

PHP とか Java とか Web とか好きなことを書きます。

簡易 Migration ツール Ekot(エコー) を作ったよ

1回書いたエントリが消えちゃったのでやっつけで書いちゃうよ。
Rails っていうのは僕にとってそう魅力的でないけれど、1つだけ羨ましい機能がある。それが Migration.
あまりに羨ましすぎて、PHPJava のお仕事でも Rails のプロジェクトを作って Migration の機能だけ使ったりしてた。でも、それもめんどいので PHP 製で探し始めたところあるにはあるが、ORM の付属だったり array で定義をゴリゴリ書いたりして性にあわないので、自分で作ることにした。

ダウンロードはここから ekot-0.0.1.zip をダウンロードして下さい。

使い方

  • 解凍したらコマンドプロンプトに「php ekot generate [任意の名前]」
  • すると「migrate」ってフォルダに「_タイムスタンプ任意の名前.php」というファイルができます。こんな感じ

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 さんに聞いてみたところスウェーデン語らしいです。