本文へスキップ
BecomeCoder

COBOLコース · 第1章 なぜ今COBOLか ― 歴史と現在地 · レッスン4

固定形式と自由形式 ― カラム位置の歴史的制約と現代の緩和

ローカル実施

導入

COBOLのコードを初めて見ると、独特の「余白の多さ」に驚くかもしれません。行の先頭に妙な空白があったり、決まった位置から書き始めたり——これはCOBOLが パンチカード で書かれていた時代の名残です。この章のルールを理解しておくと、以降のすべてのコード例が読みやすくなります。

説明

COBOLの伝統的な書式(固定形式 / フィックスフォーマット)は、1行80文字のパンチカードを前提に設計されました。1行の中の「どの列(カラム)に何を書くか」が厳密に決められています。

graph LR
    A["1〜6列<br/>行番号領域<br/>(パンチカードの通し番号用)"] --> B["7列目<br/>インジケータ欄<br/>(* でコメント / - で継続行)"]
    B --> C["8〜11列<br/>Area A<br/>(DIVISION・SECTION・段落名・01/77レベル)"]
    C --> D["12〜72列<br/>Area B<br/>(ほとんどの記述はここ)"]
    D --> E["73〜80列<br/>無視される<br/>(パンチカードの識別番号用だった)"]
  • 1〜6列(行番号領域) … かつてはカードの通し番号を書く場所でした。今は空白のままで構いません。
  • 7列目(インジケータ欄)* を置くとその行はコメント- を置くと前の行から文字列や単語を継続する行になります。
  • 8〜11列(Area A) … DIVISION名・SECTION名・段落名、01/77 レベル番号など「見出し」に相当するものはここから書き始めます。
  • 12〜72列(Area B) … それ以外のほとんどの文(DISPLAYMOVE など)はここから書きます。Area Aより右であれば厳密な列にこだわる必要はありません。
  • 73〜80列 … コンパイラに無視されます。パンチカードの識別番号を書く欄だった名残です。

固定形式で書くと、次のようになります(見た目のため列の目印として 1234567890... を添えています)。

1234567890123456789012345678
      *> これはコメント(7列目に *)
       IDENTIFICATION DIVISION.
       PROGRAM-ID. HELLO.
       PROCEDURE DIVISION.
           DISPLAY "Hello, world!".
           STOP RUN.

IDENTIFICATION DIVISION. は8列目から(Area A)、DISPLAY "Hello, world!". は12列目から(Area B)始まっています。この本コースのコード例も、以降すべてこの慣習に沿って書きます。

一方、COBOL-2002以降は 自由形式(フリーフォーマット) も使えるようになりました。ソースの先頭に >>SOURCE FREE という指示を書くと、列の制約から解放され、他の多くの言語と同じように好きな位置から書けます。

>>SOURCE FREE
*> 自由形式:列の制約がなく、好きな位置から書ける
IDENTIFICATION DIVISION.
PROGRAM-ID. HELLO.
PROCEDURE DIVISION.
    DISPLAY "Hello, world!".
    STOP RUN.

このコースでは、以降のコード例は基本的に 固定形式の慣習(8列目からArea A、12列目からArea B) で統一して示します。実際の現場でも固定形式のコードに触れる機会は多いため、ここでしっかり感覚をつかんでおきましょう。

試すには

上の2つの例を見比べて、「同じ処理でも書式のルールが違うだけ」ということを確認してください。次のレッスンで実際に手元の環境にGnuCOBOLを入れたら、両方の形式を試してみるとルールの違いが体感できます。