1. 導入:なぜ「EXIT PROGRAM」が必要なのか?
COBOL開発において、一つの巨大なプログラムですべてを完結させるのは非効率です。機能ごとに小さなプログラム(サブプログラム)に分割して作成することで、保守性が向上し、再利用も可能になります。しかし、サブプログラムは処理が終わった後、適切に「親」であるメインプログラムへ制御を戻さなければなりません。その役割を担うのが「EXIT PROGRAM」です。この命令を正しく理解することで、プログラム間の連携がスムーズになり、意図しないバグを防ぐことができます。
2. 基礎知識:サブプログラムの仕組み
COBOLには、他のプログラムを呼び出す「CALL」命令があります。CALLで呼び出されたプログラムは、呼び出し元の処理を一時中断し、代わりに実行されます。このとき、サブプログラムの最後で「ここが終わりですよ」と明示しないと、プログラムはどこまで実行すべきか判断できません。EXIT PROGRAMは、呼び出し元に対して「処理を完了したので、続きの処理をお願いします」という合図を送る重要な命令なのです。
3. 実装と解決策:制御を戻すタイミング
EXIT PROGRAMは、サブプログラムの最後、あるいは処理を早期終了させたい箇所に記述します。
ここで重要なのは、「メインプログラムで実行しても意味がない」という点です。EXIT PROGRAMはあくまで「呼び出された側」が自分を終了させるための命令です。メインプログラム(一番最初に実行される親プログラム)でこの命令を書いても、エラーになったり何も起きなかったりするため、必ず「サブプログラムとして呼び出されるファイル」の中に記述するようにしましょう。
4. サンプルプログラム
以下は、メインプログラムから呼び出されるサブプログラムの例です。
IDENTIFICATION DIVISION.
PROGRAM-ID. SUB001.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 WS-MESSAGE PIC X(20) VALUE '処理完了'.
PROCEDURE DIVISION.
DISPLAY 'サブプログラムを開始します'.
- 何らかの処理をここに記述します
- 処理が終了したことを呼び出し元に伝える
5. 応用・注意点:現場で役立つポイント
実務で非常に重要なのは、「EXIT PROGRAM」と「GOBACK」の違いです。
EXIT PROGRAMは、あくまで「サブプログラムを終了して呼び出し元に戻る」ための命令ですが、コンパイルオプションや環境によっては、呼び出し元の状態を保持するかどうかで挙動が変わることがあります。
現代のCOBOL開発では、メインプログラムかサブプログラムかを問わず、どちらでも安全に終了できる「GOBACK」命令が推奨されることが多いです。しかし、古いシステムや特定のルールがある現場では「EXIT PROGRAM」が厳格に使われています。
現場のコーディング規約を確認し、既存のソースコードがどちらで書かれているかを合わせるのが、バグを生まない鉄則です。まずはEXIT PROGRAMの役割をしっかり覚え、チームのルールに合わせて使い分けていきましょう。

コメント