COBOLでバッチ処理用CLIツールを作成!初心者向け入門ガイド
生徒
「大量のデータを一度に処理する『バッチ処理』を、COBOLで自動化する方法はありますか?」
先生
「ありますよ!コマンドラインから動かせるCLIツールを作れば、手作業を減らして一気に処理を終わらせることができます。」
生徒
「バッチ処理用のツールって、何だか難しそうですが、パソコン初心者でも作れますか?」
先生
「基本を一つずつ積み上げれば大丈夫です。簡単なファイル処理の例を使って、ツールの作り方を学んでいきましょう!」
1. バッチ処理とCLIツールとは?効率化の基本を理解しよう
まず、バッチ処理とは、コンピューターに「まとめて仕事をさせる」方法のことです。例えば、一日の売上データを夜中に一括で集計したり、大量の名簿を順番に整理したりする作業がこれにあたります。パソコンを触ったことがない方には、「溜まった洗濯物をまとめて洗濯機で洗う」イメージだと思ってください。一枚ずつ手洗いするのではなく、一気に自動で終わらせるのがバッチ処理の魅力です。
そして、その洗濯機のスイッチにあたるのがCLI(コマンドラインインターフェース)ツールです。これは、マウスでアイコンをクリックする代わりに、文字(コマンド)を打ち込んでプログラムを動かす道具のことです。黒い画面に命令を書くだけで、大量のデータを瞬時に処理できる魔法のようなツールを、今回はCOBOLで作ってみます。
2. CLIツールの第一歩!画面に文字を出すだけのシンプルプログラム
まずは、ツールが正しく動くか確認するために、最も基本的なプログラムを書いてみましょう。プログラムが「今から仕事を始めます!」と教えてくれるメッセージを画面に出すだけのものです。
IDENTIFICATION DIVISION.
PROGRAM-ID. HELLO-BATCH.
PROCEDURE DIVISION.
DISPLAY "バッチ処理を開始します...".
DISPLAY "本日も一日お疲れ様でした。".
STOP RUN.
このプログラムを実行すると、黒い画面(コマンドプロンプトなど)に以下の結果が表示されます。これがCLIツールの最も基本的な「出力」の形です。
バッチ処理を開始します...
本日も一日お疲れ様でした。
3. データを読み込む!入力ファイルの準備と読み込み処理
バッチ処理ツールのメインの仕事は、外部にあるファイルを読み込むことです。これを入力と呼びます。例えば、「meibo.txt」というファイルに書かれた名前を一行ずつ読み取ってみましょう。COBOLは昔から事務処理に使われてきたので、ファイルの読み書きが非常に得意です。
ファイルを扱うときは、プログラムの中で「このファイルを使いますよ」と宣言する必要があります。初心者の方は、図書館で本を借りるための「図書カード」を作る手続きのようなものだと考えてください。この手続きが正しくできていないと、プログラムはファイルの中身を見ることができません。
4. 読み込んだデータを加工する!簡単な計算や文字列の操作
ファイルから読み込んだデータをそのままにするのではなく、何か役に立つ形に変えてみましょう。例えば、「商品の単価」を読み込んで、それに「個数」を掛け合わせて合計金額を出すといった処理です。これが加工(データ処理)の工程です。
ここでは、読み込んだデータの後ろに特定の記号を付け加えるだけの簡単な加工プログラムを例に出します。これにより、元のデータがどのように変化したのかが分かりやすくなります。
IDENTIFICATION DIVISION.
PROGRAM-ID. DATA-EDIT.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 USER-NAME PIC X(10) VALUE "TARO".
01 EDIT-NAME PIC X(15).
PROCEDURE DIVISION.
MOVE SPACES TO EDIT-NAME.
STRING USER-NAME DELIMITED BY SPACE
" 様" DELIMITED BY SIZE
INTO EDIT-NAME.
DISPLAY "加工後: " EDIT-NAME.
STOP RUN.
このコードは「TARO」という名前に「 様」を付け足しています。実行結果は以下の通りです。
加工後: TARO 様
5. 処理結果をファイルに保存する!出力処理のポイント
加工したデータは、画面に出すだけでなくファイルとして保存するのがバッチ処理のルールです。これを出力と呼びます。せっかく計算した結果も、保存しておかなければ後で見返すことができません。COBOLでは、「WRITE」という命令を使って、一軒ずつのデータをファイルに書き込んでいきます。
出力の際は、既存のファイルを上書きしてしまうのか、それとも後ろに書き足していくのかを慎重に選ぶ必要があります。間違えて大切なデータを消さないように、「新しい名前で保存する」のが初心者のうちは安心です。これをマスターすれば、立派なバッチツールの骨組みが完成します。
6. 繰り返し処理で大量データを一網打尽にする方法
バッチ処理の真骨頂は繰り返し処理(ループ)にあります。100人分、1000人分のデータがあっても、プログラムに「データの終わりが来るまで同じことを繰り返してね」と命令しておけば、人間が手作業で行う何百分の一の時間で終わります。
COBOLでは「PERFORM UNTIL」という言葉を使って繰り返しを指示します。これは「~という条件になるまで、ずっとやってね」という意味です。例えば「ファイルが空っぽになるまで読み込みなさい」といった命令です。以下のプログラムは、数字を1から5まで順番に表示する繰り返しの例です。
IDENTIFICATION DIVISION.
PROGRAM-ID. LOOP-SAMPLE.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 COUNTER PIC 9(1) VALUE 1.
PROCEDURE DIVISION.
PERFORM UNTIL COUNTER > 5
DISPLAY "現在の回数: " COUNTER
ADD 1 TO COUNTER
END-PERFORM.
STOP RUN.
実行結果は以下のようになります。同じ命令を何度も書かなくて済むので、非常に効率的です。
現在の回数: 1
現在の回数: 2
現在の回数: 3
現在の回数: 4
現在の回数: 5
7. エラーを未然に防ぐ!安全なツールのための条件分岐
バッチ処理は自動で動くため、途中でエラーが起きると困ってしまいます。そこで、あらかじめ「もしデータがおかしかったらどうするか」を決めておく条件分岐が重要になります。これを「エラーハンドリング」とも呼びます。
例えば、「金額にマイナスの数字が入っていたら、計算を飛ばしてエラーメッセージを出す」といった具合です。プログラムにしっかりとした判断基準を持たせることで、途中で止まることなく、最後まで仕事を完遂できる頑丈なツールになります。ここで、条件によって表示を変える例を見てみましょう。
IDENTIFICATION DIVISION.
PROGRAM-ID. JUDGE-DATA.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 TEST-SCORE PIC 9(3) VALUE 85.
PROCEDURE DIVISION.
IF TEST-SCORE >= 80
DISPLAY "合格です!おめでとうございます。"
ELSE
DISPLAY "不合格です。次は頑張りましょう。"
END-IF.
STOP RUN.
8. 実行結果をログとして残す!運用のための記録術
プログラムが動いた後に、「何時に始まって、何時に終わったか」「何件のデータを処理したか」という記録を残しておくことをログ出力と言います。CLIツールは画面に文字が出るだけなので、終わった後にその内容が消えてしまうことがよくあります。そのため、記録用のファイルに書き出す仕組みを作っておくと、後から振り返るのにとても便利です。
「100件処理して、エラーは0件でした」という報告書を自動で作ってくれる機能だと考えてください。これがあれば、朝会社に来てログファイルを確認するだけで、夜中のバッチ処理が成功したことを確認でき、安心して次の仕事に取り掛かることができます。運用の現場では、このログが最も信頼される証拠になります。
9. CLIツール作成で得られる達成感と次のステップ
ここまで学んできた「入力・加工・出力・繰り返し・条件分岐・記録」を組み合わせれば、世界に一つだけのあなた専用バッチ処理ツールの完成です。最初は黒い画面に文字が出るだけでも感動するものですが、それが何千ものデータを瞬時に処理する様子を見ると、プログラミングの凄さを実感できるはずです。
COBOLは古い言語と言われることもありますが、その分、事務処理のルールがしっかりしており、初心者にとっても理解しやすい構造をしています。今回作った小さなツールが、将来の大きなシステム開発へと繋がる第一歩になります。焦らず、まずは自分の身の回りの単純作業を自動化することから楽しんでみてください。コンピューターがあなたの代わりに文句も言わずに働いてくれる快感を、ぜひ味わってください!