導入: なぜピリオドの配置が重要なのか
ベテランの現場において、コンパイルエラーの半分以上は、実は「ピリオドの打ち忘れ」や「余計な場所へのピリオド」が原因です。COBOLにおいてピリオド(.)は単なる文章の終わりではなく、プログラムのスコープ(論理的な範囲)を確定させる重要な記号です。特にIF文やPERFORM文と絡むと、ピリオド一つで処理の実行条件が180度変わってしまうこともあります。今回は、事故を防ぐためのピリオドの正しい扱い方を解説します。
基礎知識: ピリオドが持つ「スコープ終了」の役割
COBOLのソースは、見出し(Division/Section/Paragraph)の区切りと、文(Sentence)の終わりを示すためにピリオドを使用します。
初心者が陥りやすいのが、「文(Statement)」と「文(Sentence)」の混同です。
・文(Statement):ADDやMOVEなど、一つひとつの命令。
・文(Sentence):一つ以上のStatementをピリオドで区切った単位。
IF文の中でピリオドを打つと、その時点で「IFの論理的な範囲」が強制終了されます。この性質を理解していないと、意図しない処理の飛び越しが発生し、デバッグが困難なバグを生むことになります。
実装/解決策: 構造化プログラミングの鉄則
現代のCOBOL開発では、ピリオドの多用を避けるのがトレンドです。「END-IF」や「END-PERFORM」といった範囲終了標識(Scope Terminators)を積極的に活用しましょう。これらを使用することで、ピリオドに依存しない明確な階層構造を記述できます。
サンプルプログラム: 安全なコーディング例
以下の例は、ピリオドの誤配置によるバグを防ぐための推奨スタイルです。
IDENTIFICATION DIVISION.
PROGRAM-ID. SAMPLE-PERIOD.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 WS-VAL PIC 9(01) VALUE 5.
01 WS-MSG PIC X(20).
PROCEDURE DIVISION.
> 現代的な書き方:END-IFを活用し、ピリオドは文の最後にのみ打つ
IF WS-VAL > 3
MOVE “3より大きい” TO WS-MSG
DISPLAY WS-MSG
END-IF.
> 注意:もしここにピリオドを打たず、IFの中に余計なピリオドを置くと、
> ELSEの処理が意図せず実行されたり、無視されたりするリスクがある。
STOP RUN.
応用・注意点: 現場で役立つチェックポイント
1. メンテナンス時の注意
他人が書いた古いソースを修正する際、途中に置かれたピリオドを消すと、それまでのロジック全体が崩れることがあります。「とりあえずピリオドを打ってエラーを消す」という場当たり的な修正は厳禁です。
2. COPY句の罠
COPY句で読み込むコードの末尾にピリオドがある場合、展開先で意図しない文の終了が発生することがあります。COPY句の中身は、可能な限りピリオドを付けない「部品単位」で作成するのが、プロの設計です。
3. END-系キーワードの徹底
「IF…END-IF」のように対になるキーワードがある場合は、必ずセットで記述しましょう。これにより、ピリオドの有無に依存しない可読性の高いコードが維持できます。
ピリオドはCOBOLの言語仕様の根幹です。ルールを正しく理解し、明示的な終了記号を使いこなすことで、バグを未然に防ぐ堅牢なプログラムを目指しましょう。

コメント