“バッチ処理”という言葉を聞いて皆さんは何が思い浮かびますか?
日頃情報システムに従業していない限り、あまり聞き慣れない言葉なので「何のことかサッパリ」という方が多いと思います。
今回解説するのは、そんなバッチ処理についてです。
「情報システム関連なら自分には関係ない」と思わず、バッチ処理について少し理解を深めてみてください。
実はごく身近な所でバッチ処理が活用されていたり、今後業務において見聞きするようになる可能性も多いにあります。
特に経営層の方は理解を深めることで情報システムの課題などが浮かび上がり、今取り組むべきことが見えてくるかもしれません。
それでは、バッチ処理についてできる限り分かりやすく解説していきます。
バッチ処理とは
そもそも“バッチ”という言葉は英語の「Batch」が語源であり、日本語では「一束、一群、一団」といった意味があります。
つまりバッチ処理とは“一定量の(あるいは一定期間の)データを集め、一括処理するための処理方法”です。
バッチ処理の歴史は汎用コンピューター(※1)時代まで遡ります。
今でこそ業務で使用するコンピューターは複雑なネットワークによって繋がっていますが、汎用コンピューター時代ではネットワークで共有するのではなく端末を共有するのが当たり前でした。
当時は端末自体かなり高価かつ貴重なものだったので、「計算機センター」といった特別な施設にのみ配備されていたのです。
汎用コンピューターにて業務データを処理する際は、都度データを運んでいては非効率的であるため、ある程度データ量が集まった段階で処理を依頼していました。
故にバッチ処理は“一括処理”とも呼ばれることがあります。
また、プログラマーがプログラミングに紙テープやパンチカード(※2)を用いていた時代、紙テープまたはカードをシステムオペレーターに渡しタスクのスケジューリングを行いコンピューターに投入されていました。
このときタスクは直ちに処理されたのではなく、まとめて処理されていたこともあり、このようなタスクの集まりを“バッチジョブ”と呼びます。
※1:汎用コンピューターとは、企業の基幹業務における大量かつ機密性の高いデータを処理するための機会。「汎用機」や「メインフレーム」と呼ばれることもある。
※2:パンチカードとは、厚手の紙に空けた穴の位置や有無によって情報を記録する媒体。身近な所では選挙の投票用紙で使用されている。
“バッチ”は情報システムだけの言葉ではない
バッチ処理は情報システムだけの言葉として捉えられがちですが、実は様々シーンで“バッチ”という言葉が使用されています。
例えば製造業における生産管理では、バッチと言うと一連の作業で生産される予定の(あるいは生産されている)製品数量を表します。
つまり、機械を1時間稼働させた際や原材料1袋分で製造できる製品数量です。
また、物流においては一定時間の単位で出荷作業情報などを分割し、情報をまとめて仕事を行うことを指します。
身近なバッチ処理
製造業や物流に従業していなくとも、バッチ処理はもっと身近な所に存在します。
それは皆さんが普段使用しているPCです。
PCの起動時には環境構築や自動設定、またはアプリケーションの自動実行などにバッチ処理が用いられています。
また、MS-DOSやWindowsにおいて複数のコマンド(命令)を一つのファイルにまとめて記述し、一括して実行できるファイルを“バッチファイル“と呼びます。
このように、意外と身近なところにバッチ処理は隠れているのです。
リアルタイム処理とは
バッチ処理の対義語としてしばしば見聞きするのが“リアルタイム処理(あるいはインタラクティブ処理)”です。
その名の通りリアルタイムでシステムにデータを反映させる処理方法となります。
しかし、現在においてはバッチ処理とリアルタイム処理の境界線は曖昧になりつつあり、複数の処理をこなすコンピューターを配備しているのが一般的です。
一つ例を挙げると、皆さんが普段経費計上をするシステムを想像してください。
交通費や接待費など領収書をもとにシステムへ金額を打ち込んでいきますが、その際に打ち込んだ金額は瞬時にシステムへと反映されます。
これはリアルタイム処理によるもので、コンマ以下のタイムラグはあるもののすぐに結果を返してくれますね。
そして全社員の経費データは月末になると集計処理され銀行などに転送されますが、これをこなしているのがバッチ処理です。
現代では2つの処理の特性を活かし、業務効率化に繋がるシステムが次々とリリースされています。
バッチ処理のメリットデメリット
メリット
場所や時間に囚われずにデータ処理が可能
バッチ処理は一定量集計したデータをまとめて処理するという特性上、オペレーターがその場に居合わせる必要はありません。
タスクスケジューリングを行うことで、好きな日時にデータ処理を行わせることができるのです。
夜間や祝日など業務時間外にデータ処理を設定することも可能なので、時間をフル活用することができます。
大規模データを効率的に処理
リアルタイム処理ではインタラクティブなデータ処理は可能でも、大規模なデータを処理するのには向いていません。
基本的にオペレーターが逐一データを打ち込む必要があるため、作業的にかなり非効率となります。
一方、バッチ処理ではリアルタイム処理の欠点を補っています。
データを一括処理することができるので、大規模データでも効率的に処理することが可能なのです。
ヒューマンエラーを排除
大規模なデータはプログラムされたように処理されるため、入力ミスといったヒューマンエラーを排除することができます。
データ処理において小さな入力ミスが後々大きな業務負担を生むことになるので、大規模かつ複雑なデータ群を処理する際は大いにメリットを発揮します。
コンピューターリソースを最大限に活用
サーバなどのコンピューターというものは、本来の性能に対し実際引き出せている力は十数%程度となります。
つまりほとんどの場合コンピューターリソースを無駄にしてしまっているのです。
バッチ処理ではこういったコンピューターリソースを最大限に活用することができるため、高い投資対効果を得ることができます。
デメリット
リアルタイムに集計状況を確認できない
一括処理という特性上、バッチ処理ではリアルタイムでデータの集計状況などを確認することができません。
随時確認の必要性があるデータに関してはリアルタイム処理を実行するのが一般的です。
データ量増加により処理が遅延することがある
昨今ビッグデータ活用の重要性などが提唱されていることから、各企業では膨大なデータ群の処理が盛んに行われています。
ビッグデータの特徴の一つにデータが日々蓄積していくことが挙げられますが、バッチ処理ではこのデータに都度対応することで処理が遅延するといったトラブルがよく起こります。
バッチ処理に遅延が発生すると業務に支障をきたす恐れがあるので、適切なプログラム設計が重要です。
スクリプトやプログラムが複雑化しやすい
バッチ処理は多くのデータ処理を一括で行うため、スクリプトやプログラムが複雑になる傾向があります。
膨大なプロセス数や中間ファイルにより複雑化したプログラムは、多くの情報システムを悩ませる原因です。
プログラムがブラックボックス化しやすいため技術共有が難しい
バッチ処理はほとんどのケースで担当情報システムが独自に組んだプログラムで処理を行っています。
このためプログラムがブラックボックス化しやすく、担当者が切り替わった際に新たなプログラムを組んだりと無駄な業務が発生することがあります。
データ処理は即時性がなければバッチ処理が有効的
バッチ処理を行うべきデータは?と考えた時、答えは単純で「即時性のないデータ」となります。
例えば前述して月末の経費清算など、一定期間のデータを特定の日に集計・処理するようなデータですね。
即時性のあるデータに関してはリアルタイム処理で対応する必要があります。
まとめ
ここまでの解説を踏まえて、今回の要点を以下にまとめておきます。
- バッチ処理とは、一定量(あるいは一定期間)の集計データを一括処理するための方法
- バッチ処理の対義語としてリアルタイム処理(インタラクティブ処理)が存在している
- 昨今のシステムではバッチ処理とリアルタイム処理の特性を融合したものがほとんど
- 場所や時間に囚われず、タスクをスケジューリングすることで効率的に処理ができる
- 大規模で複雑なデータも効率的に処理ができる
- データ入力ミスなどのヒューマンエラーを排除し、業務効率化につながる
- コンピューターリソースを最大限に引き出すことができ、高い投資対効果を期待できる
- 一括処理という特性上リアルタイムにデータ集計状況を確認できない
- ビッグデータ活用により処理に遅延が出る可能性がある
- 膨大なプロセスや中間ファイル数によりスクリプトやプログラムが複雑化しやすい
- プログラムがブラックボックス化しやすいため無駄な業務を発生させがち
- 即時性のないデータはバッチ処理が有効的
いかがでしょうか?「バッチ処理なんてサッパリ」という方も、ある程度理解して頂けたのではないかと思います。
現代では「バッチ処理は終わった。今はリアルタイム処理の時代」といった声も少なくありません。
こういった声は、バッチ処理についてあまり理解していない方が多いのではないかと思います。
実際はバッチ処理が終わったのではなく、バッチ処理とリアルタイム処理の特徴を活かしたシステムが求められているのが現状です。
「リアルタイム処理>バッチ処理」という式で考えていると、後々データ処理が回らなくなる可能性があるので十分に注意しましょう。