1. 導入: なぜ『STOP RUN』の理解が重要なのか
COBOL開発において、プログラムを終了させる命令には『EXIT PROGRAM』や『GOBACK』、そして今回の『STOP RUN』が存在します。これらを混同して使用すると、意図しないタイミングでシステム全体が終了したり、ファイルが正しくクローズされなかったりと、重大な障害を引き起こす原因となります。特に大規模な基幹システムでは、実行単位(Run Unit)の概念を正しく理解し、適切な終了処理を行うことがバグのないシステム構築の第一歩です。
2. 基礎知識: 実行単位(Run Unit)とは何か
『実行単位』とは、オペレーティングシステムから開始され、一つの単位として動作するプログラムの集合体を指します。メインプログラムがサブプログラムを呼び出し、さらにその先を呼び出すという構造があったとしても、それら全体が「一つの実行単位」として扱われます。
『STOP RUN』を実行すると、その実行単位内で呼び出されていた全てのプログラムの状態に関わらず、即座に処理全体が終了し、OSへ制御が戻ります。
3. 実装/解決策: 適切な終了処理の設計
『STOP RUN』は、基本的に「ジョブの開始点」であるメインプログラムの終了処理でのみ使用するのが鉄則です。
・サブプログラム内で『STOP RUN』を使用すると、後続のメインプログラムの処理まで強制的に停止させてしまうため、呼び出し元に戻る必要がある場合は『EXIT PROGRAM』または『GOBACK』を使用してください。
・『STOP RUN』を実行すると、システムは自動的に開いている全てのファイルをクローズし、メモリを解放します。ただし、プログラムの整合性を保つため、可能な限り『CLOSE』文で明示的にファイルを閉じてから呼び出すのがベテランの作法です。
4. サンプルプログラム
以下は、メインプログラムで『STOP RUN』を使用する標準的な例です。
IDENTIFICATION DIVISION.
PROGRAM-ID. MAIN-PROG.
ENVIRONMENT DIVISION.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
SELECT MASTER-FILE ASSIGN TO ‘MASTER.DAT’.
DATA DIVISION.
FILE SECTION.
FD MASTER-FILE.
01 MASTER-REC PIC X(80).
PROCEDURE DIVISION.
> ファイルを開く
OPEN INPUT MASTER-FILE.
> 処理ロジック(実際にはここにメイン処理が入る)
DISPLAY “プログラム実行中…”.
> 終了処理
CLOSE MASTER-FILE.
> 実行単位全体を終了しOSへ制御を戻す
DISPLAY “正常終了します。”.
STOP RUN.
5. 応用・注意点: 現場で役立つ回避策
現場でよくある失敗として、デバッグ時に「特定の条件で強制終了させたい」という理由で、サブプログラムの中に『STOP RUN』を埋め込んでしまうケースがあります。これにより、呼び出し側のメインプログラムがクリーンアップ処理(ログ出力やロールバック処理など)をスキップしてしまう事態が発生します。
トラブルを避けるためのポイント:
・メインプログラム以外では『STOP RUN』を使用しない。
・プログラム終了時は、意図しないリソース残存を防ぐため、必ず『CLOSE』文と『STOP RUN』をセットで記述する。
・動的呼び出しを行っている場合、『STOP RUN』が発行されると呼び出された側で確保したメモリ空間もすべてOSへ返却されるため、メモリリークの心配は基本的にありませんが、排他制御中のデータがある場合は注意が必要です。
『STOP RUN』は強力な命令ですが、その分、実行単位全体に影響を及ぼすというリスクを常に意識してコーディングしてください。

コメント