COBOLのDD文を完全ガイド!初心者でもわかるファイル指定とJCL連携
生徒
「COBOLのプログラムと一緒に使われるJCLで、ファイルを指定するって聞いたんですが、正直よく分かりません…。」
先生
「それは“DD文”のことですね。COBOLでファイルを読むときや書くときに、JCL側でそのファイルがどこにあるかを指定する大事な仕組みですよ。」
生徒
「COBOLのプログラムだけじゃなくて、JCLの設定も必要ってことですか?」
先生
「その通りです。では、DD文の基本やファイル指定のポイントを、全くの初心者でも分かるように説明していきましょう。」
1. DD文とは?
DD文は、JCL(ジョブコントロールランゲージ)の中で使われるデータ定義(Data Definition)のことを指します。COBOLのプログラムでは、ファイルを論理名で扱いますが、その論理名と実際のファイルの場所や種類を結びつけるのがDD文の役割です。ファイルの入り口を案内する“看板”のようなもので、どのデータセットを読み書きするかをJCL側で指定します。大規模システムでは多くのファイルを扱うため、DD文の理解が欠かせません。
2. DD文の基本構造を理解しよう
DD文は、JCL内で//DD名 DD …という形式で記述します。ここで書かれるDD名は、COBOLのFD文やSELECT文で指定した論理ファイル名と一致している必要があります。さらにDD文では、使用するデータセット名、ファイルの種類、レコードの長さ、割り付け方法などを設定できます。初めての人には情報が多く感じられますが、一つ一つの要素は役割が明確で理解しやすいものです。特にプログラムと現物のファイルをつなぐためには必須の知識なので、ここでしっかり押さえておくことが大切です。
3. 代表的なDD文の例とその意味
実際に使用されるDD文を見て、何を指定しているのかを理解してみましょう。以下は入力ファイルを指定するシンプルな例です。
//INFILE DD DSN=USER.DATA.INPUT,
// DISP=SHR
ここでは“INFILE”というDD名のデータセットを指定しています。DSNはデータセット名で、DISP=SHRは読み取り専用で共有利用する設定を意味します。COBOL側でこのINFILEを使って読み込みを行う場合、SELECT文でこの論理名を結びつけ、FILE CONTROL句でプログラムに認識させる必要があります。初めは慣れませんが、構造を理解すれば自然に読み解けるようになります。
4. COBOLとDD文の連携の仕組み
COBOLプログラムでは、SELECT文やFD文を利用して論理名を定義します。この論理名とDD文のDD名が一致すると、プログラムとデータセットが結びつきます。例えば、COBOL側でINFILEを指定し、JCL側でもINFILEを記述すると対応が取れる仕組みです。これはプログラムがどのデータを使うかを外部から設定できる柔軟な方法であり、本番環境では非常に強力です。同じプログラムでも異なるデータを簡単に入れ替えられるため、運用作業が効率化されます。
SELECT IN-FILE ASSIGN TO INFILE.
FD IN-FILE.
01 IN-REC PIC X(80).
5. 出力ファイルを指定するDD文の例
出力ファイルを作る場合には、DISP=NEWやCATALOGといった指定が必要になります。以下は新規ファイルを作成する例です。
//OUTFILE DD DSN=USER.DATA.OUTPUT,
// DISP=(NEW,CATLG,DELETE),
// SPACE=(CYL,(1,1)),
// RECFM=FB,LRECL=80
この設定では新しくデータセットを作成し、正常終了時はカタログに登録、異常時は削除されるように設定しています。LRECLやRECFMといった指定はレコードの長さや形式を示し、COBOL側のFD文で指定したレコードサイズと一致させる必要があります。こうした細かい設定が正しくないと、プログラムは動いてもファイルが作成されなかったり、文字化けが発生することがあるため注意が必要です。
6. 実行時にファイルが正しく読み書きされる仕組み
ジョブが実行されると、JCLに書かれたDD文がOSによって解釈され、COBOLプログラムに対応するデータセットが割り当てられます。そのため、プログラム内部にファイルの物理名を直接書かなくても、外部設定で柔軟に切り替えができるわけです。これはメインフレーム環境の強みの一つで、運用担当者がJCLだけを変更して別データを処理できるメリットがあります。ファイル処理を理解すると、システム全体の動きもより深く理解できるようになります。
7. 簡単な入出力の動作例
以下はINFILEから読み込み、OUTFILEに書き出すCOBOLの例です。
SELECT IN-FILE ASSIGN TO INFILE.
SELECT OUT-FILE ASSIGN TO OUTFILE.
FD IN-FILE.
01 IN-REC PIC X(80).
FD OUT-FILE.
01 OUT-REC PIC X(80).
READ IN-FILE
AT END MOVE "END" TO OUT-REC
END-READ.
WRITE OUT-REC.
実行結果のイメージは次のようになります。
END