【COBOL学習|初心者向け】プログラムの「生年月日」を知る!WHEN-COMPILED関数の活用術

1. 導入:なぜコンパイル日時が必要なのか?

現場で長く仕事をしていると、「今動いているプログラムは、本当に最新の修正版なのか?」と不安になることはありませんか。テスト環境と本番環境で、うっかり古いバージョンのロードモジュールを配置してしまうミスは、ベテランでも冷や汗をかくものです。そんなとき、プログラムが「いつコンパイルされたのか」を自己申告できる仕組みがあれば、バージョン管理の強力な証跡になります。それを簡単に実現するのが WHEN-COMPILED 関数 です。

2. 基礎知識:組込関数とWHEN-COMPILEDの役割

COBOLには、あらかじめ用意された便利な計算やデータ取得のための「組込関数」が備わっています。その中でも WHEN-COMPILED は、実行時の日付ではなく、ソースコードがコンパイルされた時点の日時を返してくれる特殊な関数です。
戻り値は「YYYYMMDDhhmmsscc+zzzz」という21文字の固定形式で、年・月・日・時・分・秒・1/100秒、そして時差情報まで含まれています。

3. 実装と解決策:ログ出力への組み込み

実装は非常にシンプルです。報告用の帳票や、システムエラーログのヘッダー部分にこの関数を組み込むだけで、実行時にそのプログラムの「鮮度」を自動的に記録できます。特に、バッチ処理のログにこれを仕込んでおけば、障害調査の際に「どの時点のバイナリで発生した事象か」を即座に特定できるため、保守効率が劇的に向上します。

4. サンプルプログラム

以下のコードは、プログラムの起動時にコンパイル日時を表示する簡単な例です。そのままコピーしてコンパイルしてみてください。

IDENTIFICATION DIVISION.
PROGRAM-ID. COMPILE-CHECK.
DATA DIVISION.
WORKING-STORAGE SECTION.

  • コンパイル日時を受け取るための21桁の変数

01 WS-COMPILE-DATE PIC X(21).

PROCEDURE DIVISION.

  • WHEN-COMPILED関数の結果をWS-COMPILE-DATEに格納

COMPUTE WS-COMPILE-DATE = FUNCTION WHEN-COMPILED.

  • ログとして出力

DISPLAY “— プログラム起動情報 —”
DISPLAY “コンパイル日時: ” WS-COMPILE-DATE

  • 処理終了

GOBACK.

5. 応用・注意点:現場での活用と落とし穴

この関数を使う際の注意点が2つあります。
まず、実行環境の日付ではないという点です。あくまで「コンパイル時」ですので、プログラムの実行日時を知りたい場合は CURRENT-DATE 関数を使い分ける必要があります。
次に、コンパイルオプションの影響です。一部のコンパイラでは、最適化レベルや環境設定によって、この値が正しく更新されない、あるいは空になるケースが稀にあります。必ず開発環境で一度出力を確認し、意図した形式で取得できているかチェックしてください。
また、出力される21文字は固定長ですので、表示用に見やすく加工(編集)してログに出すと、より読みやすい帳票になりますよ。

コメント

タイトルとURLをコピーしました