カテゴリ: COBOL 更新日: 2026/05/24

COBOLのCLIツール運用入門!初心者でもわかるロギングと監視の方法を徹底解説

CLIツールのロギング・監視方法
CLIツールのロギング・監視方法

先生と生徒の会話形式で理解しよう

生徒

「パソコンの操作もほとんどしたことがないのですが、COBOLで作られたCLIツールや運用スクリプトの実行状態を確認したり、エラーを見つけたりするロギングや監視というのはどのように行うのでしょうか?」

先生

「CLIツールというのは、画面の文字だけで操作する道具のことです。ロギングは日記のように日々の動きを記録することで、監視はその記録を見て異常がないか見守ることですよ。初心者でも簡単に取り組めます。」

生徒

「文字だけの世界ですね。具体的にはどのようにプログラムを書いて記録を残し、それを確認すればよいのですか?」

先生

「それでは、基本的な記録の書き方から自動で監視する仕組みまで、順番に見ていきましょう!」

1. CLIツールとロギングの基本知識

1. CLIツールとロギングの基本知識
1. CLIツールとロギングの基本知識

プログラミングの世界には、普段みなさんがスマートフォンやパソコンで使っているような、ボタンや画像が表示される画面だけでなく、真っ黒な画面に文字だけを表示して動かす仕組みがあります。この文字だけで操作する仕組みやプログラムのことをCLIツール(コマンドラインインターフェースの略称)と呼びます。キーボードの文字入力だけでパソコンに命令を出すため、最初は難しく見えるかもしれませんが、慣れると非常に強力な道具になります。

このCLIツールを自動で順番に動かすための台本のようなものを運用スクリプトと言います。そして、このプログラムやスクリプトが動いたときに、「何時何分にどのような処理をしたか」「エラーが発生しなかったか」をテキストファイルという文字だけのファイルに書き残しておく行動をロギングと呼び、記録された中身のことをログと言います。ログは、プログラムが正しく動いているかを証明する日記のようなものです。

2. なぜ記録と監視が必要なのか

2. なぜ記録と監視が必要なのか
2. なぜ記録と監視が必要なのか

パソコンのプログラムは、人間がずっと画面の前で見守っていなくても、夜中や休日に自動で動かすことができます。しかし、もし夜中にプログラムが途中で止まってしまったら、何が原因で失敗したのかが分かりません。画面にエラーメッセージが表示されても、朝起きてパソコンを見たときにはその画面が消えていることもあります。そこで必要になるのが、ファイルに記録を残すロギングです。

さらに、記録を残すだけでなく、その記録の中に危険なエラーの文字がないかを自動で定期的に確認する仕組みを監視と言います。監視をしておけば、プログラムに問題が起きたときに、すぐに管理者にメールで知らせるなど、大きなトラブルに発展する前に手を打つことができます。パソコンを触ったことがない方でも、お店の防犯カメラとその映像をチェックする警備員さんの関係をイメージすると分かりやすいでしょう。防犯カメラがロギングで、警備員さんの見回りが監視です。

3. COBOLで一番簡単なログ出力の書き方

3. COBOLで一番簡単なログ出力の書き方
3. COBOLで一番簡単なログ出力の書き方

歴史のあるプログラミング言語であるCOBOLでは、画面に文字を表示したり、記録を出力したりするときにDISPLAYという命令を使います。まずは一番シンプルに、プログラムが始まったことと、終わったことを画面や記録に出力するプログラムの書き方を見てみましょう。プログラムの中に直接文字を書いて、それを書き出します。

以下のコードは、処理の開始と終了を明確にするための基本的な記述方法です。COBOLでは英大文字を使って命令を書くことが多く、文の終わりにはEND-DISPLAYなどをつけて区切りを明確にします。これがすべてのロギングの基礎となります。


IDENTIFICATION DIVISION.
PROGRAM-ID. LOGSAMPLE1.
PROCEDURE DIVISION.
    DISPLAY "--- 処理を開始します ---"
    
    DISPLAY "現在、データを処理しています。"
    
    DISPLAY "--- 処理が正常に終了しました ---"
    STOP RUN.

このプログラムを実行すると、画面に以下のような文字が出力されます。これがログの元となる情報です。


--- 処理を開始します ---
現在、データを処理しています。
--- 処理が正常に終了しました ---

4. ログファイルへの保存とリダイレクト

4. ログファイルへの保存とリダイレクト
4. ログファイルへの保存とリダイレクト

先ほどのプログラムを実行すると画面に文字が表示されますが、これでは画面を閉じると消えてしまいます。そこで、画面に表示されるはずの文字を、そのままテキストファイルに流し込んで保存する技を使います。この仕組みを専門用語でリダイレクトと呼びます。リダイレクトを行うには、プログラムを実行するときに記号を使います。

パソコンの命令を受け付ける画面で、プログラム名の後ろに大なり記号をつけることで、出力の向きをファイルに変えることができます。これにより、プログラム本体を改造しなくても、簡単に実行結果をファイルとして残すことができるようになります。毎日実行する運用スクリプトでは、この方法を使って日付ごとのファイルを作成していくのが一般的です。


cobc -x LOGSAMPLE1.cob
./LOGSAMPLE1 > batch_log.txt

この命令を実行すると、画面には何も表示されなくなります。その代わりに、同じ場所に新しくファイルが作られ、その中に処理結果が書き込まれます。中身を確認すると、画面に表示されていた内容がしっかりと保存されていることが分かります。


--- 処理を開始します ---
現在、データを処理しています。
--- 処理が正常に終了しました ---

5. エラーを区別して記録する重要性

5. エラーを区別して記録する重要性
5. エラーを区別して記録する重要性

プログラムの出力には、実は2つの通り道があります。1つは「正しい処理結果や通常のお知らせ」を流す通り道で、これを標準出力と言います。もう1つは「重大な問題や不具合のお知らせ」を流す通り道で、これを標準エラー出力と言います。これらをしっかりと区別してプログラムを書くことが、高度な監視を行うための第一歩となります。

COBOLでは、DISPLAYのあとにUPON SYSERRという言葉を付け足すことで、通常のお知らせではなく、エラー専用の通り道に文字を流すことができます。これにより、普段のログファイルと、緊急事態だけのログファイルを別々に分けて保存することが可能になります。トラブルが起きたとき、エラーファイルだけを読めば原因がすぐに分かるため、運用の現場では必須の技術です。


IDENTIFICATION DIVISION.
PROGRAM-ID. LOGSAMPLE2.
PROCEDURE DIVISION.
    DISPLAY "通常の処理を実行中です。"
    
    DISPLAY "【警告】入力データに空行を見つけました。" UPON SYSERR
    
    DISPLAY "【重大エラー】ファイルの読み込みに失敗しました。" UPON SYSERR
    STOP RUN.

このプログラムを実行するときに、エラーの通り道だけを別のファイルに保存する命令を出すと、通常ログとエラーログを綺麗に分けることができます。


通常の処理を実行中です。

そして、エラー専用のファイルには、以下のように警告や重大エラーの文字だけが書き込まれます。


【警告】入力データに空行を見つけました。
【重大エラー】ファイルの読み込みに失敗しました。

6. ログに日時を追加して詳細にする方法

6. ログに日時を追加して詳細にする方法
6. ログに日時を追加して詳細にする方法

ただ文字を記録するだけでは、「いつそのエラーが起きたのか」が分かりません。夜中の3時に起きたのか、夕方の5時に起きたのかが分からないと、原因究明が難しくなります。そこで、ログの先頭に必ず現在の日付と時間をくっつけて出力するようにします。このように日時の情報を付け加えることを、タイムスタンプを刻むと言います。

COBOLには、パソコンが覚えている現在の「年月日」や「時分秒」を自動的に取得して、変数と呼ばれるデータを入れる箱にコピーする機能があります。ACCEPTという命令を使うことで、現在の時間を簡単に手に入れることができます。これを利用して、すべてのお知らせの前に日時を表示するようにプログラムを工夫してみましょう。


IDENTIFICATION DIVISION.
PROGRAM-ID. LOGSAMPLE3.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 CURRENT-DATE-TIME.
    05 W-YEAR    PIC X(4).
    05 W-MONTH   PIC X(2).
    05 W-DAY     PIC X(2).
    05 W-HOUR    PIC X(2).
    05 W-MINUTE  PIC X(2).
    05 W-SECOND  PIC X(2).
PROCEDURE DIVISION.
    MOVE FUNCTION CURRENT-DATE TO CURRENT-DATE-TIME
    DISPLAY W-YEAR "/" W-MONTH "/" W-DAY " " W-HOUR ":" W-MINUTE ":" W-SECOND " [INFO] システムを起動しました。"
    
    DISPLAY W-YEAR "/" W-MONTH "/" W-DAY " " W-HOUR ":" W-MINUTE ":" W-SECOND " [INFO] データの集計が完了しました。"
    STOP RUN.

このプログラムを実行すると、数字が自動的にはめ込まれて、誰が見てもいつ何が起きたかが一目でわかる親切なログができあがります。


2026/05/20 23:58:51 [INFO] システムを起動しました。
2026/05/20 23:58:51 [INFO] データの集計が完了しました。

7. 運用スクリプトでの自動監視の仕組み

7. 運用スクリプトでの自動監視の仕組み
7. 運用スクリプトでの自動監視の仕組み

ログファイルが作成できるようになったら、次は人間の代わりにパソコンにその中身を監視させます。一番よく使われる方法は、ログファイルの中に「ERROR」や「重大エラー」という不穏な単語が書き込まれていないかを、決まった時間ごとに検索するスクリプトを用意することです。文字を探す専用の短い命令を使って、ファイルの中身を走査します。

もしエラーの文字が見つかった場合は、画面に警告を出したり、あらかじめ設定しておいた連絡先に通知を送るようにスクリプトを組んでおきます。これにより、人間が毎日重たいログファイルを何行も目視で確認する必要がなくなります。見落としもなくなり、安全にシステムを動かし続けることができます。


# ログファイルからエラーという文字を検索する命令の例
grep "重大エラー" batch_log.txt

もし検索した結果、何も見つからなければプログラムは静かに終了します。しかし、文字が見つかった場合は、以下のように一致した行が抜き出されて表示されます。監視ツールはこの動きを検知してアラートを出します。


2026/05/20 23:58:51 [ERROR] 【重大エラー】ファイルの読み込みに失敗しました。

8. 処理結果の状態を数値で伝える返却値

8. 処理結果の状態を数値で伝える返却値
8. 処理結果の状態を数値で伝える返却値

CLIツールが終了するとき、ログファイルに文字を書くだけでなく、自分自身の状態を「数値の合図」としてパソコンに手渡して終了することができます。この数値のことをステータスコード終了コード、または返却値と呼びます。一般的には、最初から最後まで問題なく大成功したときは「0」を返し、何か不具合があったときは「1」や「9」などの0以外の数値を返します。

COBOLでは、RETURN-CODEという特別な箱に数値を代入してからプログラムを終了することで、この合図を送ることができます。運用スクリプトはこの数値を読み取って、「0だから次の処理に進めよう」「0以外だから途中でストップして緊急連絡をしよう」というように、次に取るべき行動を全自動で判断します。文字のログとこの数値の組み合わせが、確実な運用の基本です。


IDENTIFICATION DIVISION.
PROGRAM-ID. LOGSAMPLE4.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 W-ERR-COUNT  PIC 9(1) VALUE 5.
PROCEDURE DIVISION.
    IF W-ERR-COUNT > 0 THEN
        DISPLAY "[ERROR] 異常データが検出されたため処理を中断します。"
        MOVE 9 TO RETURN-CODE
    ELSE
        DISPLAY "[INFO] すべての処理が正常に完了しました。"
        MOVE 0 TO RETURN-CODE
    END-IF
    STOP RUN.

このプログラムは、エラーの数が0より大きい場合に異常とみなして、返却値の箱に「9」を入れて終了します。運用スクリプト側でこの数値を確認する実行結果の例は以下のようになります。


[ERROR] 異常データが検出されたため処理を中断します。
プログラムの終了コード: 9
カテゴリの一覧へ
新着記事
New1
COBOL
COBOLのEVALUATE文の使い方を完全ガイド!初心者でもわかる多岐選択
New2
C#
C#の拡張メソッドとは?既存クラスに機能を追加する便利技
New3
C#
ASP.NET CoreとC#の例外処理ベストプラクティス!エラーハンドリングの基本と実装方法
New4
Azure
Azure WAFとは?SQLインジェクションやXSSからWebサイトを守る初心者ガイド
人気記事
No.1
Java&Spring記事人気No1
C#
C#のstaticクラスとstaticメソッドの基本と使い方をやさしく解説!
No.2
Java&Spring記事人気No2
C#
C#のWPFとは?XAMLでGUI開発を基礎から完全解説!初心者向けの入門ガイド
No.3
Java&Spring記事人気No3
C#
C# WinForms入門!初心者でも簡単にWindowsアプリを作る方法
No.4
Java&Spring記事人気No4
C#
C#でswitch式を使う方法!C# 8.0以降の新機能を解説
No.5
Java&Spring記事人気No5
COBOL
COBOLのファイルステータス(FILE STATUS)の使い方を完全ガイド!初心者でもわかるエラー処理の基本
No.6
Java&Spring記事人気No6
C#
C#のイベント処理を完全攻略!WinFormsとWPFの基本を解説
No.7
Java&Spring記事人気No7
C#
C#のbool型を完全解説!初心者でもわかるtrueとfalseの基本と使い方
No.8
Java&Spring記事人気No8
C#
C#でファイルパス操作の便利なテクニック!Pathクラスの使い方をわかりやすく解説