COBOLのDDステートメントでファイルとデータセットを指定する方法を完全ガイド!初心者でも理解できる実践解説
生徒
「先生、COBOLのプログラムで外部のファイルやデータセットを使いたいときって、どうやって指定するんですか?」
先生
「それには、JCL(ジョブ制御言語)の中でDDステートメントを使います。このDDステートメントが、プログラムと外部ファイルをつなぐ役割をします。」
生徒
「DDステートメントってなんですか?難しそうです…」
先生
「大丈夫、簡単に言うと“住所表”のようなものです。プログラムが『このファイルを使いたい』と指定したら、DDステートメントが『それはこの場所ですよ』と案内してくれるんです。」
1. DDステートメントとは?
COBOLプログラムでは、実際にデータを読み書きするファイルやデータセットを直接プログラムの中でパス(場所)指定することは少なく、JCL(Job Control Language)のDDステートメントを通じて指定します。DDとは「Data Definition(データ定義)」の略で、これはプログラムと実際のデータの橋渡しをする重要な仕組みです。
例えば、あなたが図書館で本を借りるとき、書架の番号や棚の位置を教えてもらわないと探せませんよね。それと同じで、COBOLプログラムも、データセット(大きなデータの箱)の場所を教えてもらわないと使えません。この「場所を教える役」がDDステートメントです。
2. JCLでのDDステートメントの基本構造
DDステートメントはJCL内で以下のように書きます。
//MYDATA DD DSN=USER01.SAMPLE.DATA,DISP=SHR
- //MYDATA → DD名(プログラム内で参照するための名前)
- DD → 「データ定義」を意味するキーワード
- DSN=USER01.SAMPLE.DATA → 実際のデータセット名(DSNは「Data Set Name」)
- DISP=SHR → データセットの利用方法(SHRは「共有」)
この例では「MYDATA」というDD名で、USER01.SAMPLE.DATAというデータセットを共有モードで使うことを意味しています。
3. COBOLプログラムでDD名を使う方法
COBOLプログラムでは、SELECT文でDD名を指定します。こうすることで、プログラムが実際にどのデータセットを使うのかをJCL側で切り替えられるようになります。
SELECT INFILE ASSIGN TO MYDATA
ORGANIZATION IS LINE SEQUENTIAL.
この例では、COBOLプログラムの中でINFILEというファイルをMYDATAというDD名に割り当てています。つまり、プログラムがINFILEを開こうとすると、JCLのDDステートメントで指定されたデータセットが開かれる仕組みです。
4. DISPパラメータの使い方
DISPは「Disposition(ディスポジション)」の略で、データセットをどのように扱うかを指定します。よく使う設定は次の通りです。
- DISP=SHR → 他のジョブと共有して読み込み(既存データセット用)
- DISP=NEW → 新しく作成する
- DISP=OLD → 単独で使用(排他アクセス)
例えば、新しいレポートファイルを作成する場合はDISP=NEWを使い、既存データを参照するだけならDISP=SHRを使います。
5. 簡単な実行例
次の例では、JCLとCOBOLプログラムを使ってデータセットの内容を表示します。
JCL側
//STEP01 EXEC PGM=COBPROG
//MYDATA DD DSN=USER01.SAMPLE.DATA,DISP=SHR
//SYSOUT DD SYSOUT=*
COBOL側
IDENTIFICATION DIVISION.
PROGRAM-ID. COBPROG.
ENVIRONMENT DIVISION.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
SELECT INFILE ASSIGN TO MYDATA
ORGANIZATION IS LINE SEQUENTIAL.
DATA DIVISION.
FILE SECTION.
FD INFILE.
01 IN-REC PIC X(80).
PROCEDURE DIVISION.
OPEN INPUT INFILE
PERFORM UNTIL EOF
READ INFILE
AT END SET EOF TO TRUE
NOT AT END DISPLAY IN-REC
END-READ
END-PERFORM
CLOSE INFILE
STOP RUN.
6. DDステートメントを理解すると便利になる理由
DDステートメントを使うと、プログラムを修正せずに、使用するデータセットを簡単に切り替えることができます。たとえば、本番環境とテスト環境で違うファイルを使う場合、JCLのDDステートメントだけを変更すれば、同じCOBOLプログラムで異なるデータを扱えるのです。
これは、大量のデータ処理やシステム運用で非常に便利で、COBOLプログラムを効率的に活用できる重要なテクニックです。
まとめ
ここまで、COBOLプログラムで外部のファイルやデータセットを扱うために欠かせない DDステートメントについて、基本的な考え方から具体的な書き方、 そしてCOBOLプログラムとの関係までを順番に学んできました。 DDステートメントは、JCLの中で記述される非常に重要な要素であり、 COBOLプログラムと実際のデータを結びつける接続点の役割を担っています。 この仕組みを理解できるかどうかで、COBOLの実務理解は大きく変わってきます。
初心者の方が最初につまずきやすいのは、 「なぜCOBOLプログラムの中にファイルの場所を書かないのか?」 という疑問です。 しかし、DDステートメントを使うことで、 プログラム自体は変更せずに、JCL側の設定だけで 使用するデータセットを切り替えられるようになります。 これは、テスト環境・本番環境・検証環境など、 複数の環境を使い分ける業務システムでは非常に大きなメリットです。
DDステートメントの基本構造では、 DD名、DSN、DISPといったキーワードが重要でした。 DD名は、COBOLプログラム内で指定する「窓口の名前」のようなもので、 プログラム側では実際のデータセット名を意識する必要がありません。 DSNはデータセットの正式な名前で、 メインフレーム上のどのデータを使うのかを明確にします。 DISPは、そのデータをどのように扱うのかを指定し、 読み取り専用なのか、新規作成なのか、排他制御が必要なのかを決めます。
また、COBOL側では SELECT 文を使って
DD名を割り当てることで、JCLとの連携が完成します。
この仕組みを理解すると、
「COBOLはプログラムを書く言語」
「JCLは実行条件やデータを管理する言語」
という役割分担がはっきりと見えてきます。
これは、メインフレーム環境で長年培われてきた考え方であり、
大規模システムを安全かつ柔軟に運用するための工夫でもあります。
DISPパラメータについても、初心者のうちから意識しておくことが大切です。 DISP=SHR を使えば、既存のデータセットを他のジョブと共有して参照できますし、 DISP=NEW を指定すれば、新しいデータセットを作成できます。 これを誤ると、意図せずデータを上書きしてしまったり、 ジョブがエラーで止まったりする原因になります。 そのため、DDステートメントを書くときは、 「このデータは読むだけか、書き込むのか」 を常に意識する習慣を身につけましょう。
今回紹介したように、DDステートメントを正しく使えるようになると、 COBOLプログラムの再利用性が高まり、 保守や運用の作業も格段に楽になります。 ファイルやデータセットを切り替えるたびに プログラムを修正する必要がなくなるため、 人為的なミスも減り、安定したシステム運用につながります。 これは、COBOLが今も現場で使われ続けている理由の一つでもあります。
最後に、DDステートメントとCOBOLプログラムが どのように連携しているのかを、 もう一度シンプルな形で確認してみましょう。 この基本形を理解しておけば、 実務でも落ち着いて対応できるようになります。
//INPUT01 DD DSN=USER01.SAMPLE.DATA,DISP=SHR
SELECT INFILE ASSIGN TO INPUT01
ORGANIZATION IS LINE SEQUENTIAL.
このように、JCLのDDステートメントと COBOLプログラムのSELECT文が対になって動くことで、 ファイルやデータセットの指定が完成します。 まずはこの対応関係をしっかり理解し、 少しずつ応用パターンを増やしていきましょう。
生徒
「DDステートメントって難しそうでしたけど、 住所表みたいなものだと考えると分かりやすかったです。」
先生
「そのイメージはとても大事ですね。 プログラムとデータをつなぐ案内役だと思えば十分です。」
生徒
「COBOL側ではDD名だけを使っていて、 本当のファイル名はJCLにある理由も理解できました。」
先生
「その理解ができれば、実務でもかなり楽になりますよ。 環境が変わっても対応できる力が身につきます。」
生徒
「まずは基本のDDステートメントを 自分で書けるように練習してみます!」