Kohana MinionによるCLIプログラムの作成

Kohana framework 3.3からCLI実行用のMinionモジュールが標準搭載された。オプションの指定などコマンドラインスクリプトを作成するにあたって便利な機能が利用できる。 本記事ではその簡単な使い方を紹介したいと思う。

セットアップ

bootstrap.phpにてMinionモジュールのコメントアウトを外す。

/**
 * Enable modules. Modules are referenced by a relative or absolute path.
 */
Kohana::modules(array(
    'minion'     => MODPATH.'minion',     // CLI Tasks
    ));

タスクの実行方法

コマンドラインから実行すると、ControlerではなくMinionタスクが呼ばれる。
そのためindex.phpの引数にタスク名を指定するだけでよい。

php index.php Mytask

また、タスク実行用のコマンドが用意されているので、PATHさえ通せば以下のように実行できる。

minion Mytask

オプションは--param1=value1のように指定する。

minion Mytask --file=list.txt

タスクの作成

タスククラスの作成

application/classes/Task配下にMinion_Taskクラスを継承したクラスを作成する。

メイン処理の記述

実際のタスクは_executeメソッドをオーバーライドして記述する。 オプションパラメータは$_optionsプロパティにキーとデフォルト値を設定することができる。

    protected $_options = array(
        'file' => null,
        'output' => 'output.txt'
    );

    /**
     * オレオレタスク
     *
     * @param array $params
     */
    protected function _execute(array $params)
    {
        $handle = fopen($params['file'], 'r');

        while (! feof ($handle)) {
            $line = trim(fgets($handle, 1024));
            if (empty($line)) {
                continue;
            }
            echo "<$line>\n";
        }

        fclose($handle);
    }

オプションのバリデーション

オプションパラメータはKohanaのValidationを使ってバリデートすることができる。
build_validationメソッドに記述。

    public function build_validation(Validation $validation)
    {
        return parent::build_validation($validation)
            ->rule('file', 'not_empty');
    }

まとめ

PHPでバッチを書くことは少ないかもしれないが、Kohanaの機能が使えるので、ちょっとした処理をさせたいときには便利。 DBアクセスやAPIコールなど微妙に煩雑になるケースは多いので、自分で実装するよりはよいとは思う。
なお、勝手に業務システムに使っているのは内緒である。