メニューボタン
IBM i お役立ち情報2026.02.25

IBM i 基礎理解からRPG開発までの学習ステップ
- 第2回:アプリケーション動作の基礎理解 -

はじめに

松田:「前回は操作運用のための基礎として、ACSのインストールや、ユーザー作成、サブシステム、HELP機能をご紹介しましたが、今回はアプリケーションを作る上での基礎についてお話しましょうか。基礎知識を身につけることで、IBM i 環境におけるアプリケーション開発をスムーズに進めることができます。」

渡邊:「そうですね。オブジェクトやライブラリーは、まず欠かせない内容でしたね。」

松田:「はい。IBM i に注目したときにライブラリーという大きな枠組みの中にオブジェクト、OUTQ、ソース物理ファイルがあります。また、ライブラリーリストについてお話したいと思います。」

渡邊:「Windows のエクスプローラーでファイル一覧やファイルの種類を確認するのと同様のことは、IBM i において 『WRKOBJ』 コマンドで実現できるのでしょうか?」

松田:「はい、できます。『WRKOBJ』コマンドでも調べたいライブラリーを検索するとタイプや属性についての情報が表示されますね。以下、5250エミュレーター画面の通りです。」

松田:「例えば、オブジェクトSAMPLE1について、WRKOBJで調べていくとタイプは【*LIB】と表示されるためライブラリーだと特定できます。属性は【PROD】と表示されています。」

渡邊:「このPRODとはなんでしょうか。」

松田:「これはライブラリーが、本番環境か開発環境かを区別するための属性値です。PRODであれば本番環境、TESTであれば開発環境で使うライブラリーとして区別して使い分けができます。」

渡邊:「どのような使い分けをするのか、いまいちピンときません。」

松田:「開発中のプログラムをテストしているときに、間違って本番環境のデータを書き換え、更新してしまうと大変な事になりますよね。プログラム開発時には、デバッグモードを使って、TEST属性のライブラリーのデータは更新可、PROD属性のライブラリーのデータは更新不可にする使い分けができます。」

渡邊:「それなら安心してプログラムの開発ができますね。本番データに影響を与えずテストできるデバッグモードという仕組みもIBM i には備わっているのですね。」

松田:「はい、開発のお話になるので、次回以降のRPG開発の際にあらためて確認し、ここではオブジェクトにもどります。ライブラリーは*LIBですが、タイプの種類はそのオブジェクトによって異なります。タイプや属性を踏まえ、今回の環境情報をイメージ図にまとめました。このイメージ図で注目すべきポイントはこれまで登場したライブラリーやオブジェクトがどのような関係なのか全体像を把握することです。ほかにも細かな情報が載っていますが、ここでは全体像だけ掴めれば問題ありません。図に記載されている詳細な情報は、次回以降で触れていきます。」

IBM i 環境イメージ図

ライブラリーとオブジェクト

松田:「ライブラリーは、プログラムやデータベース・ファイル等のオブジェクトを登録する登録簿のことですね。」

渡邊:「Windowsでいうフォルダのようなものですね。」

松田:「自分用のアプリケーション環境を確保するためには、専用のライブラリー(ユーザーライブラリー)を作成した方が良いです。」

渡邊:「個人別に作成すると、他の人の邪魔をせずにIBM i を使用できるので安心できました。たしかIBM i 上では、ライブラリーの中にライブラリーは作れなかったのですよね。」

松田:「そうです。ライブラリーの中に階層的にライブラリーを作ることはできません。ただし、QSYSというシステム提供のライブラリーは特殊でユーザーが作成したライブラリーはすべてこのQSYSに保管されることになります。ですが、実際のユーザー操作ではQSYSから操作することはありません。また、目的別だと特定業務のソースを入れておくライブラリーや、プログラムを入れておくライブラリーを作るケースが多いですね。部署ごとに作られているお客様もいらっしゃいます。」

渡邊:「オブジェクトとはなんでしょうか?」

松田:「オブジェクトは、ライブラリー、データベースファイルやプログラム等、操作の対象となる総称です。」

渡邊:「Windowsでいうとファイルやフォルダですね。」

松田:「そうですね!まずは、ライブラリーをつくってみましょう。コマンドとしては『CRTLIB』です。コマンド入力行で、『CRTLIB』と入力してF4キーを押してプロンプトを開いて下さい。」

渡邊:「IBM i では、コマンドを入力してプロンプトを開くのが基本でしたね。」

松田:「そうです。パラメーターを含めて書いても良いですが、プロンプトを開いてコマンドのパラメーターを指定していくのが基本です。コマンドによって、パラメーターの内容も変わるので毎回覚えていられないですよね。ぜひF4キーを積極的に活用しましょう!ライブラリーに『SAMPLE1』、テキストに『テストライブラリー』と指定して下さい。」

渡邊:「はい、テキストの内容は全角ですね。全角文字(2バイト文字)については前後にShiftコードが自動で入るのでしたね。」

松田:「そうです。2バイト文字の始まりと終わりにShiftコードが入ります。Ctrl+F1を押すと表示され、もう一度押すと解除です。始まりはシフトアウト、終わりはシフトインと呼びます。よく使う機会でいえば、画面設計の際が多いかと思います。入力が終わったら、Enterで実行せず、F12で取り消して、コマンド入力行でF9で実行するコマンドを再表示して確認してから実行します。」

渡邊:「なぜそのままEnterで実行しないのでしょうか?」

松田:「パラメーターに入力した値を含めてこれから実行するコマンドの最終確認をするためです。」

渡邊:「なぜ最終確認が必要なのでしょうか?」

松田:「今回のケースではシンプルなコマンドですが、複雑なコマンドになると、パラメーターの誤りが予期しない結果をもたらす可能性があります。よって、自身が入力したパラメーターの値がきちんとコマンドとして認識されているかを確認する必要があるためです。私も入社時の研修で一番最初に習いました。」

<シフトアウト、シフトインの記号入り>
<シフトアウト、シフトインの記号なし>
<F9でコマンドを再表示する様子>

渡邊:「F4でパラメーターを出して入力、F12で取り消して、F9で再表示して確認って、最初は慣れませんでしたが、コマンドの確認だけでなく、書き方含めて勉強になりますね。実行して作成されました。」

松田:「そうなんです。F4キーでパラメーターを埋めた状態のままF9で再表示すると、自分の入力したパラメーター値を含めて表示してくれるのは非常に魅力的な機能ですよね。これで空のライブラリーが出来上がりました。ライブラリーには、IBM提供のライブラリーもあります。コマンド『WRKLIB』で確認できますね。」

渡邊:「そうでしたね。たしか、IBM提供ライブラリーは主にQ、#、SYSが頭に付くものでしたよね。」

松田:「そうです!『WRKOBJ』 コマンドの出力において、システムがあらかじめ作成したオブジェクトを迂闊に変更・削除するべきではありません。基本的には、自身が作成したライブラリーの中身だけを触るようにしましょう。次はOUTQのお話をしたいと思います。」

 ポイント 
  • ライブラリーはWindowsのフォルダやファイルのようなもの。ライブラリーの中にライブラリーは作れない(ただし、ユーザーライブラリーはすべてQSYSに保管される)
  • オブジェクトは、コマンド操作の対象となる単位でライブラリー、プログラムやファイルのこと
  • 入力したコマンドはすぐに実行せず、F12で取り消し、コマンド入力行でF9でコマンドを再表示して確認

OUTQ

松田:「これまで、コマンドの実行結果はエミュレーター画面そのものに出力されていましたが、渡邊さんはその他の出力方法には何があると思いますか。」

渡邊:「印刷出力でしょうか。」

松田:「その通りです!例えば、システム利用者を表示するためのコマンド『WRKACTJOB』を実行してみます。」

渡邊:「これは通常の画面出力ですね。同じ結果を印刷出力するには、『WRKACTJOB』 コマンドのパラメーター 【OUTPUT】に『*PRINT』 を指定すれば良いのですよね。」

松田:「そうです。実際に出力された結果は『WRKJOB』の4番【スプール・ファイルの処理】で確認できます。」

渡邊:「実行した後、中身を確認するときちんと想定通りの結果が出力されていますね。このように出力したスプールファイルをためておく箱が出力待ち行列(OUTQ)でしたよね。」

松田:「まさにそうです!OUTQはシステムが定義しているオブジェクトで、出力されたファイル(結果)が処理され、プリンターに送信されるのを待機する領域です。」

渡邊:「1つの決まったOUTQに保管しておけば、いつでも確認ができますし、ジョブの変更を行えばスプールファイル出力の度に自動的に指定したOUTQに溜められるのもいいですよね。
ちなみに、Windowsだとプリンターのスプール処理はOSが自動的に行うのでこのあたりは意識しないですね。さらに、Windows だと印刷を終えるとスプールは消滅しますが、 IBM i では印刷後もスプールファイルとして残るので何度でも印刷ができるのも特徴です。」

松田:「そうですよね。では、まずはOUTQを作ってみましょう。今回作成した、ライブラリーSAMPLE1の中に作りましょう。」

渡邊:「コマンドは『CRTOUTQ』でしたよね、F4キーでプロンプトを出しました。」

松田:「OUTQの欄に名前を『TSTOUTQ』で指定して、ライブラリーを『SAMPLE1』として下さい。」

渡邊:「はい。作成できました。【オブジェクトTSTOUTQタイプ*OUTQがライブラリーSAMPLE1に作成された】と出ています。」

松田:「念のため、出来上がったかどうかをPDMの画面でも確認しましょう。ちなみに、PDMとはProgramming Development Managerの略でライブラリー、オブジェクト、メンバー(ソースコード)を一覧表示・管理し、コンパイルや修正などの処理をメニュー形式で実行できる統合開発ツール(ADTS)の一部です。メッセージより判断すればいいのでは?と思うかもしれませんが、実作業の際にはメッセージとともに環境自体を確認することも重要なポイントの1つですね。」

渡邊:「そうですね。Windows環境での操作も同様にログと環境確認は必須でした。PDMは、Windowsでいうと高機能なエクスプローラーのイメージですね。」

松田:「また、作成したOUTQをユーザープロファイルに紐づけることもできます。紐づけることで、そのユーザーでの作業時に出力したスプールファイルは紐づけたOUTQに自動的に保管される運用となるため便利です。」

渡邊:「コマンドは『CHGUSRPRF』でしたね。『CHGUSRPRF』でF4キーを押し、OUTQパラメーターに『SAMPLE1/TSTOUTQ』を入力します。」

松田:「ユーザーMINAに紐づくOUTQは【SAMPLE1/TSTOUTQ】になりましたね。『WRKJOB』の2番【ジョブ定義属性表示】で確認すると、OUTQが変更されていることが分かります。」

渡邊:「試しにユーザーMINAでログインし、スプールファイルを吐き出してみましょう。WRKSYSSTS OUTPUT(*PRINT)の実行で出力されたスプールファイルを確認したら、きちんとTSTOUTQに中身が保管されています。」

松田:「スプールファイルを頻繁に使う例として、IBM i の操作におけるジョブログの出力が挙げられます。スプールファイルに落とし込むと、エラーチェックなどの際に実行したコマンドとその際に発生したエラーや警告などのメッセージがジョブログに保管されます。これを印刷出力するには 『DSPJOBLOG * *PRINT』コマンドを利用します。ちなみに、 DSPJOBLOGの後のアスタリスクは現在のジョブログすべてを印刷する際に入力します。実際の用途としては、エラーが起きた際などの確認です。」

渡邊:「ジョブログの設定は一時的にも恒久的にもできますよね。一時的な場合は、『CHGJOB OUTQ(任意のOUTQ名)』で変更できます。今回のケースなら、『CHGJOB OUTQ(TSTOUTQ)』ですね。恒久的に使用するOUTQを設定するためには、ユーザープロファイルに紐づければいいですね。ユーザープロファイルに紐づけるときのコマンドは、『CHGUSRPRF USRPRF(ユーザープロファイル名) OUTQ(ライブラリー/OUTQ名)』ですね。今回だと、『CHGUSRPRF USRPRF(MINA) OUTQ(TSTOUTQ)』となり、MINAというユーザープロファイルにおいて使用するOUTQはライブラリーSAMPLE1のTSTOUTQと設定することになりますね。」

松田:「一度ユーザープロファイルの設定をしておけば、対象ユーザーでジョブを実行した際に設定が反映されます。」

渡邊:「ただ、スプールファイルって定期的に整理しないとOUTQの中身が溜まってしまいますよね...どうやって整理すればいいのやら...」

松田:「スプールファイルの整理ならこちらのサイトをぜひ参考にしてみてください。
https://www.e-bellnet.com/category/technology/1310/1310-297.html

渡邊:「こちらには複数の方法が記載されているので環境や状況に合わせて選択できますね!」

 ポイント 
  • OUTQは出力待ち行列、OUTQ を指定した状態で JOBLOG を出力すると印刷用のスプールやコマンドの実行時に発生したエラーや警告などのメッセージが入る

ソース物理ファイル

松田:「プログラムを作成するにはソース物理ファイルが必要となります。」

渡邊:「私は最初、この辺りの理解が難しかったですね。ソース物理ファイルを作り、その下にメンバーとして、実際のソースを作るのですよね。」

松田:「そうですね。ソース物理ファイルはソース・プログラムをまとめる箱、メンバーは一つ一つのソース・プログラムなので、箱の中身と覚えればわかりやすいですね。中身は箱なしでは存在できません。」

渡邊:「Windowsのファイルとは少々異なりますね。」

松田:「そうですね。また、ソース物理ファイルには以下のような物があります。必ずしもこの名前で作らなければいけないということではないですが、ソースメンバーの種類別に作っておくと後々便利です。では、物理ファイルを作るためにまず箱を準備する必要があるので箱となるQDDSSRCを作りましょう。」

各ソースファイルのまとめ
名前 用途
QCLSRC CLプログラム用のソース
QRPGSRC RPGプログラム用のソース
QRPGLESRC RPGLEプログラム用のソース
QDDSSRC 物理ファイル用のソース
QDSPSRC 画面ファイル用のソース
QPRTSRC 帳票ファイル用のソース

渡邊:「はい。コマンドは『CRTSRCPF』でしたね。F4キーを押すとパラメーターがいくつかありますね。」

松田:「ファイル名は『QDDSSRC』、ライブラリーは『SAMPLE1』ですね、レコード長は92のままで良いですが、RPGLEの場合は最低112桁の指定が必要なので『112』に変更です。なぜ最低桁数が112かというと、CVTRPGSRCコマンドを実行したときに、ILE RPGソースが112桁未満の場合、エラー・メッセージRNS9362が表示され、行のコメント・エリアが除外されて変換されるためです。また、ユーザ指定のDBCSデータは『*YES』にする必要があります。テキストは説明を記載します。」

渡邊:「DBCSの所は、*YESにしないと漢字入力ができないのでしたよね。」

松田:「そうです。DBCSとは1 つの文字を 2 バイトで表す文字セットの意味になります。日本語、中国語、韓国語などの2バイトの文字を含むファイルや2バイト文字を処理するファイルを使うときはDBCS=*YESが必要になります。」

渡邊:「作成できました。PDMで確認しましたが、きちんとソースファイルが作成されていますね。」

 ポイント 
  • ソース物理ファイルは、ソースを入れるためのファイル。
  • ソースはソースメンバーと呼ぶ

ライブラリー・リスト

松田:「開発をより効率的に行う上で重要になるのがライブラリー・リストです。ライブラリー・リストは、そのジョブで使用するリストで、OSがそのジョブでコマンドを実行する時に、上から順に探索します。例えば、RPGソース(RPG言語で書かれたソース・プログラムのこと)をコンパイルする時、RPGプログラム内で参照する物理ファイル等は『CRTBNDRPG』 などのコンパイルコマンドにおいて、RPG ソースのライブラリーに『*LIBL』(ライブラリー・リスト)と指定した場合にライブラリー・リストを使ってOSが検索し、コンパイルします。」

渡邊:「Windowsでいうパスを張るということですね。Windowsでは環境変数で設定しますが、一度設定すれば、削除しない限り設定されたままですが、IBM i ではサインオフすると消えちゃうんですよね。」

松田:「確かに通常ライブラリー・リストはジョブに対して設定するので、サインオフすると消えてしまいます。ですが、実はIBM i でもライブラリー・リストの設定を残す方法があるんです。
任意のユーザーライブラリーを初期ライブラリー・リストとしてジョブ記述内で登録しておけば、登録済みのジョブ記述を初期値に設定しているユーザーのログインにおいて、次回以降も引き続き記憶されます。コマンドとしては、『CHGJOBD JOBD(任意のライブラリー/任意のジョブ記述) 』となり、以下の画像では『CHGJOBD JOBD(QSYS/QSYSWRK)』です。【初期ライブラリー・リスト】のパラメーターはF10打鍵で表示可能です。」

渡邊:「一度設定すれば残ってくれるのですね。それは便利ですね...。システム全体でよく使うライブラリーがあれば、システム値QUSRLIBLを通じて常時ライブラリー・リストとして登録しておくことも1つの方法ですね。これは全てのユーザー、全てのジョブに適用されますね。」

松田:「まさにその通りです!設定情報を残すという観点でいえば、いくつか方法がありますね!!」

渡邊:「システム値は確かこのように変えるのでしたよね。コマンド『WRKSYSVAL QUSRLIBL』 において2番【変更】でライブラリーを追加して実行します。」

松田:「そうです。ユーザーのライブラリー・リストは変更後、即時に反映されるので再起動などは不要です。多くのシステム値においては、変更を反映するために再起動が必要なケースがあるので要注意ですね。」

渡邊:「ちなみに、探索順序の図に表現されているQSYSやQSYS2、QPDAなどのライブラリーはリストされていないようですがどうしてですか?」

松田:「このシステム値は、あくまでもライブラリー・リストにおけるユーザー部分を表しているので探索順序の図でいうところのQGPL、QTEMPが該当します。すべてのライブラリー・リストを表示するには、コマンド『DSPLIBL』から確認可能です。」

 ポイント 
  • ライブラリー・リストは、コマンド実行する時にOSが検索するためのリスト
    サインオンしたら、忘れず設定しよう

次回予告

松田:「次回は、データベースについて、お話したいと思います。」

渡邊:「物理ファイルや論理ファイルですね。ソースを作って、コンパイルですね。」

松田:「はい。物理ファイルや論理ファイルは、プログラム開発を行う前に必ず知っておく必要があります。」

渡邊:「Windowsのデータベースの用語とは異なるので、比較してお話したいと思います。」


渡邊 隆
ベル・データ株式会社 アプリケーションマネージメントサービス本部 AMSデジタルイノベーション部

ネットワーク、オープン、セキュリティ、DX関連のプリセールス、構築、サポートを経て、現在はAMSデジタルイノベーション部に所属。工場DXソリューションを担当しながら、初挑戦のIBM i に格闘中。休日は、クラッシックピアノの練習や仲間との弾き合い会を楽しんでいます。

松田 三奈
ベル・データ株式会社 アプリケーションマネージメントサービス本部 AMSデジタルイノベーション部

新卒よりインフラエンジニアとしてPowerサーバーのリプレイスに従事し、現在はAMSデジタルイノベーション部に所属。休日は、カフェ巡りや旅行など天候に関わらず外に出てアクティブに活動することが好きです。

あわせて読みたい記事

PAGE TOP