AS400 / IBM i では、プログラム、ファイル、ジョブ記述、出力キューなど多くのものがオブジェクトとして管理されます。そして、それらを入れておく場所がライブラリです。Windowsのフォルダに近い説明をされることもありますが、IBM iではライブラリリストの順序が実行結果に大きく影響します。
ライブラリやオブジェクトを学ぶ前にシステム全体の役割を整理したい場合は、AS400とは何かを初心者向けに解説した記事 を先に読むと理解しやすくなります。
ライブラリとオブジェクトの基本

| 用語 | 意味 | 保守で見ること |
|---|---|---|
| ライブラリ | オブジェクトを管理する入れ物 | 本番、検証、開発、退避の区別 |
| オブジェクト | プログラム、ファイル、キューなどの管理単位 | 種類、所有者、権限、更新日時 |
| *LIBL | ライブラリリストから探す指定 | 同名オブジェクトの解決順序 |
| QTEMP | ジョブごとの一時ライブラリ | 一時ファイル、作業用データ |
| QGPL | 共通利用されやすいライブラリ | 安易に置かれた共有オブジェクト |
*LIBLが危ない理由
CALL PGM(MYPGM) のようにライブラリを省略すると、IBM iはライブラリリストの順にオブジェクトを探します。本番と検証でライブラリリストの順序が違うと、同じCLやRPGでも別のプログラムやファイルを参照することがあります。
DSPLIBL
上は現在スレッドのライブラリリストを表示するコマンドです。別の稼働ジョブは対象を指定してWRKJOB等で確認します。CALL PGM(MYPGM) と CALL PGM(PRODLIB/MYPGM) は名前解決の違いを示す例であり、参照専用の確認コマンドではありません。実行すると業務データ更新などが起こり得るため、本番で試さないでください。
確認コマンド
| コマンド | 確認内容 | 使う場面 |
|---|---|---|
| DSPLIBL | 現在スレッドのライブラリリスト | *LIBL参照の解決順を見る |
| WRKOBJ | オブジェクト一覧 | 同名オブジェクトを探す |
| DSPOBJD | オブジェクト詳細 | 作成日時、更新日時、所有者、タイプ |
| WRKLIB | ライブラリ一覧 | 環境別ライブラリの確認 |
| WRKOBJLCK | オブジェクトロック | 更新待ち、削除不可、バッチ停止時 |
保守でよくある事故
- 検証ライブラリを見ているつもりで本番ライブラリを参照する
- 同名プログラムが複数あり、古い方が先に解決される
- QTEMP(ジョブ専用の一時ライブラリ)に作った一時ファイルがジョブ終了で消える
- QGPLに置かれた共通オブジェクトを誰が使っているか分からない
- 権限不足をプログラム不具合と勘違いする
RPG・CL・ジョブログとの関係
RPGでファイルを開けない、CLでCALL先が見つからない、バッチで権限エラーになる場合、ライブラリとオブジェクトの確認が必要です。調査時は CLのライブラリリスト確認、RPGのファイル確認、ジョブログ確認 をセットで見ると早く切り分けできます。
DSPLIBLで確認すること

| 確認 | 意味 |
|---|---|
| ライブラリの順番 | *LIBL指定時にどのライブラリが優先されるかを見る |
| 本番ライブラリ | 本番作業で正しい環境を見ているか確認する |
| 検証・開発ライブラリ | テスト中に本番を参照していないか見る |
| QTEMP | 一時オブジェクトや中間ファイルの影響を考える |
| QGPLなど共通ライブラリ | 共通オブジェクトの参照を確認する |
CPF2105や見つからない系の切り分け
CPF2105のような見つからない系のメッセージでは、オブジェクト名だけでなく、ライブラリ、ライブラリリスト、オブジェクトタイプ、権限を確認します。*LIBL指定で実行している場合は、ジョブごとのライブラリリストが原因になることがあります。
ファイル未検出などのメッセージから調べる場合は、AS400メッセージID・エラーコード索引 を確認してください。
調査メモに残す内容
- 対象オブジェクト名、ライブラリ名、オブジェクトタイプ
- DSPOBJDで見た所有者、作成日、変更日
- WRKOBJで見えた同名オブジェクトの有無
- 実行ジョブ、実行ユーザー、ライブラリリスト
- 直前の変更、リストア、コンパイル、ライブラリ切替
AS400のオブジェクト調査は、名前だけを見ると迷いやすくなります。DSPOBJD、WRKOBJ、DSPLIBL、ジョブログを組み合わせて、どの環境の何を見ているかをそろえることが近道です。
対話処理だけ成功する時のライブラリ確認例
同じプログラムが対話処理では動き、バッチでは別のファイルを参照する場合、オブジェクト名だけでなくライブラリリストの順序を比較します。
| 確認点 | 確認内容 | 判断 |
|---|---|---|
| オブジェクト | 名前、種類、所在ライブラリを確認する | 同名の*FILEや*PGMを取り違えていないかを見る |
| ライブラリリスト | 対話ジョブとバッチジョブの現在ライブラリとユーザー部を比べる | 先に見つかる同名オブジェクトが違わないか判断する |
| 参照方法 | 一時確認ではライブラリ修飾名で対象を明確にする | 恒久対応はジョブ記述と配置ルールを見直す |
原因調査のためにライブラリリストを変更する場合は、変更前の順序を記録し、影響するジョブを限定します。確認できた事実と恒久対応を分けて残すと、別環境での再発を防ぎやすくなります。

