開発者のためのIBM i インフラ入門 - 第3回:システム値 -
はじめに
松田:「前回は、インフラ入門第二弾として文字コード、CCSID、ホスト・コード・ページのお話をしました。CCSIDの中でQCCSIDのお話をしましたね。QCCSIDはシステム値の一つです。今回は、システム値についてお話ししたいと思います。」
柳:「システム値は、開発者も知っておくべきだと思います。前回お話しした文字化けだけでなく、日付関連での不具合、アクセス権限エラー等のトラブル時に役立つと思いますよ。」
渡邊:「なるほど、発生した時に焦らないように学習したいと思います。よろしくお願いいたします。」
システム値とは何か
柳:「松田さん、システム値の定義を教えてください。」
松田:「システム値とは、IBM iのシステム全体の挙動、操作環境、およびセキュリティーなどのデフォルト設定を決定するシステム設定情報のことです。渡邊さん、こちらの内容を踏まえ、RPG開発をしてゆく中でシステム値に関連することで、意識することはありますか?」
渡邊:「そうですね。システム日付でしょうか。プログラムの中で使用した記憶があります。」
松田:「確かにそうですね。EVAL命令と%DATE関数で定義しましたね。」
柳:「なるほど、開発者にとっては身近ですよね。これ以外にも様々なシステム値があるんですよ。そういえば、松田さんはIBM i RiSING2025でシステム値について記事作成されていましたよね。」
松田:「そうですね。当時の記事については、こちらをご参照ください。今回はその時の経験もふまえてお話ししていきたいと思います。」
柳:「では松田さん、システム値の役割を話していただけますか?」
松田:「システム値は、IBM i で使用される設定情報の一部で、システム動作やユーザー環境に大きく影響を与え、起動時に読み込まれます。システム値は、カテゴリー別に役割を持っていて、大きくは17のカテゴリーに分かれていますよ。」
| カテゴリー | 内容 | システム値の例 |
|---|---|---|
| ①監査 | 監査値を変更します。 | QAUDCTL、QAUDLVL |
| ②日時 | 日付、時刻、および時間帯情報を変更します | QDATETIME、QCENTURY |
| ③装置 | 装置自動構成および回復値を変更します | QAUTOCFG, QDEVNAMING |
| ④インターナショナル | ロケールの設定と数字、日付、および時刻の形式を変更します | QDATFMT、QCCSID、QLOCALE |
| ⑤ジョブ | システム・レベルのジョブ限界およびデフォルトのジョブのプロパティーを変更します | QMAXJOB、QACTJOB |
| ⑥ライブラリー・リスト | デフォルトのライブラリー・リストを変更します | QSYSLIBL、QUSRLIBL |
| ⑦メッセージおよびサービス | メッセージ、ロギング、およびサービス情報を変更します | QHSTLOGSIZ、QCFGMSGQ |
| ⑧パスワード | パスワードの有効期限および妥当性検査を変更します | QPWDLVL、QPWDCHGBLK |
| ⑨パフォーマンス | 処理、メモリー・プール、通信、およびデータベースのパフォーマンス値を変更します | QMCHPOOL、QTHDRSCADJ |
| ⑩電源制御 | 電源機構値を変更します | QUPSDLYTIM、QUPSMSGQ |
| ⑪印刷中 | 基本印刷値およびプリンター出力の形式を変更します | QPRTDEV、QPRTKEYFMT、QPRTTXT |
| ⑫再始動 | 初期セットアップ値および再始動に影響する設定を変更します | QIPLTYPE、QPWRDWNLMT、QIPLSTS |
| ⑬保管および復元 | 保管および復元値を変更します | QVFYOBJRST、QALWOBJRST |
| ⑭セキュリティー | オブジェクト、ユーザー、およびシステム・セキュリティー値を変更します | QSECURITY、QSSLCSL |
| ⑮サインオン | サインオン値を変更します | QMAXSIGN、QMAXSGNACN、QLMTSECOFR |
| ⑯記憶域 | システム記憶域の値を変更します | QSTGLOWLMT、QSTLOWACN、QRCLSPLSTG |
| ⑰システムおよびユーザーのデフォルト | システム識別情報の表示およびユーザーのデフォルト値を変更します | QCONSOLE、QPRCMLTTSK |
渡邊:「カテゴリーがあるのですね。例えばこの中でもよく使うカテゴリーなどはあるのですか?」
松田:「日付、セキュリティー、ライブラリー・リスト等ですね。」
柳:「システム値は、コマンド【WRKSYSVAL】あるいは【DSPSYSVAL】で確認ができます。一覧を確認したい場合は【WRKSYSVAL】が適切なので、まずはこちらを実行してみましょう。」
渡邊:「このように一覧で確認ができるのですね。」
柳:「はい、ただ数がとても多いんですよね。確認したいシステム値が不明だと、探すのが大変になりますよね。システム値を確認するもう一つの確認方法として IBM Navigator for iというIBM提供のWebインターフェースがあります。こちらのツールを使用すると、松田さんが説明したような、カテゴリー別でシステム値を確認することができるんです。Navigator for iへのアクセス方法についてはこちらが参考になるかと思います。『構成およびサービス』→『システム値』で確認ができますよ。」
渡邊:「本当ですね、これなら、確認したいシステム値を調べるのが容易になりますね。」
柳:「そうですね。システム値の確認は、WRKSYSVALでもNavigator for i の機能でも確認ができますので、必要に応じて使い分けしてもいいかもしれません。
すべてのシステム値を控えておきたい場合は、【WRKSYSVAL OUTPUT(*PRINT)】にて出力しておくと、有事の際に確認ができるかと思います。」
開発者が意識しておいたほうがいい主要システム値
柳:「システム値は実際にかなり数があるので、まずは開発者が意識しておいた方がいいシステム値の解説をしたいと思います。」
松田:「ありがとうございます。個人的にはQSECURITY 、QUSRLIBL、QSYSLIBL、QCCSID、QMAXSIGNはマストかなと思います。」
柳:「ではそのあたりから説明していきましょう。」
QSECURITY:システム全体のセキュリティー・レベル
松田:「この設定値は説明の通り、システム環境に大きく影響します。むやみやたらに変更する設定値ではないですよね。」
柳:「そうですね。QSECURITYはシステムのセキュリティー管理の厳密さ(保護レベル)を指定するシステム値になりますので、お客様のセキュリティーポリシーに合わせて設定していただくことになります。10~50までのレベルがありますが、一番セキュリティー・レベルが低い10(パスワード不要)は、以前より使用不可になっています。また、次のレベルである20はパスワードのみでの保護になりますが、この値も指定ができるのはV7R4までとなり、V7R5からは指定できません。実質選択可能なのは30/40/50になります。」
渡邊:「確か設定変更する際にIPLが必要なんですよね。」
柳:「はい、QSECURITYを変更した場合は、その値を反映させるためにIPL(システムの再起動)が必要です。IPLについての詳細はこちらにも載っているので見てみてください。簡単に説明すると、セキュリティー・レベル:30以上だと1つ1つのオブジェクトごとに読み、書きなどのアクセス管理が必要です。
20だと作成したユーザープロファイルのユーザークラスに関わらず特殊権限「*ALLOBJ」が付与されてしまうため、どんなユーザーでもどのオブジェクトでも操作できてしまうのでセキュリティー面ではあまりよろしくない設定です。30以上の場合、機密保護担当者(ユーザー・クラス:*SECOFR)以外はデフォルトで【*ALLOBJ】を持たないため、個々のオブジェクト権限が必要になります。」
渡邊:「そうなのですね。ちなみに・・・ユーザークラスとは何ですか?」
松田:「ユーザークラスは、簡単に言うとそのユーザーの役割を指定するものになります。例えばそのユーザーがシステム管理者であれば*SECOFR、一般ユーザーであれば*USERなど。役割は全部で5つあります。詳細はこちらで。
そして、その役割によって標準で与えられる権限が特殊権限というものになります。*ALLOBJは、特殊権限の1つになります。
特殊権限*ALLOBJが付与されるというのはそのユーザープロファイルがすべてのオブジェクトや資源に対して無制限でアクセス・操作ができること指します。」
渡邊:「なるほど、Windowsだとフォルダやファイルにおける権限設定と同等のものですね。権限は、どのOSでも必要な設定ですが、IBM i でも権限の付与含め徹底して設定項目が用意されているんですね。ちなみに*SECOFR は Windows の Administrator に相当しますね。」
| 機能 | レベル20 | レベル30 | レベル40 | レベル50 |
|---|---|---|---|---|
| サインオン時にユーザー名が必要 | はい | はい | はい | はい |
| サインオン時にパスワードが必要 | はい | はい | はい | はい |
| パスワード・セキュリティーが活動状態 | はい | はい | はい | はい |
| メニューおよび初期プログラム・セキュリティーが活動状態 | はい※1 | はい※1 | はい※1 | はい※1 |
| 制限機能サポートが活動状態 | はい | はい | はい | はい |
| 資源保護が活動状態 | いいえ | はい | はい | はい |
| オブジェクト・アドレスを使用したすべてのオブジェクトへの直接アクセス。 | はい | いいえ | いいえ | いいえ |
| ユーザー・プロファイル自動生成 | いいえ | いいえ | いいえ | いいえ |
| セキュリティー監査機能が使用できる | はい | はい | はい | はい |
| 制限された命令を含むプログラムを作成/再コンパイルできない | はい | はい | はい | はい |
| サポートされていないインターフェースを使用するプログラムが実行時に失敗する | いいえ | いいえ | はい | はい |
| 全記憶域で拡張ハードウェア記憶保護を実行する | いいえ | いいえ | はい | はい |
| ライブラリー QTEMP が一時オブジェクトである | いいえ | いいえ | いいえ | いいえ |
| USRSPC、USRIDX、*USRQ オブジェクトは、QALWUSRDMN システム値で 指定されているライブラリーでのみ作成できる | はい | はい | はい | はい |
| パラメーターで使用されるポインターは、システム状態で実行している ユーザー・ドメイン・プログラムに対して、妥当性が検査される | いいえ | いいえ | はい | はい |
| メッセージの処理規則が、システムおよび ユーザー状態プログラム間で実施されている | いいえ | いいえ | いいえ | はい |
| プログラムの関連スペースが直接変更できない | いいえ | いいえ | はい | はい |
| 内部制御ブロックが保護されている | いいえ | いいえ | はい | はい※2 |
| ※1 ユーザー・プロファイル内で LMTCPB(*YES) が指定されている場合。 ※2 レベル 50 では、保護されている内部制御ブロックの数は、 レベル 40 のときよりも多くなります。 | ||||
渡邊:「そういえばQSECURITYの値を変更した場合はIPLが必要とのことですが、設定を変更していてIPLをするのを忘れてしまった場合、システムが今どの設定になっているのかを知る方法はあるものでしょうか?」
柳:「そうですよね。実はわかる方法があります。5250画面では簡単に知る方法はないのですが、先ほど説明したNavigator for i で確認ができるんです。Navigator for iへの接続はこちらでも説明していますので確認してみてくださいね。『セキュリティー』→『セキュリティー構成情報』を展開すると、以下の画面が表示され、現在その値が保留中かどうかを確認することができるんです。」
渡邊:「保留中とあるものが、設定は変更したもののまだ反映されていないことを意味するんですね。」
柳:「はい、そういうことになります。なので、このあたりの設定を変更した場合、確認の意味でNavigator for iの設定値を見ていただくと安心ですね。」
QUSRLIBL/QSYSLIBL:ライブラリー・リスト
柳:「まず、ライブラリー・リストとは、システムがプログラムやファイルなどのオブジェクトを探す順番を示すリストのことです。プログラムの実行やファイルの参照を行う際に、デフォルトではジョブが持っているライブラリー・リストからオブジェクトが検索されます。PC だとファイルの探索順序を定義する「PATH」という環境変数がありますが、これに相当するものだと考えると良いでしょう。ライブラリー・リストについてはこちらに詳細が載っていますのでご参照ください。さて、システム値で指定ができるライブラリー・リストには2種類あります。それが、QUSRLIBLとQSYSLIBLになります。」
渡邊:「これら二つはどういった違いになるのでしょうか。」
柳:「簡単に言えば、システム部分のライブラリー・リストか、ユーザー部分のライブラリー・リストか、という違いになります。ジョブのライブラリー・リストは、システム部分のライブラリーが一番優先されるんですよ。詳細はこちらをご確認ください。では、それぞれのシステム値を見てみましょう。まず、【DSPSYSVAL SYSVAL(QSYSLIBL)】でシステム部分のライブラリー・リストを見ましょう。」
渡邊:「システム部分には、QSYSなど重要そうなライブラリーがセットされているんですね。」
柳:「はい、OSのライブラリーまたはOSに近いライブラリーがセットされています。システム部分のライブラリー・リストと定義されているだけあって、重要なライブラリーがセットされているので、基本的にQSYSLIBLを変更することはありません。ただ、例えばツール関連のライブラリーを最優先で実行させたい場合や、システムの環境上2次言語のライブラリーをセットする必要があるなどの場合は、この値を変更することがあります。」
渡邊:「ツール系のライブラリーでQSYSLIBLに登録する場合もあるのですね。」
柳:「次はQUSRLIBLを見てみましょう。コマンドは【DSPSYSVAL SYSVAL(QUSRLIBL)】になります。」
渡邊:「ライブラリー・リストは各ジョブでも変えることが可能ですが、システム値のユーザーのライブラリー・リストとジョブのライブラリー・リストでは何が違うのでしょうか。」
柳:「良いところに気が付きましたね。実は、システム値で設定したユーザーのライブラリー・リストはいわば各ジョブのライブラリー・リストの初期値といえます。実際にはそのユーザーが使用するジョブ記述の中にライブラリー・リストが組み込まれていますが、デフォルト値はシステム値を参照する『*SYSVAL』になっているので、基本的にはシステム値の値と同じライブラリー・リストになります。ライブラリー・リストの変更は、使用するジョブ記述の設定を変更する、あるいは手動または初期プログラムなどの中でライブラリー・リストを変更するなどの方法があります。」
松田:「パッケージ・ソフトのインストール作業などでは事前にメーカー指定のライブラリーをユーザーのライブラリー・リストに登録しておく必要があるというケースもあるので要注意ですね。」
渡邊:「そういったケースもあるのですね。これらライブラリー・リストのシステム値の変更時に再起動は必要なのでしょうか。」
柳:「ライブラリー・リストの変更においては、次回のジョブ起動から有効になるので再起動は不要です。ただし、システム・ライブラリー・リストをすべてのジョブで有効にさせたいなどの場合は、ジョブのリセットという意味で、場合によって再起動などが必要になるケースもあります。」
渡邊:「なるほど、覚えておきます!」
QCCSID:CCSID(Coded Character Set Identifier:コード化文字セット識別子) をシステム全体に指定するもの
渡邊:「QCCSIDについては前回も登場しましたよね。デフォルト値は65535ですが、お客様環境でそれぞれ違うとか。」
柳:「はい、インフラ作業では基本情報の1つとして作業前に確認することもあります。前回もお話はしていますが、特に半角英小文字を使用するプログラムやジョブ環境では影響を受けますので、お客様の環境を確認するうえで重要になると思います。」
QMAXSIGN:ユーザーが誤ったパスワード等でサインオンを試みることができる最大回数
渡邊:「パスワードを何度も誤った場合、どのようになるのでしょうか?」
柳:「試行数がこの設定値の回数を超えてしまうと、設定によりますが通常は該当のユーザープロファイルは使用不可(*DISABLED)になってしまいます。」
渡邊:「ユーザープロファイルが使用不可になる以外に何かあるのでしょうか。」
柳:「実はQMAXSIGNが試行回数を超えた場合、どのようなアクションをするのか、というのが別のシステム値に存在しています。それが、【QMAXSGNACN】となります。あまり意識した事がないお客様もいるかもしれませんね。どういうシステム値なのか見てみましょう。コマンドは【DSPSYSVAL SYSVAL(QMAXSGNACN)】です。」
渡邊:「表示してみました。ユーザープロファイルだけなく、使用している装置記述も使用できなくなる設定があるのですね。それは戻すのも大変そうだ...。」
柳:「そうなんです。このシステム値のデフォルト値は『3』になります。ワークステーションIDを指定しているユーザー様の場合でこの設定値になっている場合は、試行回数を超えてサインオンできなくなった場合、ユーザープロファイルを使用可能にすることと、装置記述をオンに変更する必要があります。ユーザープロファイルを使用可能にしてもサインオンできない場合は装置の確認も必要ですね。」
QDATE:システム日付
柳:「その名の通り、システム日付になります。」
渡邊:「日付などの設定も、システム値に入るんですね。」
柳:「そうなんですよ、面白いですよね。どうしてここで敢えてQDATEを紹介するかというと、プログラム記述の中で日付をとってくることがあると思いますが、想定していた値と違う、という事があった場合の確認項目の一つになるかと思っています。例えばプログラムの中で日付をもってきているが、それが前日の日付になっていた、など・・・。こういった問題については こちらでも紹介していますので、ぜひ見てみてくださいね。」
QDATFMT:日付の形式
柳:「こちらも、そのまま日付のフォーマットになります。日本語環境の場合はデフォルトで「*YMD」になっていますが、お客様環境によっては変更されている場合があります。「*YMD」については、年月日の順で日付の形式を定義しているとなります。」
渡邊:「確かにユーザーさんによってはフォーマットを変えている場合がありますね。」
柳:「はい。プログラムの中でもフォーマット指定はできたと思いますが、例えばCLプログラムの中でシステム上の日付フォーマットとプログラムが想定していた日付フォーマットが異なっていた場合、正しくない結果を返す可能性がありますので、注意が必要ですね。」
松田:「【DSPSYSVAL SYSVAL(QDATFMT)】で表示しました。この環境でも*YMDですね。」
QSRLNBR:シリアルナンバー、QMODEL:モデル、QPRCFEAT:処理プログラム機構
渡邊:「これは・・・OSというよりはハード側の情報ですね。こういった情報もシステム値にあるんですね。」
柳:「はい、そうなんです。これらのシステム値を紹介した理由は、例えば新しいツールを導入する場合にシリアル番号やモデルなどのハード側の情報が必要になる場合があります。また、保守契約の確認の際に提示が必要な場合も。確認コマンドは【DSPSYSVAL SYSVAL(QSRLNBR)】、QMODELやQPRCFEATも同じように確認できます。」
松田:「確かに、よく使用しているTOOLBOX for IBM i もシリアルナンバーが必要ですもんね。こういった情報も、把握しておくと安心ですね。」
次回予告
柳:「渡邊さん、システム値はいかがでしたか?」
渡邊:「プログラム開発において意識したほうがいい設定が予想以上に多かったのですが、今回学ぶことができてよかったです。今回学んだシステム値の設定内容は開発工程において、エラー特定などふとしたときにも役立つと思うので今後も意識していきます。」
松田:「次回はIBM i のセキュリティーについてご紹介できればと思います。」
柳:「セキュリティーは基幹システムで業務を行ううえで欠かせない要素ですのでしっかり学んでいきましょう。」
渡邊:「次回もよろしくお願いいたします!」
次回に続く
渡邊 隆
ベル・データ株式会社 Power事業部 デジタルイノベーション部
ネットワーク、オープン、セキュリティ、DX関連のプリセールス、構築、サポートを経て、現在はAMSデジタルイノベーション部に所属。工場DXソリューションを担当しながら、初挑戦のIBM i に格闘中。休日は、クラッシックピアノの練習や仲間との弾き合い会を楽しんでいます。
ベル・データ株式会社 Power事業部 デジタルイノベーション部
新卒よりインフラエンジニアとしてPowerサーバーのリプレイスに従事し、現在はAMSデジタルイノベーション部に所属。休日は、カフェ巡りや旅行など天候に関わらず外に出てアクティブに活動することが好きです。
柳 真理絵
ベル・データ株式会社 Power事業部 インフラストラクチャー・サービス POWER Tech Support
インフラエンジニアとしてPowerのリプレイスやバージョンアップなどを担当、現在は技術相談窓口「安心パック for i 」のメンバーとして日々お客様からの質問対応を行っている。休日は家族で出かけたり家でのんびりして過ごしています。
