バッチ処理リスペクト

バッチ処理はJavaでバッチリ?その現状とこれから - @IT


数年前、はじめて会計まわりのシステムメンテナンスをしたとき目からウロコだったのがバッチの考え方。それまではGUIだったり、オープン系サーバの開発がメインだったから、バッチ処理が現役で使われまくっているなんて知らなかった。金融システムとかやっていたら当たり前のように知っていることなんだけど、仕事で関わらない人は最近の本やWebを見ていても知る機会はないのかも。


でもバッチの考え方自体は時代とか流行とか言語とか関係なく、一種のデザインパターンだと今は思う。バッチがはまるのは以下のようなケース。

  • 個人情報や金額のようなミスの許されないデータ
  • 数百万件以上の大きなDB処理で実行に数十分〜数時間かかる
  • そのため実行時にオペレーターが張り付いていることはなく無人で実行される
  • 処理終了が何時までというように締め切りがある


たとえば、アプリケーションに10個の機能があってそれを順番に実行する場合。普通は10個の関数なりメソッドなりを作ると思う。

バッチではこのとき10個の実行モジュールを作る。実行順はスケジューラソフトかJCL代わりのUNIXシェルで制御される。
そしてデータエラーなどで処理が止まった場合に、どのデータがどこまで処理されたのか、どこから処理されていないのか、を後から確実に分かるように詳細なログを残しておく。
エラーの場合あとから不正データを修復して手動で再実行するわけだけど、このとき最初から再実行すると時間がかかりすぎるので、実行されていない処理だけを適用できるように、こんな作りになっている。


よくコボラーのおじさん達が今時のプログラマーに馬鹿にされてたりするけど、こういったデータの確実さを保証する技術の蓄積では、まだ彼らにかなわないなあと思うことがときどきある。