※この記事は CodeIgniter Advent Calendar 2015 の9日目です。
Web アプリケーション用のフレームワークという印象の CodeIgniter ですが、CLI(コマンドラインインターフェース)でバッチ処理を実行したいといった場合にもちゃんと対応しています。
以下、簡単なバッチ処理のサンプルを作って試してみましょう。
ちなみに確認環境は最新バージョン 3.0.3 です。
サンプルプログラム
まず、このようなシンプルなコントローラを作ってみます。
application/controllers/Batch.php
このコントローラをコマンドラインから実行してみましょう。
まず CodeIgniter がインストールされたディレクトリ(index.php がある場所)に移動します。
$ cd /path/to/CodeIgniter
そして、次のように php コマンドを実行します。(php index.php [コントローラ名] [メソッド名])
$ php index.php batch sample
done!
はい、ちゃんと実行できましたね。
通常のコントローラと仕組みは同じなので、もちろん引数を渡すようにもできます。
引数を渡す場合はコマンドの最後に指定して実行します。(php index.php [コントローラ名] [メソッド名] [引数1] [引数n])
$ php index.php batch sample Hideki Matsui
Hello Hideki Matsui!
done!
ちなみにこのコントローラをブラウザから呼び出すと、当たり前ですが処理が行われてこのように結果も表示されます。
でもバッチ処理で何かする場合って、一般的にブラウザからの実行は制限をかけたいケースの方が多いと思います。というわけで、コマンドラインからしか実行できないよう条件を加えてみます。
上のコード内にある is_cli() 関数を使うと、コマンドラインからの実行かどうか判定することができます。
このコントローラをブラウザから実行してみると・・・、ちゃんと制限がかかっていることが確認できました。
以上、簡単ですがバッチ処理のサンプルでした。
終わりに
業務システムを作るような場合、月末締め処理、バックアップ、外部システムとのデータ同期など、バッチ処理が求められることが必ずと言っていいほどありますが、CodeIgniter はそういった要件にもちゃんと対応できて安心ですね。
最後に私事ですが、今年は CodeIgniter を趣味のツール(「将棋メーカー」「将棋ウォーズ対局履歴取得ツール」)をいくつか作る程度しか使わずじまいでした。2016年はもっとガリガリ使う機会が増えるといいなあと思います。
「CodeIgniter Advent Calendar 2015」明日は tomcat0090 さんです。みなさんお楽しみに!