実務でバッチ処理を作る際に気をつけるべきと思ったこと。
- 基本的にエラーをいかに捉えていかにログに吐くかを最初に考える。まずはエラーありき。失敗するもの、想定した値がこない、あるいは値がないを前提としてシステムを組むべき。
- テスト用のオプションは非常に自分を助けるので、必ず作った方が良い。コストを上回ること多し。ソースに書いてコメントアウトだと、いちいちなおすぐのが面倒以上に、忘れてそのまま・・・というリスクがあり。
- 絶対必要なオプションはCSVなら行指定、DBコンバート系ならid指定など。一々DBを見に行かずに設定できるコストは非常に大切。
- 頻出エラーはDB非接続、DB更新処理失敗、ファイル非存在、配列のインデックス非存在、値未定義。など
- 異常があった場合はメールで知らせるほか、ストレージ的な場所にログを格納するのがありかも。
- トランザクション単位は基本的には1レコード単位で。
- ログレベルの設定とかは外部ファイルや引数などで動的に変えられた方が便利かも。処理件数に比例して多くなるログの量(例えばSQLなど)などは検索効率性なども考えること。
- 基本的にログを見たら処理の成否や状態が全てわかるようにしておくこと。後から記録がない場合、処理を追うことができない。
- ただ冗長なだけでも後で苦しむことになるので、どう検索したら発見しやすいかログを吐くときに考える。
- ログはタイプに分けて複数吐くなどして分けたほうがいいかも。大量に吐かれるとおうのだけでも大変。
- 毎時で値を更新するようなバッチの場合、値のクリア(あった値を空にする事)を忘れがちなので、初期値を忘れないようにする事。