1. 導入:なぜSECTION名の重複が御法度なのか
COBOLのプログラムを書き始めたばかりの頃、ふと「あれ、このラベル名、前にも使ったかも?」と思ったことはありませんか?特に大きなプログラムを組んでいると、ついつい名前が重複してしまうことがあります。COBOLにおいて「SECTION(節)」の名前が重複してはいけないというルールは、単なる文法上の制約ではありません。プログラムの「静的構造」を決定づける重要なルールであり、これを守らないとコンパイルエラーでプログラムが動き出さないだけでなく、後々の保守で思わぬバグを生む原因になります。
2. 基礎知識:SECTIONとは何か?
COBOLのプログラムは、いくつかのまとまりで構成されています。
・プログラム全体を統括する「DIVISION(部)」
・その中の区分である「SECTION(節)」
・さらにその中の細かい処理単位である「PARAGRAPH(段落)」
この階層構造において、SECTIONは「処理の大きな区切り」として機能します。プログラムが「どこへ飛べばよいか(制御を移せばよいか)」を判断する際、SECTION名は最上位のラベルとして扱われます。そのため、もし同じ名前のSECTIONが二つ存在すると、コンピュータは「どちらのSEC-1へ行けばいいんだ?」と混乱してしまうのです。これが一意性(ユニークであること)が求められる理由です。
3. 実装と解決策:一意性を保つためのルール
SECTION名には、その役割がひと目でわかる名前を付けるのがベテランの流儀です。例えば、初期化処理なら「INIT-SECTION」、メイン処理なら「MAIN-SECTION」といった具合です。
もし、どうしても同じような処理を複数回書きたい場合は、SECTIONを分けるのではなく、共通の「PARAGRAPH(段落)」を「PERFORM」で呼び出す構造にするのが一般的です。
4. サンプルプログラム
以下は、正しいSECTIONの定義方法と、やってはいけない「エラー例」を比較したコードです。
IDENTIFICATION DIVISION.
PROGRAM-ID. SAMPLE-PROG.
PROCEDURE DIVISION.
- — 正しい書き方 —
MAIN-SECTION SECTION.
DISPLAY “メイン処理を開始します。”
PERFORM SUB-ROUTINE.
STOP RUN.
SUB-ROUTINE SECTION.
DISPLAY “サブルーチン処理です。”
EXIT.
- — コンパイルエラーになる例(コメントアウトしています) —
- ERROR-SECTION SECTION.
- DISPLAY “最初の定義”.
- ERROR-SECTION SECTION.
- DISPLAY “重複は許されないため、ここでコンパイルエラーになります”.
5. 応用・注意点:現場で役立つアドバイス
現場のプロジェクトでは、SECTION名にプレフィックス(接頭辞)を付ける習慣がよくあります。
・A000-INITIALIZE-SECTION
・B000-PROCESS-SECTION
・Z000-EXIT-SECTION
このように先頭に連番やアルファベットを付けることで、コード全体を見渡したときに「上から下へ順番に処理が流れている」ことが視覚的に理解しやすくなります。また、SECTION名は「プログラムの目次」のようなものです。重複を避けるだけでなく、誰が見ても処理の全体像が掴めるような命名を心がけると、あなたのコードは格段に読みやすくなりますよ。
「プログラムの構造を整理する」ことは、将来の自分を助けることに繋がります。ぜひ意識してみてください!

コメント