FuelPHP の migrate Task

# 概要
FuelPHP では Database の Migration は `migrate` Task を用いて行う
`migrate` Task にはいくつかのコマンドとオプションが用意されている

また FuelPHP の Migration File は `fuel/app/migrations/nnn_xxx.php` のフォーマットとなっており
`nnn` にはバージョン番号、`xxx` には Class 名が入る
基本的には `nnn` も `xxx` も同じ値は利用してはならない

もし被ってしまった場合
`nnn` は `php oil refine migrate:current` や `php oil refine migrate --catchup` を利用することで同じバージョンでも実行可能
`xxx` は `php oil refine migrate:up` や `php oil refine migratre:down` で1件ずつ処理するなどして、同じ Class を読み込まないようにすることで実行可能

またバージョン (`nnn`) は3桁である必要はない (16桁までは利用できることを確認済み)

# 基本コマンド

## ヘルプ一覧を表示
    $ php oil refine migrate:help

## 現在のバージョン以降を　Migrate
    $ php oil refine migrate:run

もしくは

    $ php oil refine migrate

## 現在のバージョン以下で Migration できていないものを Migrate
    $ php oil refine migrate:current


## 現在のバージョンから一つだけ Migrate
    $ php oil refine migrate:up

## 現在のバージョンを Rollback
    $ php oil refine migrate:down

# オプション
## `-v`, `--version`
バージョンを指定
使い方は `-v=<version>` もしくは `--version=<version>` で `<version>` で指定した番号のバージョンとなる

e.g.
バージョンが 1, 2, 3, 4, 5 と Migration File がある場合に
`php oil refine migrate:up -v=4` を実行すると 1, 2, 3, 4 が Migrate される
この状態で `php oil refine migrate:down -v=2` を実行すると 4, 3 が Rollback される

## `--catchup` を指定
過去バージョンも含めて Migration
使い方は `php oil refine migrate --catchup` もしくは `php oil refine migrate:run --catchup` とすることで、過去のバージョンを含めて Migrate される
つまり `php oil refine migrate:current` と `php oil refine migrate` を同時に実行するようなもの

e.g.
バージョンが 1, 2, 3, 4 ,5 と Migration File があり、現在 1, 3, 4 が Migration されている場合に
`php oil refine migrate --catchup` を実行すると 2, 5 が Migrate される

## `--installed`
インストール済みモジュール・パッケージを指定する
`--modules=<インストール済みモジュール> --packages=<インストール済みパッケージ> --default` のエイリアス

NOTE:
`--all` を指定した場合 `--all`　が優先される

## `--all`
全てのモジュール・パッケージを指定する
`--modules --packages --default` のエイリアス

## `--default`
明示的に `default` を指定する
`default` はモジュールやパッケージを指定しなかった場合は有効となるが、モジュールやパッケージを指定した場合は無効となる
モジュールやパッケージを指定した場合でも有効としたい場合に利用する

つまり `m`, `--modules`, `-p`, `--packages` を指定すると `default` は無効となる

## `-m`, `--modules`
モジュールを指定する
値を指定しなかった場合は全てのモジュールを対象とする
値を指定する場合は、対象となるモジュールを `,` で連結する

e.g.
`php oil refine migrate -m` は全てのモジュールが対象となる
`php oil refine migrate -m=sample,example` は sample と example モジュールが対象となる

NOTE:
このオプションを指定すると `default` は無効となる

## `-p`, `--packages`
パッケージを指定する
値を指定しなかった場合は全てのパッケージを対象とする
値を指定する場合は、対象となるパッケージを `,` で連結する

e.g.
`php oil refine migrate -p` は全てのパッケージが対象となる
`php oil refine migrate -p=sample,example` は sample と example パッケージが対象となる

# Tips
## Database を初期化したい場合
Database を作り直した等のまっさらな状態で `php oil r migrate` を実行しても再生成されない
それは `fuel/app/config/<environment>/migrations.php` によって管理されているため Database の migrations Table がまっさらな状態でも Migration できない
そのため `fuel/app/config/<environment>/migrations.php` を削除するなどの対応が必要となる

## 特定のファイルのみ Rollback したい場合
FuelPHP ではそういった昨日は提供されていないため対象のファイルを一時的に退避させる必要がある

e.g. バージョンが 1, 2, 3, 4 ,5 と Migration File があり、3 を Rollback したい場合
※ ただし 4, 5 が 3 の Rollback に依存していない場合い限る
```
$ mkdir /tmp/migrations
$ mv fuel/app/migrations/{4_*,5_*} /tmp/migrations
$ php oil refine migrate:down
$ mv /tmp/migrations/* fuel/app/migrations/
$ rmdir /tmp/migrations
```

その後 3 を Migration したい場合は `current` コマンドを実行する必要がある
※ この方法を用いた場合、現在のバージョンは 5 の扱いとなっている
```
$ php oil refine migrate:current
```