読者です 読者をやめる 読者になる 読者になる

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