コンソールを利用してCakePHPをCLIから実行する

cronなどで定期的な処理を行なうなど、CLIからでもCakePHPを利用したい処理が少なからず出てくるものです。こういう場合、CakePHPにはシェルスクリプトを作成するためのフレームワークが用意されているので、それを利用することでCakePHPをCLIから実行することができます。

CakePHPコンソールを利用するにはまず、app/vendors/shells以下に処理の本体となるファイルを置きます。ここではひとまずtest.phpとしておきます。

<?php
class TestShell extends Shell {
    function main () {
        $this->out('test.'); // 標準出力には $this->out() を利用。
    }
}

注意点は、class名の後ろに”Shell”を付けることとShellクラスを継承すること。またCLI版PHPが利用可能な環境でなければいけません。

自作したシェルでモデルクラスを利用するには、$uses で利用したいモデルクラスを定義します。すると随時 $this->モデル名 で利用できるようになります。具体的にはこんな感じです。

<?php
class TestShell extends Shell {
    var $uses = array('Model');
    function main () {
        $this->out( sprintf(
            'Model Table is %d record(s).',
            $this->Model->find('count')
        ));
    }
}

test.phpを保存したらcakeにパスが通っているところからコマンドラインで、

cake test

を実行するとModelクラスが管理するテーブルの件数が標準出力に表示できます。

CLIからの利用だからといってモデルの利用に特に何かしらの制約はないようなので、CakePHPで作成したWebアプリの管理は概ねこの機能で自作できるのではないか、と。

また、

$this->err('message...'); // 標準エラー出力に表示
$this->error('ErrorTitle', 'ErrorMessage...'); // 異常終了させる

といったメソッドも用意されています。

参考ページ