1. 導入:なぜ「段落なし」ではいけないのか
COBOLの現場で長年コードをレビューしていると、時折「PROCEDURE DIVISION」の直後にいきなり命令文が書かれているコードを見かけます。コンパイラによってはエラーにならずに通ることもありますが、これはバグの温床であり、保守性を著しく低下させる悪習です。なぜすべての命令を段落(PARA)の中に収めるべきなのか、その重要性を解説します。
2. 基礎知識:段落(Paragraph)と節(Section)の役割
COBOLの「手続き部」は、プログラムが実行される場所です。ここを整理整頓するための仕組みが「段落」と「節」です。
段落は、プログラムの論理的なひとまとまりを表す名前です。例えば「初期処理」「計算処理」「終了処理」といった名前を段落に付けることで、どこで何をしているかが一目で分かるようになります。
構造化プログラミングの観点では、コードは「名前付きのブロック」に分割されていることが大前提です。段落名がないコードは、いわば「整理整頓されていない引き出し」のようなもので、後から読み返した時にどこからどこまでが一連の処理なのかを判別する妨げになります。
3. 実装:構造化制御構文の基本
すべての命令は、必ず段落名(または節名)の下に配置してください。また、処理を呼び出す際には「PERFORM」文を使うのが鉄則です。これにより、プログラムの実行順序が「上から下へ」という単純な流れから「論理的な塊ごとの制御」へと進化します。
4. サンプルプログラム
以下は、正しい構造化を意識したプログラムの例です。コピーして、自分の環境でコンパイルしてみてください。
IDENTIFICATION DIVISION.
PROGRAM-ID. SAMPLE01.
PROCEDURE DIVISION.
— メイン制御部(ここから処理が始まる) —
MAIN-CONTROL.
PERFORM INITIAL-PROCESS.
PERFORM MAIN-CALC.
PERFORM END-PROCESS.
STOP RUN.
— 初期化処理 —
INITIAL-PROCESS.
DISPLAY “初期化を開始します”.
— 計算処理 —
MAIN-CALC.
DISPLAY “計算処理を実行中…”.
— 終了処理 —
END-PROCESS.
DISPLAY “処理を終了します”.
5. 応用・注意点:現場で生き残るためのテクニック
現場でよくある失敗は、うっかり段落を書き忘れて「次の段落に処理が突き抜けてしまう(フォールスルー)」という現象です。
回避策として重要なのは以下の2点です。
1. STOP RUNやEXIT PROGRAMの位置を意識する:処理の境界線には明確な終了命令を置く癖をつけましょう。
2. PERFORMの使用を徹底する:GOTO文で無理やりジャンプするのではなく、PERFORMで呼び出す構造にすれば、処理が終わった後に元の場所へ戻ってくるため、複雑なジャンプによるバグを防げます。
「とりあえず動けばいい」ではなく、「誰が見ても理解できる構造」を作ることこそが、ベテランエンジニアへの第一歩です。まずは自分のプログラムから「段落なし」をなくすことから始めてみてください。

コメント