Laravel4 バッチ処理を書いてみる

raharu(仮名)(プログラマー)
これがダイバージェンス1%の先の世界か。。。

ネイティブアプリのバックエンドでLeravelの導入をしようとしているので
スケジューラーで動かすことが前提です。

ですのでバッチモードで動かないとお話になりません。

今回はそんな話

コマンドファイルの作成

1
$ php artisan command:make LoadInformation --command=batch:loadinfo

このコマンドでapp/commands以下に
LoadInformation.phpが作成され、コマンド名はbatch:loadinfoとなります。

コマンド名は後から変更出来ます。

コマンドの登録

app/start/artisan.phpにさっき作ったコマンドを登録します。

1
Artisan::add(new LoadInformationi());

コマンドが登録されたか確認します

1
2
3
4
5
6
$ php artisan list

~~ skip

batch
  batch:loadinfo              コマンドラインからの情報ロードバッチ

こんな感じでlistに表示されました。

実行してみる

1
2
3
4
5
6
7
8
9
$ php artisan batch:loadinfo


  [RuntimeException]
  Not enough arguments.



batch:loadinfo [--exampl[="..."]] example

初期作成のバッチは必ず引数とオプション入れろと起こられます。
引数は後にしたくてとりあえず動く所が見たいので
app/commands/LoadInformation.phpの以下をコメントアウト

1
2
3
4
5
6
7
8
~~ skip

 // array('example', InputArgument::REQUIRED, 'An example argument.'),

~~ skip

 // array('exampl', null, InputOption::VALUE_OPTIONAL, 'An example option.', null),

これでエラーが出ずに抜けるはずです

出力を試す

public function fire()以下がexecuteメソッドなのでそこに記述します。

1
2
3
4
5
6
7
 public function fire()
 {
    //出力系
    var_dump('出力テスト');
    $this->info('標準出力');
    $this->error('エラー出力');
 }

再度実行

1
2
3
4
$ php artisan batch:loadinfo
string(15) "出力テスト"
標準出力
エラー出力

なるほどここまでくればあとはごにょごにょ試せば大体書けそうです早速バッチを作成してみる事にします

ここをみながらやってみましょう
Laravelドキュメンド

補足

1
php artisan command:make TestCommand --path=app/batch --namespace=Batch --command=batch:test

例えばこんなコマンド任意な場所に作成したコマンドをapp/start/artisan.php にどうやって登録するのか、、イマイチ分からないので次に試したいと思う