カテゴリ: COBOL 更新日: 2026/07/03

COBOLの定数管理とCOPY句(コピー句)を完全解説!保守効率を高めるテクニック

定数管理とCOPY句の活用例
定数管理とCOPY句の活用例

先生と生徒の会話形式で理解しよう

生徒

「プログラムの中で、消費税率の10パーセントを色々な場所に書いているのですが、もし税率が変わったら全部書き直さないといけないんですか?」

先生

「その通りです。あちこちに直接数字を書くと、修正がとても大変になります。そこで使うのが定数管理とCOPY句(コピー句)という仕組みです。」

生徒

「コピー句を使うと、一箇所直すだけで全部に反映されるんですか?」

先生

「そうです。メンテナンスが劇的に楽になりますよ。具体的な使い方を詳しく見ていきましょう!」

1. 定数管理とは?なぜ直接数字を書いてはいけないのか

1. 定数管理とは?なぜ直接数字を書いてはいけないのか
1. 定数管理とは?なぜ直接数字を書いてはいけないのか

プログラミングにおいて、数値や文字をプログラムの中に直接書き込むことをマジックナンバーと呼びます。例えば、消費税率の「0.1」や、一日の時間である「24」などをそのままプログラムのあちこちに書くことです。これは初心者の方が最初についやってしまう書き方ですが、プロの世界では避けるべきこととされています。

なぜ直接書いてはいけないのでしょうか。理由は大きく二つあります。一つ目は、その数字が何を表しているのか分かりにくいからです。ただの「1000」という数字が、最大入力を表すのか、送料を表すのか、後から見た人が判断できません。二つ目は、変更に弱いことです。もし消費税率が10パーセントから15パーセントに上がった場合、何百箇所もある「0.1」を全て探し出して、間違いなく書き換えなければなりません。これは非常にリスクが高く、作業時間も膨大になります。

定数管理とは、こうした「変わる可能性のある決まった値」に「名前(ラベル)」をつけて、プログラムの最初の方で一括して定義しておく手法のことです。名前をつけることで、プログラムの意味が通じやすくなり、変更が必要な際もその定義箇所を一箇所修正するだけで、プログラム全体に反映させることができます。

2. 定数定義の具体的な書き方:VALUE句の活用

2. 定数定義の具体的な書き方:VALUE句の活用
2. 定数定義の具体的な書き方:VALUE句の活用

COBOLで定数を定義するには、データ部(DATA DIVISION)の作業場所節(WORKING-STORAGE SECTION)を使います。ここで、変数と同じように名前を付け、その後に VALUE(バリュー)句を使って値を指定します。一度決めたらプログラムの途中で変えない値のことを定数と呼びます。

例えば、消費税率を定義する場合は次のように書きます。名前を付けるときは、それが定数であることが一目でわかるように、「CONST-」や「C-」といった接頭辞をつけるのが一般的なコーディング規約です。これにより、計算式の中で使われているのが「途中で中身が変わる箱(変数)」なのか「ずっと変わらない決まり(定数)」なのかがすぐに分かります。


DATA DIVISION.
WORKING-STORAGE SECTION.
01  CONST-TAX-RATE    PIC 9V99  VALUE 0.10.
01  CONST-MAX-COUNT   PIC 9(03) VALUE 500.

PROCEDURE DIVISION.
    COMPUTE SALES-TAX = PRICE * CONST-TAX-RATE.

このように書けば、計算式が PRICE * 0.10 ではなく PRICE * CONST-TAX-RATE となり、英語の文章を読むように「価格に税率を掛ける」という意図がはっきりと伝わります。

3. COPY句(コピー句)の基本概念

3. COPY句(コピー句)の基本概念
3. COPY句(コピー句)の基本概念

定数管理を一歩進めたのが COPY句(コピー句) です。大規模なシステム開発では、一つのプログラムだけでなく、何十、何百というプログラムが同時に動いています。消費税率のような共通の決まりごとは、全てのプログラムで同じ値を使わなければなりません。しかし、それぞれのプログラムに同じ定数定義を書いて回ると、またしても修正漏れのリスクが出てきます。

そこで、「共通の定義だけを別のファイル(コピーライブラリ)に保存しておき、必要なプログラムがそれを読み込む」という仕組みを使います。これがCOPY句です。パソコンに詳しくない方に例えると、料理のレシピ本(プログラム)の中に、毎回使う「基本のダシの作り方」を直接書くのではなく、「基本のダシについては別紙の1ページ目を参照」と書いておくようなものです。別紙の内容を書き換えれば、その別紙を参照している全ての料理の味が一度に変わるというわけです。

4. COPY句の具体的な記述方法

4. COPY句の具体的な記述方法
4. COPY句の具体的な記述方法

COPY句を使う際は、プログラムの中に COPY というキーワードと、読み込みたいファイルの名前を書きます。COBOLのコンパイラ(プログラムをコンピューターがわかる言葉に翻訳するソフト)は、このCOPYという文字を見つけると、指定されたファイルの中身をその場所にガチャンとはめ込んでくれます。

以下は、共通定数ファイルを読み込むプログラムの例です。コピーファイルの名前を「COMMON-CONST」とした場合の書き方を見てみましょう。


DATA DIVISION.
WORKING-STORAGE SECTION.
* 共通定数定義ファイルをここで読み込む
COPY COMMON-CONST.

PROCEDURE DIVISION.
    DISPLAY CONST-COMPANY-NAME.

この一行だけで、別のファイルに書かれた膨大な定数設定が、まるでそこに最初から書いてあったかのように使えます。初心者の方が注意する点は、COPY句の最後にも必ずピリオド . を忘れないことです。

5. コピーライブラリ(登録集ファイル)の作り方

5. コピーライブラリ(登録集ファイル)の作り方
5. コピーライブラリ(登録集ファイル)の作り方

COPY句で読み込まれる側のファイルは、通常「コピーライブラリ」や「登録集」と呼ばれます。このファイルには、通常のプログラムの全体を書くのではなく、データ定義の部分だけを抜き出して記述します。

例えば、会社名やシステム全体で使う最大値をまとめたコピーファイルの内容は、以下のようになります。この内容は、多くのプログラムで使い回されることを前提に、誰が見ても分かりやすい名前にすることが重要です。名前の付け方がバラバラだと、せっかくの共通管理が台無しになってしまうからです。


* COMMON-CONST の中身
01  CONST-SYSTEM-INFO.
    05  CONST-COMPANY-NAME  PIC X(20) VALUE "ABC商事株式会社".
    05  CONST-VERSION       PIC X(05) VALUE "V1.02".
    05  CONST-RETRY-MAX     PIC 9(01) VALUE 3.

このようにグループ化(01レベルの下に05レベルなどを置く)しておくことで、情報の整理整頓がさらに進みます。パソコンのフォルダの中にファイルを整理するような感覚ですね。

6. 条件名(88番項目)との組み合わせ

6. 条件名(88番項目)との組み合わせ
6. 条件名(88番項目)との組み合わせ

定数管理と非常に相性が良いのが、88番項目(条件名) です。これは、「特定のデータがこの値のときは、こういう名前で呼びます」という約束をする仕組みです。定数と条件名を組み合わせることで、プログラムの可読性(読みやすさ)は最高潮に達します。

例えば、ステータスが「1」なら正常、「9」なら異常終了、といったルールを定数と条件名で管理してみましょう。これをコピー句に入れておけば、どのプログラムでも同じ「正常」「異常」の判定基準が使えます。数字の1や9を直接判定するよりも、言葉で判定するほうが間違いがありません。


01  STATUS-CODE          PIC X(01).
    88  STATUS-NORMAL    VALUE "1".
    88  STATUS-ERROR     VALUE "9".

* 使い方
IF STATUS-NORMAL THEN
    DISPLAY "処理は正常に完了しました"
END-IF.

7. COPY句の活用:レコード形式の共通化

7. COPY句の活用:レコード形式の共通化
7. COPY句の活用:レコード形式の共通化

定数だけでなく、ファイルやデータベースのデータの並び順(レコードレイアウト)もCOPY句で管理します。これは非常に重要です。システムの中では、あるプログラムがデータを作成し、別のプログラムがそのデータを読み取ります。もし、データの並び順の定義がプログラムごとにバラバラだったら、正しくデータを読み取ることができず、システムは壊れてしまいます。

そのため、データの設計図となるレイアウトを一つのコピーファイルにまとめ、全てのプログラムが同じ設計図をコピーして使うように徹底します。これをレコード形式の共通化と呼びます。一つの場所を修正すれば、読み手と書き手の両方のプログラムに修正が反映されるため、食い違いが起こらなくなります。

8. 修正の影響範囲を最小限にする「疎結合」の考え方

8. 修正の影響範囲を最小限にする「疎結合」の考え方
8. 修正の影響範囲を最小限にする「疎結合」の考え方

定数管理やCOPY句を適切に使う目的は、プログラム同士の結びつきを整理し、修正の影響範囲をはっきりさせることにあります。これを専門用語で「疎結合(そけつごう)」を目指すと言います。パソコンを触ったことがない方でも、電化製品のコンセントをイメージすれば分かります。どのメーカーの掃除機でも同じコンセント(共通規格)に差せば動くように、プログラムも共通の定数や形式を使うことで、一部を変えても全体が壊れないように作るのが理想です。

直接的な数値を減らし、COPY句を通じて情報をやり取りすることで、システム全体が柔軟になります。新しい税率、新しい取引先、新しい年度への切り替えなど、将来必ずやってくる変化に対して、慌てずに対応できる「強いシステム」を作るための基礎が、この定数管理なのです。

9. コーディング規約で決めておくべき定数のルール

9. コーディング規約で決めておくべき定数のルール
9. コーディング規約で決めておくべき定数のルール

自由奔放に定数を作ってしまうと、かえって混乱を招くことがあります。そのため、チームで開発をするときは、あらかじめルール(コーディング規約)を決めておきます。未経験の方が現場に入ったときは、まずこのルールを確認することが大切です。

  • プレフィックス(接頭辞)を決める: 定数の名前の先頭には CONST- をつける、などのルールです。
  • 大文字で統一する: COBOLは基本的に大文字で書きますが、名前の付け方も統一します。
  • コメントを添える: その定数が何を意味するのか、日本語で説明を必ず書きます。
  • 定義する場所を固定する: どこに定数を書くのか、どのコピーファイルを読み込むのかを統一します。

これらのルールを守ることで、誰が書いても同じ品質のプログラムが出来上がります。初心者のうちは面倒に感じるかもしれませんが、大規模なプログラムを管理するためには欠かせないマナーです。

10. COPY句使用時のコンパイルエラーとその対策

10. COPY句使用時のコンパイルエラーとその対策
10. COPY句使用時のコンパイルエラーとその対策

最後に、COPY句を使う際によくある失敗についてお話しします。一番多いのは「指定したコピーファイルが見つからない」というエラーです。これは、プログラムを書いたファイルとは別の場所にコピーファイルを保存してしまったり、ファイル名の綴りを間違えたりしたときに起こります。パソコンの操作では、ファイルの保存場所(パス)を正しく指定することが非常に重要です。

また、コピーファイルの中で定義した名前が、プログラム内の他の名前と重複してしまう「二重定義」というエラーもよくあります。これを防ぐために、定数名や変数名にはプログラムごとに固有の番号や名前を混ぜるなどの工夫が必要です。コンパイルエラーが出ても焦らず、コピー句が正しく展開された後の姿を想像して、どこに矛盾があるかを探してみましょう。デバッグ(間違い探し)の力も、こうした構造を理解することで養われていきます。

まとめ

まとめ
まとめ

今回はCOBOLにおける定数管理とCOPY句の活用方法について詳しく学びました。COBOL開発では単にプログラムを書くだけではなく保守性や可読性を意識した設計が非常に重要になります。その中でも定数管理とCOPY句は大規模システムを効率よく運用するための基本かつ重要なテクニックです。 まず定数管理ではマジックナンバーを排除し意味のある名前を付けて値を管理することでプログラムの可読性が大きく向上します。例えば消費税率や最大件数といった値に対して名前を付けることでコードを読む人がすぐに意図を理解できるようになります。また変更が発生した場合でも一箇所を修正するだけで全体に反映されるため作業効率と安全性が大きく向上します。 次にCOPY句を活用することで複数のプログラム間で共通の定義を共有することが可能になります。これは大規模開発において非常に重要であり定数だけでなくレコードレイアウトや共通項目の管理にも活用されます。コピーライブラリに定義をまとめることで一貫性のあるデータ管理が実現できシステム全体の品質向上につながります。 また条件名である88番項目と組み合わせることで可読性はさらに向上します。数値で判定するのではなく意味のある名前で条件分岐を行うことでミスを減らし理解しやすいプログラムを書くことができます。このような工夫は実務で非常に評価されるポイントです。 さらにCOPY句はレコード形式の共通化にも利用されデータの整合性を保つ役割を持ちます。複数のプログラムで同じデータを扱う場合に定義がずれてしまうと重大な不具合につながるため共通化は必須です。これにより修正時の影響範囲も明確になり安全な変更が可能になります。 初心者の方はまず定数を直接書かないことを意識しVALUE句を使った定義から始めてください。その後COPY句を使った共通化に進むことで実務レベルの設計力が身につきます。繰り返し実践することで自然と良いコードが書けるようになります。 以下に定数管理とCOPY句を組み合わせた基本的なサンプルを示します。


DATA DIVISION.
WORKING-STORAGE SECTION.
COPY COMMON-CONST.

01 PRICE        PIC 9(05) VALUE 10000.
01 TAX          PIC 9(05).

PROCEDURE DIVISION.
    COMPUTE TAX = PRICE * CONST-TAX-RATE.
    DISPLAY "税込金額は " TAX " 円です。"
    STOP RUN.

実行結果は以下の通りです。


税込金額は 1000 円です。

また現代の開発ではC#などの言語でも定数管理の考え方は同じです。以下はC#での定数定義の例です。


const double TAX_RATE = 0.10;
int price = 10000;
double tax = price * TAX_RATE;

Console.WriteLine("税込金額は " + tax + " 円です");

実行結果は次の通りです。


税込金額は 1000 円です

このようにCOBOLで学ぶ定数管理や共通化の考え方は他のプログラミング言語にも応用可能です。プログラムの品質を高めるためには単に動くコードを書くのではなく変更に強く読みやすい設計を意識することが重要です。定数管理とCOPY句を正しく使いこなすことで保守性の高いシステムを構築することができるようになります。

先生と生徒の振り返り会話

生徒

「定数を直接書かない理由がよく分かりました。変更があるときにとても大変になりますね」

先生

「その通りです。定数管理は保守性を高めるための基本的な考え方です」

生徒

「COPY句を使えば複数のプログラムで同じ定義を使えるのも便利ですね」

先生

「はい。一箇所修正するだけで全体に反映されるのでミスを防ぐことができます」

生徒

「88番項目も使うとさらに分かりやすくなるのが印象的でした」

先生

「意味のある名前で判定できるので可読性が大きく向上します」

生徒

「これからは定数とCOPY句を意識して書いてみます」

先生

「ぜひ実践してください。保守しやすいプログラムを書く力が身につきます」

カテゴリの一覧へ
新着記事
New1
C#
C#のDictionary(辞書)の使い方を初心者向けに完全解説!キーと値でデータ管理を学ぼう
New2
C#
C#の数値型をマスターしよう!int・double・decimalの違いと使い方
New3
C#
C#で始めるIoT開発!音声認識とスピーカー制御の仕組みを解説
New4
Azure
Azure Reposの使い方を徹底解説!Gitによるソースコード管理とブランチ戦略(Gitflow)
人気記事
No.1
Java&Spring記事人気No1
COBOL
COBOLの数値データ型「PIC 9」の使い方と注意点をやさしく解説!
No.2
Java&Spring記事人気No2
C#
C#のpartialクラスとは?初心者でも理解できるクラス分割の基本
No.3
Java&Spring記事人気No3
C#
C#のWPFとは?XAMLでGUI開発を基礎から完全解説!初心者向けの入門ガイド
No.4
Java&Spring記事人気No4
Azure
Azureストレージの冗長性比較!LRS/GRS/ZRSの選び方とコストの最適解を完全解説
No.5
Java&Spring記事人気No5
C#
C#のログ出力入門!SerilogとNLogの使い方を徹底解説
No.6
Java&Spring記事人気No6
C#
C#のrefとoutキーワードとは?引数の参照渡しを理解しよう
No.7
Java&Spring記事人気No7
C#
C#のforeachループを完全ガイド!初心者でもわかるコレクション操作の基本
No.8
Java&Spring記事人気No8
COBOL
COBOLの小数点の扱いと符号付きデータ型(S, V)の使い方を初心者向けに解説!