COBOLのコメント記法は「7桁目に*を書く」だけではありません。インラインコメント(*>)・デバッグ行(D)・ページ区切り(/)・IDENTIFICATION DIVISIONの文書化エントリ・自由形式のコメントスタイルと、固定形式のカラム構造を理解することが前提になります。
この記事ではCOBOLのコメント方法を網羅的に解説し、実際の業務コードで使われるヘッダーコメント・変更履歴・セクション区切りの実践パターンまで紹介します。
- COBOLの固定形式カラム構造(7桁目インジケータの役割)
- コメント行(7桁目
*)とインラインコメント(*>)の違い - ページ区切り(7桁目
/)とデバッグ行(7桁目D) - IDENTIFICATION DIVISIONの文書化エントリ(AUTHOR・DATE-WRITTEN等)
- 自由形式(FREE FORMAT)でのコメントの書き方
- プログラムヘッダー・変更履歴・セクション区切りの実践コメントパターン
COBOLの固定形式とカラム構造
COBOLのコメント記法を理解するには、まず固定形式のカラム構造を知る必要があります。COBOLの1行は最大80桁で、各桁の役割が厳密に決まっています。
| 桁範囲 | 領域名 | 用途 |
|---|---|---|
| 1〜6桁目 | 順序番号領域(シーケンス領域) | 行番号やリビジョン番号を入れる。コンパイラは無視する。空白でも可 |
| 7桁目 | インジケータ領域 | *=コメント行, /=ページ区切り, D=デバッグ行, -=継続行, 空白=通常行 |
| 8〜11桁目 | Aエリア | DIVISIONやSECTIONの見出し・FD・01レベル・段落名を書く位置 |
| 12〜72桁目 | Bエリア | PROCEDURE DIVISIONの命令文・02〜49レベルのデータ定義を書く位置 |
| 73〜80桁目 | 識別領域(プログラム識別領域) | コンパイラが完全に無視する。旧来のプログラムIDや管理番号の記入欄として使われた |
* 1234567890123456789012345678901234567890...72 73..80
* |seq# |I| A | B | |ID area|
* |----||*| ← 7桁目が * でコメント行
* このコメントは7桁目がスペース、8桁目が * のためコメントにならない(文法エラー)
* ← これが正しいコメント行(7桁目に*)
MOVE WS-DATA TO WS-RESULT *> これはインラインコメント(*>以降がコメント)
7桁目に
*を書く必要があります。エディタによっては行頭から数えて8文字目が7桁目に見える場合があります(1始まりか0始まりかで混乱しやすい)。ソース上で行頭から7文字目のスペースが「7桁目インジケータ」の位置です。Emacs・Eclipse・VS Codeなどの専用COBOLプラグインではカラム位置がハイライトされます。コメント行(7桁目アスタリスク)
COBOLの最も基本的なコメント記法です。7桁目(インジケータ領域)に*を書くと、その行全体がコメント行になります。8〜72桁目の内容はすべてコメントとして扱われ、コンパイラに無視されます。
* ======================================
* プログラム名: SALARY-CALC
* 機 能 : 給与計算処理
* 作 成 者 : 山田 太郎
* 作 成 日 : 2026-04-14
* ======================================
IDENTIFICATION DIVISION.
PROGRAM-ID. SALARY-CALC.
DATA DIVISION.
WORKING-STORAGE SECTION.
* --- 給与計算用ワーク変数 ---
01 WS-BASE-SALARY PIC 9(7)V99. *> 基本給
01 WS-ALLOWANCE PIC 9(6)V99. *> 各種手当合計
01 WS-DEDUCTION PIC 9(6)V99. *> 控除合計
01 WS-NET-PAY PIC 9(7)V99. *> 手取り金額
PROCEDURE DIVISION.
*---------------------------------------
* 給与計算メイン処理
*---------------------------------------
PERFORM READ-INPUT-DATA
PERFORM CALC-DEDUCTION
PERFORM CALC-NET-PAY
STOP RUN.
| 項目 | 説明 |
|---|---|
| コメント行として有効な書き方 | 7桁目(インジケータ)に*を書く。8〜72桁目が自由なコメントテキスト |
| コメント行として無効な書き方 | 8桁目以降に*を書いた場合は文法エラー(または意図しないコードとして解釈される) |
| コメント行に書ける文字 | 英数字・日本語(Shift-JIS/EBCDICの漢字対応環境)・記号すべて使用可能 |
| コメント行と空白行の違い | 空白行(何も書かない行)もコンパイラに無視されるが、可読性のためコメント行と使い分ける |
インラインコメント(*>)
COBOL 2002以降の標準規格で導入されたインラインコメント記法です。行の途中に*>を書くと、*>以降から行末までがコメントになります。
PROCEDURE DIVISION.
MOVE 0 TO WS-ERROR-COUNT *> エラー件数の初期化
OPEN INPUT TRANSACTION-FILE *> 入力ファイルオープン
OPEN OUTPUT RESULT-FILE *> 出力ファイルオープン
READ TRANSACTION-FILE INTO WS-INPUT-REC *> プライミングリード
AT END MOVE 'Y' TO WS-EOF-FLAG
END-READ
PERFORM UNTIL WS-EOF *> EOF まで繰り返し
PERFORM PROCESS-RECORD
READ TRANSACTION-FILE INTO WS-INPUT-REC
AT END MOVE 'Y' TO WS-EOF-FLAG
END-READ
END-PERFORM
CLOSE TRANSACTION-FILE *> ファイルクローズ
CLOSE RESULT-FILE
STOP RUN.
| 項目 | 内容 | 補足 |
|---|---|---|
| 記法 | *>以降から行末まで |
コードの後ろに説明を添えたいとき |
| 使えるCOBOLバージョン | COBOL 2002(ISO/IEC 1989:2002)以降 | 旧コンパイラ(COBOL 74/85)では使えない |
| 固定形式での制限 | インジケータ領域(7桁目)より後に書く必要がある | 7桁目に*>と書いた場合はコメント行になる(*>ではなく*として扱われる) |
| 自由形式での制限 | 行のどこにでも書ける | 固定形式と同じ動作 |
IBM z/OS COBOLは比較的古いバージョンでもインラインコメントをサポートしていますが、一部の古いコンパイラではエラーになります。保守対象のシステムがどのCOBOLバージョンで動作しているかを確認してから使いましょう。GnuCOBOL(旧OpenCOBOL)やMicro Focus COBOLではいずれもサポートされています。
ページ区切り(7桁目スラッシュ)
7桁目に/(スラッシュ)を書くとコンパイラリスティングにページ区切りが挿入されます。コメントではありませんが、コードの区切りとして使われる記法です。
IDENTIFICATION DIVISION.
PROGRAM-ID. BATCH-PGM.
/ ← このスラッシュでリスティングに改ページが入る
ENVIRONMENT DIVISION.
CONFIGURATION SECTION.
/ ← 各DIVISIONの区切りにも使える
DATA DIVISION.
WORKING-STORAGE SECTION.
/ 以下はファイル定義
FILE SECTION.
FD INPUT-FILE.
| 項目 | 説明 |
|---|---|
7桁目/ |
コンパイラのリスティング(印刷時)に改ページを挿入する |
| コメントとしての機能 | コメント行(*)と同様に実行時の動作には影響しない。ただし厳密にはコメントではない |
| 現代での使い方 | プリンタ出力が主流だった時代の名残。現代ではLST/PRINTリスティングより画面/IDEで確認するため、使用頻度は低下 |
| コンパイラ依存 | 一部のコンパイラでは動作しない場合がある。IBM JCLのSYSPRINT出力では有効 |
デバッグ行(7桁目 D)
7桁目にDを書いた行はデバッグ行です。通常はコメント行と同様に無視されますが、WITH DEBUGGING MODEをENVIRONMENT DIVISIONで指定するとコンパイルされ実行されます。
* WITH DEBUGGING MODEを指定するとDの行がアクティブになる
ENVIRONMENT DIVISION.
CONFIGURATION SECTION.
SOURCE-COMPUTER. IBM-Z WITH DEBUGGING MODE.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 WS-COUNTER PIC 9(5) VALUE 0.
01 WS-AMOUNT PIC 9(9)V99.
PROCEDURE DIVISION.
PERFORM VARYING WS-COUNTER FROM 1 BY 1
UNTIL WS-COUNTER > 100
D DISPLAY 'LOOP COUNT: ' WS-COUNTER
D DISPLAY 'AMOUNT : ' WS-AMOUNT
PERFORM CALC-AMOUNT
END-PERFORM
* WITH DEBUGGING MODEが指定されていない場合、D行はスキップされる
DISPLAY '処理完了'
STOP RUN.
| 状態 | 条件 | 動作 |
|---|---|---|
| デバッグ行 無効時(通常) | WITH DEBUGGING MODEなし |
Dの行はコメント行と同様に無視される(実行されない) |
| デバッグ行 有効時 | SOURCE-COMPUTER. xxx WITH DEBUGGING MODE. |
Dの行がコンパイルされ、通常のコードとして実行される |
| 現代での評価 | COBOL 2002でデバッグ行は非推奨(deprecated)扱い | 新規コーディングでは*>インラインコメントか、専用デバッグロジック(88レベル+DISPLAY)を使う方が推奨 |
テスト環境で
WITH DEBUGGING MODEを使っていたソースを本番環境に移す際に、SOURCE-COMPUTERの記述を削除するのを忘れると、デバッグ出力がDISPLAYで大量に表示されてしまいます。また、COBOL 2002以降の標準ではデバッグ行は非推奨とされているため、新規プログラムでのD行の使用は避けることを推奨します。IDENTIFICATION DIVISIONの文書化エントリ
COBOLのIDENTIFICATION DIVISIONには、プログラムの文書情報を記述するための専用エントリがあります。これらはコンパイラに無視されますが、プログラムのメタデータとして重要です。
IDENTIFICATION DIVISION.
PROGRAM-ID. PAYROLL-CALC. *> プログラム名(必須)
* --- 以下の文書化エントリはコンパイラに無視される ---
AUTHOR.
YAMADA TARO. *> 作成者名
INSTALLATION.
FINANCE DEPT TOKYO. *> 所属部門・インストール先
DATE-WRITTEN.
2026-04-14. *> 作成日
DATE-COMPILED.
2026-04-14. *> コンパイル日(コンパイラが自動更新する場合あり)
SECURITY.
CONFIDENTIAL. *> セキュリティ分類(社外秘など)
* REMARKSは一部のCOBOL方言でサポート(標準外)
* REMARKS.
* 給与計算バッチ。月次締め処理用。
| エントリ | 必須/任意 | 標準対応 | 用途 |
|---|---|---|---|
| PROGRAM-ID | 必須 | 標準 | プログラム名を定義。サブプログラムとして呼ばれるときの識別子になる |
| AUTHOR | 任意(非推奨) | COBOL 85まで。COBOL 2002で廃止 | 作成者名を記述 |
| INSTALLATION | 任意(非推奨) | COBOL 85まで。COBOL 2002で廃止 | 所属・インストール先を記述 |
| DATE-WRITTEN | 任意(非推奨) | COBOL 85まで。COBOL 2002で廃止 | 作成日を記述 |
| DATE-COMPILED | 任意(非推奨) | COBOL 85まで。COBOL 2002で廃止 | コンパイル日を記述。コンパイラが自動更新する場合がある |
| SECURITY | 任意(非推奨) | COBOL 85まで。COBOL 2002で廃止 | セキュリティ分類を記述 |
AUTHOR・DATE-WRITTEN等の文書化エントリはCOBOL 2002でオプショナルから非推奨・廃止に変わりました。しかし実際の業務COBOLプログラム(特に金融・官公庁・製造業の大規模システム)では、これらのエントリが今も広く使われています。IBM z/OS COBOLなど多くのコンパイラは後方互換として引き続きサポートしています。メンテナンス時は既存の記述スタイルに合わせるのが安全です。
自由形式(FREE FORMAT)でのコメント
COBOL 2002以降では>>SOURCE FORMAT FREE指示子で自由形式に切り替えられます。自由形式では固定カラム構造がなくなり、コメントの書き方も変わります。
>>SOURCE FORMAT FREE
*> 自由形式では *> がインラインコメント(行の先頭でも使える)
*> 固定形式の7桁目 * は使えない(文法エラーになる)
IDENTIFICATION DIVISION.
PROGRAM-ID. FREE-FORMAT-SAMPLE.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 WS-COUNTER PIC 9(5). *> 自由形式では行末コメントもOK
PROCEDURE DIVISION.
*> 自由形式の場合、*> が唯一のコメント記法
MOVE 0 TO WS-COUNTER
PERFORM UNTIL WS-COUNTER >= 100 *> 100回ループ
ADD 1 TO WS-COUNTER
END-PERFORM
STOP RUN.
>>SOURCE FORMAT FIXED
* 固定形式に戻した後は7桁目 * が使える
| 形式 | 行コメント | インラインコメント | 使われる場面 |
|---|---|---|---|
| 固定形式(FIXED) | *(7桁目) |
*>(行の途中から) |
伝統的なCOBOL。ほとんどの業務システム |
| 自由形式(FREE) | 使用不可(エラー) | *>のみ(行頭でも可) |
COBOL 2002+。新規開発や近代的な環境 |
* --- 固定形式ブロック開始 ---
IDENTIFICATION DIVISION.
PROGRAM-ID. MIXED-FORMAT.
>>SOURCE FORMAT FREE
*> 自由形式ブロック開始
WORKING-STORAGE SECTION.
01 WS-VALUE PIC 9(5).
*> 自由形式ではカラム位置を気にせず書ける
>>SOURCE FORMAT FIXED
* 固定形式に戻る。以降は7桁目 * が有効
PROCEDURE DIVISION.
MOVE 100 TO WS-VALUE
STOP RUN.
継続行(7桁目ハイフン)
コメントではありませんが、コードの可読性に関連する7桁目の記法として継続行があります。72桁を超えるリテラルや長い記述を次の行に続けたいときに使います。
* --- 継続行を使わない場合(72桁に収める)---
MOVE 'SHORT TEXT' TO WS-MSG.
* --- 継続行を使う場合 ---
* 前の行の末尾で文字列を途中で切り、次の行の7桁目に - を書く
MOVE 'THIS IS A VERY LONG MESSAGE TEXT THAT DOES NOT FI
- 'T IN ONE LINE AND MUST BE CONTINUED' TO WS-LONG-MSG.
* --- 注意: *> インラインコメントは継続できない ---
* 継続行は文字列リテラルや長い命令のみに使う
* インラインコメントを72桁で切る場合は次の行に新しいコメント行を書く
7桁目の
-は前の行の文字列リテラルを続けるためのものです。コメント行を継続することはできません。コメントが長くなる場合は*行を複数行書きましょう。また自由形式では継続行の概念自体がなく、単純に次の行に続けて書けます。実践コメントパターン
プログラムヘッダーコメント
プログラムの冒頭に書く標準的なヘッダーコメントです。プログラムの概要・作成者・変更履歴をまとめて管理します。
*================================================================*
* プログラム名: PAYROLL-CALC *
* 機 能 : 月次給与計算バッチ処理 *
* - 基本給・各種手当の合算 *
* - 社会保険・所得税の控除計算 *
* - 給与明細ファイルへの出力 *
*----------------------------------------------------------------*
* 入力ファイル: EMPLOYEE.DAT 社員マスタ *
* : ATTENDANCE.DAT 勤怠データ *
* 出力ファイル: PAYSLIP.DAT 給与明細ファイル *
* : PAY-ERR.LOG エラーログ *
*----------------------------------------------------------------*
* 作 成 者 : 山田 太郎 (経理システム部) *
* 作 成 日 : 2026-01-10 *
*----------------------------------------------------------------*
* 変 更 履 歴: *
* 2026-02-15 鈴木 二郎: 軽減税率対応(食料品8%追加) *
* 2026-03-20 田中 花子: 育児休業控除ロジックを修正(#2341) *
* 2026-04-14 山田 太郎: 定額減税2026年度対応 *
*================================================================*
IDENTIFICATION DIVISION.
PROGRAM-ID. PAYROLL-CALC.
セクション・処理ブロックの区切りコメント
PROCEDURE DIVISIONの段落を視覚的に整理するための区切りコメントです。特に長いプログラムでは可読性が大幅に向上します。
PROCEDURE DIVISION.
*================================================================*
* メイン処理フロー *
*================================================================*
MAIN-LOGIC.
PERFORM OPEN-FILES-SECTION
PERFORM READ-INPUT-SECTION
PERFORM CALC-SECTION
PERFORM WRITE-OUTPUT-SECTION
PERFORM CLOSE-FILES-SECTION
STOP RUN.
*----------------------------------------------------------------*
* ファイルオープン処理 *
*----------------------------------------------------------------*
OPEN-FILES-SECTION SECTION.
OPEN INPUT EMPLOYEE-FILE
INPUT ATTENDANCE-FILE
OUTPUT PAYSLIP-FILE
OUTPUT ERROR-LOG-FILE.
OPEN-FILES-END.
EXIT.
*----------------------------------------------------------------*
* 計算メイン: 基本給計算→控除計算→手取り計算 *
*----------------------------------------------------------------*
CALC-SECTION SECTION.
PERFORM CALC-BASE-PAY
PERFORM CALC-DEDUCTION
PERFORM CALC-NET-PAY.
CALC-END.
EXIT.
データ項目へのコメント
DATA DIVISIONのデータ項目にインラインコメントや直前のコメント行を使って説明を付けるパターンです。
DATA DIVISION.
WORKING-STORAGE SECTION.
* --- 処理制御フラグ ---
01 WS-CONTROL-FLAGS.
05 WS-EOF-FLAG PIC X(1) VALUE 'N'. *> N=処理中 Y=EOF到達
88 WS-EOF VALUE 'Y'.
05 WS-ERR-FLAG PIC X(1) VALUE 'N'. *> N=正常 Y=エラーあり
88 WS-HAS-ERROR VALUE 'Y'.
05 WS-FIRST-READ PIC X(1) VALUE 'Y'. *> Y=初回読み込み前
* --- 集計カウンタ ---
01 WS-COUNTERS.
05 WS-INPUT-COUNT PIC 9(7) VALUE 0. *> 入力件数
05 WS-OUTPUT-COUNT PIC 9(7) VALUE 0. *> 正常出力件数
05 WS-ERROR-COUNT PIC 9(5) VALUE 0. *> エラー件数
* --- 計算用ワーク変数 ---
* COMP-3(パック10進)はバイナリよりも精度が高く金額計算に適している
01 WS-SALARY-WORK.
05 WS-BASE-SALARY PIC 9(7)V99 COMP-3. *> 基本給
05 WS-OVERTIME-PAY PIC 9(6)V99 COMP-3. *> 残業代
05 WS-TOTAL-ALLOW PIC 9(6)V99 COMP-3. *> 手当合計
05 WS-HEALTH-INS PIC 9(5)V99 COMP-3. *> 健康保険料
05 WS-PENSION PIC 9(5)V99 COMP-3. *> 厚生年金
05 WS-INCOME-TAX PIC 9(6)V99 COMP-3. *> 所得税
05 WS-NET-PAY PIC 9(7)V99 COMP-3. *> 手取り(最終結果)
コードのコメントアウト(一時的な無効化)
デバッグやテスト時に処理を一時的に無効化する方法です。行頭を7桁目に移してコメント行にするか、インラインで*>を使います。
PROCEDURE DIVISION.
* --- 旧ロジック(2026-03消費税計算方式変更により無効化)---
* COMPUTE WS-TAX = WS-AMOUNT * 0.08
* COMPUTE WS-TOTAL = WS-AMOUNT + WS-TAX
* --- 新ロジック(軽減税率対応) ---
IF WS-FOOD-FLAG = 'Y'
COMPUTE WS-TAX ROUNDED = WS-AMOUNT * 0.08 *> 食品: 8%
ELSE
COMPUTE WS-TAX ROUNDED = WS-AMOUNT * 0.10 *> 通常: 10%
END-IF
COMPUTE WS-TOTAL = WS-AMOUNT + WS-TAX
* --- デバッグ用DISPLAY(本番ではコメントアウト)---
* DISPLAY 'DEBUG: AMOUNT=' WS-AMOUNT ' TAX=' WS-TAX
* DISPLAY 'DEBUG: TOTAL =' WS-TOTAL
TODOコメントと問題点の記録
将来の改修が必要な箇所や既知の制限事項をコメントで残すパターンです。チームでの保守時に役立ちます。
* TODO: 2026-06 担当: 田中
* 月中入社社員の日割り計算未対応。現状は満額支給。
* ATTENDANCE-FILEに入社日が含まれるようになったら対応予定。
* FIXME: 2026-04-01 山田
* WIN計算で1円単位の端数が累積するケースを確認。
* 100件以上のレコードで合計が1円ずれる。要調査。
* チケット番号: #3145
* NOTE: 上限チェック(9999999円)はシステム要件による制約。
* PIC 9(7)の上限を超える場合はON SIZE ERRORで検知する。
COMPUTE WS-NET-PAY
ON SIZE ERROR
MOVE 9999999.99 TO WS-NET-PAY *> 上限でキャップ
ADD 1 TO WS-CAP-COUNT
END-COMPUTE
よくある落とし穴と対策
| 落とし穴 | 症状 | 対策 |
|---|---|---|
| 7桁目がズレてコメントにならない | エディタでカラム位置を誤認識し、8桁目に*を書いてしまう。文法エラーまたは意図しないコードとして解釈される | COBOLプラグイン(VS Code: COBOL拡張・Eclipseなど)のカラムルーラーを使う。7桁目を視覚的に確認する |
| 73桁目以降に書いた内容がコンパイラに無視される | 固定形式では73〜80桁目は識別領域でコンパイラに無視される。長いコメントを73桁以降に書いてもコードに影響しないが意図通りに残らない | コメントは8〜72桁目に収める。72桁を超える場合は次のコメント行に続ける |
| 旧コンパイラで *> を使ってエラーになる | COBOL 74/85のみ対応のコンパイラではインラインコメント(*>)が構文エラーになる | 対象コンパイラのCOBOLバージョンを確認する。旧環境では7桁目*のコメント行のみを使う |
| デバッグ行(D)が本番環境で有効になっている | SOURCE-COMPUTERにWITH DEBUGGING MODEを残したまま本番にデプロイすると、D行のDISPLAYが実行される | 本番コンパイル前にWITH DEBUGGING MODEを削除する。または最初からD行を使わずに88レベルのデバッグフラグを使う |
| 自由形式で7桁目*を使いコメントにならない | >>SOURCE FORMAT FREEの後は固定形式のカラム構造がなくなる。7桁目に*を書いてもコメント行にはならず文法エラーになる | 自由形式では*>のみを使う。固定形式と自由形式を混在させる場合は>>SOURCE FORMAT指示子の切り替えタイミングを明確にする |
よくある質問
*>インラインコメントが便利です。行全体をコメントにする場合や、区切り線・ヘッダーを書く場合は7桁目の*を使います。旧コンパイラとの互換性が必要な場合は*だけを使うのが安全です。まとめ
COBOLのコメント記法は固定形式のカラム構造と密接に関係しています。
| 記法 | 用途 | 対応バージョン/備考 |
|---|---|---|
7桁目 * |
行全体をコメントにする。最も基本的で互換性が高い | 固定形式のすべてのCOBOLバージョン |
*>(インライン) |
行の途中から行末までコメントにする | COBOL 2002以降(IBM/GnuCOBOL等で対応) |
7桁目 / |
コンパイラリスティングに改ページを挿入する(コメントではない) | 固定形式。現代では用途が少ない |
7桁目 D |
WITH DEBUGGING MODEのときだけ実行されるデバッグ行 | COBOL 2002以降は非推奨 |
| IDENTIFICATION DIVISION文書化エントリ | AUTHOR・DATE-WRITTEN等のメタデータ。コンパイラに無視される | COBOL 85まで標準。現代の業務コードでも現役 |
*>(自由形式) |
行頭を含む行のどこにでも書けるインラインコメント | >>SOURCE FORMAT FREEの後 |
実際の業務COBOLプログラムでは、プログラムヘッダーに概要・担当者・変更履歴を記載し、セクション区切り線でPROCEDURE DIVISIONを整理し、データ項目にインラインコメントで型・用途を説明するスタイルが標準的です。IF文やPERFORM文などの条件分岐・ループ処理にコメントを添えることで、複雑なビジネスロジックの意図が格段に伝わりやすくなります。
コメントを残すことはコードの品質を保つだけでなく、5年後・10年後に保守する後任者へのメッセージでもあります。COBOLシステムの平均寿命は30〜40年とも言われており、COBOLのコメントは他の言語以上に「将来への投資」としての意味を持ちます。COBOLの需要と将来性についてはCOBOLを学習する価値はあるのかもあわせてご覧ください。
