はじめに

編集

JCLとは

編集

JCL(Job Control Language)は、メインフレームコンピュータ上でジョブを実行するために使用される言語です。IBM のメインフレームオペレーティングシステム z/OS で主に使用されており、システムにジョブの実行方法を指示します。

JCLの重要性

編集
  • ジョブの定義と制御
  • リソースの割り当て
  • プログラムの実行順序の管理
  • エラー処理の制御

本ハンドブックの目的

編集

このハンドブックは、JCL の基本から高度な使用法まで、包括的な理解を提供することを目的としています。初心者からエキスパートまで、様々なレベルの読者に役立つ情報を提供します。

対象読者

編集
  • メインフレーム初心者
  • プログラマー
  • システム管理者
  • JCL スキルの向上を目指す IT プロフェッショナル

ハンドブックの使い方

編集

各章は独立して読むことができますが、順を追って読むことで JCL の理解を深めることができます。実践的な例と演習問題を提供し、学習した内容を強化します。

JCLの歴史と発展

編集
  • JCL の起源
  • 主要な改訂と機能追加
  • 現代のメインフレーム環境における JCL の役割

JCLの基礎

編集

JCLの基本構造

編集
  • JOB文
  • EXEC文
  • DD文

JCLステートメントの構文

編集
  • カラム規則
  • 継続文
  • コメント

JCLパラメータ

編集
  • 位置パラメータ
  • キーワードパラメータ

JCLの特殊文字

編集
  • デリミタ
  • 演算子

JCLの基本的な記述例

編集
//MYJOB    JOB (ACCT),'MY NAME',CLASS=A,MSGCLASS=X
//STEP1    EXEC PGM=IEFBR14
//DD1      DD   DSN=MY.DATASET,DISP=(NEW,CATLG),
//             SPACE=(CYL,(10,5)),UNIT=SYSDA

JCLの実行環境

編集
  • バッチ処理
  • TSO(Time Sharing Option)での実行

JCLの基本的なエラーと対処法

編集
  • 構文エラー
  • JCLエラーメッセージの読み方

JCLにおけるシンボリック変数

編集
  • 定義と使用方法
  • システム提供のシンボリック変数

ここでは、JCLの基本的な構造と要素について説明しています。実際のJCL記述例も含めることで、理論と実践の両面から理解を深められるようにしました。

JCLの主要コマンド

編集

JOB文

編集
  • 構文と必須パラメータ
  • オプションパラメータ(CLASS, MSGCLASS, REGION など)
  • ジョブ優先度の設定

EXEC文

編集
  • PGM パラメータ
  • PROC パラメータ
  • COND パラメータ(条件付き実行)
  • データセット定義
  • 一時ファイルの定義
  • 入出力デバイスの指定

PROC文

編集
  • プロシージャの定義
  • インラインプロシージャ

SET文

編集
  • シンボリック変数の設定

IF/THEN/ELSE/ENDIF文

編集
  • 条件分岐の制御

JCLLIB文

編集
  • プロシージャライブラリの指定

INCLUDE文

編集
  • 外部JCLメンバーの取り込み

COMMAND文

編集
  • システムコマンドの発行

主要コマンドの使用例

編集
//MYJOB    JOB (ACCT),'JOHN DOE',CLASS=A,MSGCLASS=X
//STEP1    EXEC PGM=MYPROGRAM
//SYSPRINT DD   SYSOUT=*
//SYSIN    DD   *
  Input data here
/*
//STEP2    EXEC PROC=MYPROC
//STEP2.SYSIN DD *
  More input data
/*

コマンドのベストプラクティス

編集
  • 適切なパラメータ選択
  • エラー処理の考慮
  • リソース使用の最適化

この章では、JCLの主要なコマンドとその使用方法について詳しく解説しています。実際の使用例も含めることで、各コマンドの役割と適用場面をより具体的に理解できるようにしました。

ジョブの構造

編集

ジョブの基本構造

編集
  • JOB文
  • EXEC文(複数のステップ)
  • DD文

ジョブステップの概念

編集
  • ステップの定義
  • ステップ間の関係
  • ステップの順序と実行フロー

ジョブストリームの設計

編集
  • 複数のジョブの連携
  • ジョブ間の依存関係の管理

条件コード

編集
  • 条件コードの意味
  • ステップ間での条件コードの利用

リスタートとリカバリー

編集
  • RESTART パラメータの使用
  • チェックポイント/リスタート機能

ジョブ優先度とスケジューリング

編集
  • CLASS パラメータの活用
  • PRIORITY パラメータの使用

ジョブ出力の管理

編集
  • SYSOUT の設定
  • 出力クラスとフォーム

ジョブ実行時間の制御

編集
  • TIME パラメータの使用
  • ステップレベルでの時間制限

複雑なジョブ構造の例

編集
//COMPLEXJOB JOB (ACCT),'COMPLEX JOB',CLASS=A,MSGCLASS=X
//STEP1    EXEC PGM=PROG1
//DD1      DD   DSN=INPUT.DATA,DISP=SHR
//DD2      DD   DSN=OUTPUT.DATA1,DISP=(NEW,CATLG),
//             SPACE=(CYL,(10,5)),UNIT=SYSDA
//STEP2    EXEC PGM=PROG2,COND=(0,NE,STEP1)
//DD3      DD   DSN=*.STEP1.DD2,DISP=OLD
//DD4      DD   SYSOUT=*
//STEP3    EXEC PGM=PROG3,COND=(0,NE,STEP2)
//DD5      DD   DSN=FINAL.OUTPUT,DISP=(NEW,CATLG),
//             SPACE=(CYL,(20,10)),UNIT=SYSDA

ジョブ構造の最適化

編集
  • 効率的なリソース利用
  • エラー処理の組み込み
  • 並列処理の活用

ジョブドキュメンテーション

編集
  • コメントの効果的な使用
  • ジョブ構造図の作成

この章では、JCLジョブの構造と設計について詳しく解説しています。基本的な概念から複雑なジョブ設計まで、実践的な例を交えて説明しています。ジョブの効率的な構築と管理方法について理解を深められる内容となっています。

データセットの操作

編集

データセットの概念

編集
  • 物理データセットと論理データセット
  • データセット名の規則
  • データセットの属性(DSORG, RECFM, LRECL, BLKSIZE)

データセットの割り当て

編集
  • DD文の基本構文
  • DISP パラメータの使用(NEW, OLD, SHR, MOD)
  • UNIT パラメータとデバイスタイプ

一時データセットの使用

編集
  • &&DSNAME の使用
  • TEMP スペースの活用

世代データグループ(GDG)

編集
  • GDGの概念と利点
  • GDGの定義と使用

区分データセット(PDS)とPDSE

編集
  • PDSの構造と特徴
  • PDSEの利点
  • メンバーの指定方法

VSAMデータセット

編集
  • VSAMの基本概念
  • VSAM データセットの定義と使用

テープデータセットの操作

編集
  • テープデバイスの指定
  • マルチボリュームテープの使用

カタログの利用

編集
  • カタログの概念
  • カタログ済みデータセットの参照

データセットの圧縮と拡張

編集
  • SPACE パラメータの使用
  • 二次割り当て量の指定

データセットのバックアップとリカバリー

編集
  • バックアップDDステートメントの作成
  • リカバリー手順の設計

データセット操作の例

編集
//DSJOB    JOB (ACCT),'DATA SET OPS',CLASS=A,MSGCLASS=X
//STEP1    EXEC PGM=IEFBR14
//DD1      DD   DSN=MY.NEW.DATASET,DISP=(NEW,CATLG,DELETE),
//             SPACE=(CYL,(10,5)),UNIT=SYSDA,
//             DCB=(RECFM=FB,LRECL=80,BLKSIZE=27920)
//STEP2    EXEC PGM=IDCAMS
//SYSPRINT DD   SYSOUT=*
//SYSIN    DD   *
  DEFINE CLUSTER (NAME(MY.VSAM.DATASET) -
                  INDEXED                -
                  RECORDS(1000 500)      -
                  KEYS(8 0)              -
                  VOLUMES(VOLSER))
/*
//STEP3    EXEC PGM=IEBGENER
//SYSUT1   DD   DSN=INPUT.DATASET,DISP=SHR
//SYSUT2   DD   DSN=OUTPUT.DATASET(+1),DISP=(NEW,CATLG,DELETE),
//             SPACE=(CYL,(5,2)),UNIT=SYSDA
//SYSPRINT DD   SYSOUT=*
//SYSIN    DD   DUMMY

データセット操作のベストプラクティス

編集
  • 適切なスペース割り当て
  • 効率的なデータセット編成の選択
  • セキュリティ考慮事項

この章では、JCLにおけるデータセットの操作について詳しく解説しています。様々なタイプのデータセットとその操作方法、効率的な使用方法について実践的な例を交えて説明しています。

条件付き実行

編集

条件コードの概要

編集
  • 条件コードの意味と範囲
  • システム生成の条件コード
  • ユーザー定義の条件コード

COND パラメータの使用

編集
  • JOB文での COND パラメータ
  • EXEC文での COND パラメータ
  • 複数の条件の組み合わせ

IF/THEN/ELSE/ENDIF 文の使用

編集
  • 基本構文
  • 複雑な条件分岐の作成
  • ネストされた IF 文

RETURN コードの設定と使用

編集
  • プログラムでの RETURN コードの設定
  • JCLでの RETURN コードの参照

条件付きステップ実行

編集
  • 前のステップの結果に基づく実行制御
  • エラー処理ステップの条件付き実行

ジョブ全体の条件付き終了

編集
  • COND パラメータを使用したジョブ終了条件の設定
  • CANCEL オプションの使用

データセット存在チェック

編集
  • COND パラメータを使用したデータセット存在チェック
  • IF 文を使用したデータセット存在チェック

条件付き実行の例

編集
//CONDJOB  JOB (ACCT),'CONDITIONAL JOB',CLASS=A,MSGCLASS=X
//STEP1    EXEC PGM=PROG1
//DD1      DD   DSN=INPUT.DATA,DISP=SHR
//STEP2    EXEC PGM=PROG2,COND=(0,NE,STEP1)
//DD2      DD   DSN=*.STEP1.DD1,DISP=SHR
//STEP3    EXEC PGM=PROG3,COND=(4,LT)
//DD3      DD   SYSOUT=*
//STEP4    EXEC PGM=IDCAMS
//SYSPRINT DD   SYSOUT=*
//SYSIN    DD   *
  IF MAXCC LE 4 THEN DO
    PRINT INFILE(DD2)
  ELSE DO
    SET MAXCC = 8
  END IF
/*

条件付き実行のベストプラクティス

編集
  • 適切な条件の選択
  • エラー処理の効果的な実装
  • コードの可読性と保守性の向上

条件付き実行のトラブルシューティング

編集
  • 一般的な問題と解決策
  • デバッグ技法

高度な条件付き実行テクニック

編集
  • 動的な条件の生成
  • 外部パラメータを用いた条件制御

この章では、JCLにおける条件付き実行の方法について詳しく解説しています。条件コードの使用から複雑な条件分岐の作成まで、実践的な例を交えて説明しています。これにより、ジョブの柔軟性と堅牢性を高める方法を学ぶことができます。

プロシージャの使用

編集

プロシージャの概要

編集
  • プロシージャの定義と目的
  • カタログ済みプロシージャとインラインプロシージャの違い

カタログ済みプロシージャの作成

編集
  • プロシージャの構造
  • プロシージャライブラリへの保存
  • JCLLIB 文の使用

プロシージャの呼び出し

編集
  • EXEC PROC= 構文
  • パラメータの受け渡し

プロシージャのオーバーライド

編集
  • DD文のオーバーライド
  • EXEC文のオーバーライド
  • オーバーライドの優先順位

シンボリック パラメータ

編集
  • シンボリック パラメータの定義
  • デフォルト値の設定
  • 呼び出し時のパラメータ指定

ネストされたプロシージャ

編集
  • プロシージャ内でのプロシージャ呼び出し
  • ネストレベルの制限

条件付きプロシージャ実行

編集
  • プロシージャ内での条件分岐
  • 呼び出し側での条件指定

インラインプロシージャ

編集
  • インラインプロシージャの定義
  • インラインプロシージャの利点と制限

プロシージャの例

編集
//MYPROC   PROC A=10,B=20
//STEP1    EXEC PGM=MYPROG
//DD1      DD   DSN=MY.DATASET,DISP=SHR
//DD2      DD   SYSOUT=*
//SYSIN    DD   *
  PARAM1=&A
  PARAM2=&B
/*
// PEND

//TESTJOB  JOB (ACCT),'TEST JOB',CLASS=A,MSGCLASS=X
//STEP1    EXEC PROC=MYPROC,A=15
//STEP1.DD1 DD DSN=OVERRIDE.DATASET,DISP=SHR

プロシージャのベストプラクティス

編集
  • 再利用性の高いプロシージャの設計
  • 適切なデフォルト値の設定
  • ドキュメンテーションの重要性

プロシージャのトラブルシューティング

編集
  • 一般的なエラーと解決策
  • プロシージャのデバッグ技法

プロシージャライブラリの管理

編集
  • ライブラリの編成
  • バージョン管理
  • セキュリティ考慮事項

この章では、JCLプロシージャの作成と使用について詳しく解説しています。プロシージャの基本概念から高度な使用法まで、実践的な例を交えて説明しています。これにより、JCLの再利用性と保守性を向上させる方法を学ぶことができます。

エラー処理とデバッグ

編集

JCLエラーの種類

編集
  • 構文エラー
  • 実行時エラー
  • 論理エラー

エラーメッセージの解読

編集
  • メッセージフォーマット
  • 一般的なエラーコードとその意味
  • MSGCLASS パラメータの重要性

ジョブログの分析

編集
  • JESメッセージ
  • システムメッセージ
  • アプリケーションメッセージ

条件コードを使用したエラー処理

編集
  • COND パラメータの活用
  • IF/THEN/ELSE 構文によるエラーハンドリング

SYSUDUMP と SYSABEND

編集
  • コアダンプの取得
  • ダンプの分析基礎

JCLのデバッグテクニック

編集
  • TYPRUN=SCAN の使用
  • ステップごとの実行と確認
  • IEFBR14 を使用したテスト

データセットのトレース

編集
  • IEBPTPCH ユーティリティの使用
  • IDCAMS PRINT コマンドの活用

プログラムのトレース

編集
  • SYSTSPRT DD 文の使用
  • CEEOPTS DD 文によるLanguage Environment®オプションの設定

JCLデバッグの例

編集
//DEBUGJOB JOB (ACCT),'DEBUG JOB',CLASS=A,MSGCLASS=X
//STEP1    EXEC PGM=PROBLEM,PARM='DEBUG'
//STEPLIB  DD   DSN=MY.LOADLIB,DISP=SHR
//SYSUDUMP DD   SYSOUT=*
//SYSPRINT DD   SYSOUT=*
//DEBUGOUT DD   SYSOUT=*
//SYSIN    DD   *
  DEBUG DATA
/*
//STEP2    EXEC PGM=IDCAMS,COND=(4,LT,STEP1)
//SYSPRINT DD   SYSOUT=*
//SYSIN    DD   *
  PRINT INFILE(STEP1.DEBUGOUT)
/*

エラー防止のベストプラクティス

編集
  • 適切なエラーチェックの実装
  • データセット存在チェックの重要性
  • プログラムのリターンコード活用

トラブルシューティングガイド

編集
  • 一般的な問題と解決策
  • エラー発生時のチェックリスト

高度なデバッグツールとテクニック

編集
  • IBM z/OS デバッガの概要
  • パフォーマンス分析ツールの紹介

この章では、JCLのエラー処理とデバッグ技術について詳しく解説しています。エラーの種類から高度なデバッグ技術まで、実践的な例を交えて説明しています。これにより、JCLジョブの信頼性を向上させ、問題解決能力を高める方法を学ぶことができます。

JCLの最適化とベストプラクティス

編集

JCLパフォーマンスの最適化

編集
  • リソース使用量の最小化
  • I/O 操作の効率化
  • 並列処理の活用

ジョブ構造の最適化

編集
  • ステップの適切な分割と結合
  • データセットの効率的な使用
  • 条件付き実行の戦略的利用

スペース管理の最適化

編集
  • 適切なスペース割り当て
  • 二次割り当ての効果的な使用
  • 圧縮技術の活用

セキュリティのベストプラクティス

編集
  • 最小権限の原則の適用
  • センシティブデータの保護
  • 監査とロギングの実装

JCLの標準化

編集
  • 命名規則の確立
  • コメントの効果的な使用
  • 一貫したフォーマットの維持

再利用可能なJCLの設計

編集
  • モジュール化の重要性
  • パラメータ化されたJCLの作成
  • プロシージャの効果的な利用

バージョン管理とドキュメンテーション

編集
  • JCLのバージョン管理手法
  • 変更履歴の維持
  • 包括的なドキュメンテーションの作成

テストと品質保証

編集
  • テスト環境の設定
  • 回帰テストの実施
  • コードレビューの重要性

パフォーマンスモニタリングとチューニング

編集
  • SMFデータの活用
  • ボトルネックの特定と解消
  • 継続的な改善プロセス

災害復旧とビジネス継続性

編集
  • バックアップとリカバリー戦略
  • 代替サイトでの実行計画
  • クリティカルジョブの優先順位付け

最適化されたJCLの例

編集
//OPTJOB   JOB (ACCT),'OPTIMIZED JOB',CLASS=A,MSGCLASS=X
//JOBLIB   DD   DSN=PROD.LOADLIB,DISP=SHR
//STEP1    EXEC PGM=SORT
//SORTIN   DD   DSN=INPUT.DATA,DISP=SHR
//SORTOUT  DD   DSN=&&TEMP1,DISP=(NEW,PASS),
//             SPACE=(CYL,(10,5),RLSE),UNIT=SYSDA
//SYSIN    DD   *
  SORT FIELDS=(1,10,CH,A)
/*
//STEP2    EXEC PGM=MYPROG,COND=(0,LT,STEP1)
//INPUT    DD   DSN=&&TEMP1,DISP=(OLD,DELETE)
//OUTPUT   DD   DSN=FINAL.DATA,DISP=(NEW,CATLG,DELETE),
//             SPACE=(CYL,(20,10),RLSE),UNIT=SYSDA
//SYSPRINT DD   SYSOUT=*

継続的な改善と学習

編集
  • 新しいJCL機能の把握
  • ベストプラクティスの定期的な見直し
  • チーム内でのナレッジ共有

この章では、JCLの最適化とベストプラクティスについて詳しく解説しています。パフォーマンス、セキュリティ、保守性など、様々な観点からJCLを改善する方法を提示しています。これにより、より効率的で堅牢なJCLジョブを設計・実装する能力を養うことができます。

附録

編集

よくある質問(FAQ)

編集
  1. JCLの基本的な構造は何ですか?
  2. JOB文とEXEC文の違いは何ですか?
  3. DDステートメントの主な目的は何ですか?
  4. JCLでよく使用される特殊文字の意味は?
  5. カタログ済みプロシージャとインラインプロシージャの違いは?
  6. JCLでの条件付き実行はどのように行いますか?
  7. ジョブログはどこで確認できますか?
  8. JCLでのデータセット名の最大長は?
  9. JCLでのコメントの書き方は?
  10. SYSOUT=*の意味は何ですか?

一般的なエラーとその解決方法

編集
  1. JCL ERROR
    • 原因:構文エラーや無効なパラメータ
    • 解決:エラーメッセージを確認し、該当行を修正
  2. ABEND (Abnormal End)
    • 原因:プログラムの異常終了
    • 解決:ABENDコードを確認し、対応するエラーを修正
  3. 条件コード > 4
    • 原因:プログラムの警告や軽微なエラー
    • 解決:プログラムの出力を確認し、必要に応じて修正
  4. データセットが見つからない
    • 原因:不正なデータセット名や存在しないデータセット
    • 解決:データセット名とディスポジションを確認
  5. スペース不足
    • 原因:割り当てられたスペースが不十分
    • 解決:SPACE パラメータを調整

トラブルシューティングのステップバイステップガイド

編集
  1. エラーメッセージの確認
  2. ジョブログの分析
  3. JCLの構文チェック
  4. データセットの存在と権限の確認
  5. プログラムの戻りコードの確認
  6. システムリソースの確認
  7. 必要に応じてデバッグツールの使用
  8. 問題が解決しない場合はシステム管理者に相談

JCLデバッグのためのチェックリスト

編集
  • □ JCLの構文は正しいか
  • □ すべての必要なDDステートメントが含まれているか
  • □ データセット名とディスポジションは正しいか
  • □ プログラム名は正しく指定されているか
  • □ 必要なリソースへのアクセス権限があるか
  • □ 条件付き実行の条件は適切か
  • □ スペース割り当ては十分か
  • □ シンボリックパラメータは正しく解決されているか

役立つJCLユーティリティとツール

編集
  1. IEBGENER:データセットのコピーや変換
  2. IDCAMS:VSAM データセットの管理
  3. IEHLIST:データセットやボリューム情報の表示
  4. SORT:データのソートとマージ
  5. IKJEFT01:TSO コマンドの実行

JCL関連の情報源

編集
  • IBM z/OS JCL リファレンス
  • IBM Redbooks
  • z/OS フォーラムとコミュニティ
  • 専門的なJCL トレーニングコース

この章では、JCLに関するよくある質問への回答や、一般的な問題のトラブルシューティング方法を提供しています。また、デバッグのためのチェックリストや役立つツールの紹介など、実践的な情報も含まれています。

外部リンク

編集
 
Wikipedia
ウィキペディアJCLの記事があります。