1. 導入:なぜ「IS COMMON」が必要なのか
COBOLの開発現場では、一つのソースファイルの中に複数のプログラムを記述する「入れ子(Nested)プログラム」という手法がよく使われます。しかし、標準的な入れ子構造では、あるプログラムの中から「兄弟関係」にある別のプログラムを呼び出そうとすると、コンパイルエラーになってしまうことがあります。そんな時、この「IS COMMON」属性を使うことで、呼び出し範囲を広げ、プログラム構造をより柔軟に設計できるようになります。
2. 基礎知識:入れ子プログラムの可視性とは
通常、入れ子プログラムは「親プログラム」からしか直接呼び出せません。例えば、プログラムAの中にプログラムBとプログラムCがある場合、BからCを呼び出すことはできません。これはBとCが「兄弟」であり、お互いに相手の存在が見えないからです。この「見えない」という制限を取り払い、プログラム全体から見えるように拡張するのが「COMMON」属性の役割です。
3. 実装と解決策
解決策は非常にシンプルです。「PROGRAM-ID」句の直後に「IS COMMON」と記述するだけです。これにより、そのプログラムは親プログラムの内部だけで完結せず、兄弟プログラムからも参照可能な「共有ライブラリ」のような存在になります。
4. サンプルプログラム
以下の例では、親プログラムの中で「計算処理」を兄弟プログラムとして定義し、別の処理から呼び出しています。
IDENTIFICATION DIVISION.
PROGRAM-ID. MAIN-PROG.
PROCEDURE DIVISION.
- 兄弟プログラムであるSUB-CALCを呼び出す
CALL “SUB-CALC”
STOP RUN.
- 入れ子プログラムの開始
PROGRAM-ID. SUB-CALC IS COMMON.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 MSG PIC X(20) VALUE “Hello, Common!”.
PROCEDURE DIVISION.
DISPLAY MSG
EXIT PROGRAM.
END PROGRAM SUB-CALC.
END PROGRAM MAIN-PROG.
5. 応用・注意点
注意点1:プログラム名の重複に気をつける
COMMON属性を付与すると、プログラム名がグローバルな名前空間に近い形で認識されます。プロジェクト全体で同じ名前のプログラムが存在しないよう、接頭辞をつけるなどの命名規則を守りましょう。
注意点2:可視性の範囲
COMMON属性はあくまで「親プログラムの内部」で有効なものです。親プログラムの外側(別のソースファイルなど)からは呼び出せませんので、その点は誤解しないようにしてください。
現場のヒント
この属性は、共通の計算ロジックやメッセージ表示など、同じ親の下で使い回したい小規模なロジックをまとめる際に非常に便利です。ソースコードの肥大化を防ぎ、保守性を高めるために積極的に活用してみてください。

コメント