それでは、Code for IBM iの基本的な使い方を見ていこう。i Magazine 2022年冬号に掲載したが、基本的なところを再度解説する。できれば事前に特集「IBM iユーザーに捧げるVisual Studio Code入門」に目を通しておいてほしい(i Magazineサイトに掲載)。
■ 実行環境
まず、今回の記事作成に使用したIBM i環境は以下の通り。環境によっては、記事内容と同じにならないことも考えられるので、その点は留意しておいていただきたい。また、必要なライセンスおよびPTFの導入や各コマンドの実行などは、適切な権限を持ったユーザーが社内規定に基づいて行っていただく必要があるのは言うまでもない。
・バージョン:IBM i 7.3
・累積PTF:C9116730
・Technology Reflesh:6
・SF99703(DB2 for IBM i):32
・5770WDS-SI62605
・QCCSID:5035
■ 前提条件(IBM i)
sshdについて
Code for IBM iはIBM iとの接続にsshを使用するので、IBM i側でsshdをあらかじめ開始しておく必要がある。
コマンド:STRTCPSVR SERVER(*SSHD)
sshdを開始すると、QUSRWRKサブシステム内にジョブ QP0ZSPWP が開始される。sshdが開始されているかどうかは、このジョブが存在しているかどうかで判断してほしい。
次に、接続に必要なユーザープロファイルを用意する。sshdのデフォルトでは、ユーザー名は8文字以内でないと接続が拒否される。ユーザー名が9文字あるいは10文字であっても接続させたい(既存のユーザーが8文字以上)場合は、
コマンド:ADDENVVAR ENVVAR(PASE_USRGRP_LIMITED) VALUE(‘N’) LEVEL(*SYS)
を実行するか、もしくは/QOpenSys/QIBM/UserDa
ta/SC1/OpenSSH/etc/sshd_config内に、
ibmpaseforienv PASE_USRGRP_LIMITED=N
を追加し、sshdを再起動する必要がある。
IBM i 7.4以降は、デフォルトで8文字以上のユーザー名がサポートされるので、上記の設定は必要ない。
なおssh接続は、パスワード認証と公開鍵認証があるが、今回はパスワード認証を使用する。
使用するユーザー情報
今回誌面で使用するユーザーとライブラリは以下の通り。
ユーザープロファイル:IMAG23WINT
(USRCLS=*SECOFR)
ライブラリ:IMAG2023
開発PCのソースコードをプッシュする先として、ユーザー専用のディレクトリも作成しておく。ディレクトリは /home/<ユーザー名> を作成し、ユーザープロファイルの HOMEDIR にそのディレクトリのパス、あるいは *USRPRFを指定する。
以下コマンドは、IMAG23WINTユーザーでサインオンして実行している。
mkdir ‘/home/IMAG23WINT’
CHGPRF HOMEDIR(*USRPRF)
■ 前提条件(開発 PC)
事前にVSCodeをインストールしておく(https://code.visualstudio.com/download)。インストール後、VSCodeを起動すると、メニューなどがすべて英語表記になるが、日本語の言語パックをインストールするよう促すメッセージが右下に表示されるので、ここでインストールしておく(あとから拡張機能でインストールすることも可能)。
次に、Code for IBM iをインストールしよう。VS
Codeのアクティビティバーで拡張機能アイコンをクリックし、「Marketplaceで拡張機能を検索する」と表示された入力域にIBMと入力すると、Code for IBM iが表示されるので、インストールをクリックする(図表12)。
Code for IBM iをインストールすると、Code for IBM i WalkthroughsとIBM i Language拡張機能も一緒にインストールされる。
今回使用した拡張機能のリリースは、それぞれ以下のとおり。
・Code for IBM i:v1.6.8
・Code for IBM i Walkthroughs:v0.2.4
・IBM i Languages:v0.6.8
■ 接続設定
続いて接続設定を作成しよう。Code for IBM iをインストールするとアクティビティバーにIBM iアイコンが表示されるので、それをクリックする(図表13。このアイコンは今後頻繁に使用する)。
続けて、サイドバーに表示される「Connect to an IBM i」をクリックして表示される設定画面で以下を入力する(図表14)。
◎項目設定:内容
・Connection Name:任意の名前
・Host or IP Address:接続するIBM iのホスト名もしくは IP アドレス
・Port (SSH):IBM iのsshdのポート番号(省略値:22)
・Username :IBM iに接続する際に使用するユーザープロファイル
・Password:パスワード認証の場合に設定
・Private Key:公開が未認証の場合にプライベート・キーを指定
入力が終わったら「Save & Exit」をクリックして接続設定情報を保存する。サイドバーに作成された接続設定が表示されるので、それをクリックするとIBM iに接続される。設定でSave Passwordをチェックしていないと、この時点でパスワードの入力を求められるので入力する。
接続が完了すると、サイドバーに以下の4つのセクションが表示される。
1. HELP AND SUPPORT
2. USER LIBRARY LIST
3. OBJECT BROWSER
4. IFS BROWSER
ステータスバーにもCode for IBM i関連の項目が表示される(図表15)。
◎表示項目:説明
・Settings:接続の追加の設定画面を表示
・Actions:リモートのソースやオブジェクトに対するアクションの設定
・Output:コンパイルリストの表示など
・Terminals:PASE 環境への接続
これで基本的にCode for IBM iを利用できるが、さらに事前確認および設定すべきものがあるので、それを簡単に解説しよう。
Settings内
ステータスバーのSettingsをクリックして表示される項目で注目すべきは、以下の2つ。
・Temporary library
・Clear temporary data automatically
まずTemporary libraryは、Code for IBM iおよび関連する拡張機能が一時的に利用するIBM i上のライブラリである。省略値はILEDITORで、同名のライブラリがないことを前提にしている。それぞれの環境ですでに同名のライブラリがある場合は、専用のライブラリ名を指定することをおすすめする。
指定したライブラリが存在しない場合は、接続時に自動的に作成される。
省略値のままだと、複数のユーザーがCode for IBM iを利用する際にこのライブラリを共有することになるので、ユーザーごとに一時ライブラリを持ちたい場合は固有の名前を指定する必要がある。
一時ライブラリとあるが、あくまでもCode for IBM iが一時的に利用するという意味であり、QTEMPライブラリのことではないので注意してほしい。
次にClear temporary data automaticallyだが、Temporary libraryに一時的に作成されるファイル・オブジェクトを自動的に削除するかどうかを指定する。削除の対象になるのは O_で始まるファイルで、毎回接続する際に削除される。
拡張機能の設定
アクティブバーの一番下の管理アイコン – 設定と順にクリックすると、VSCode全体の設定を管理する画面が表示される。さらに左側の拡張機能を展開し、Code for IBM iをクリックする。ここで注目すべき設定値は以下の2つ。
・Log Compile Output
・Show Connection Buttons
Log Compile Outputが有効だと、VSCodeからコンパイル・アクションを実行したときにコンパイルリストを参照できるようになる。コンパイル後にエラーが発生した場合は、右下に出るポップアップ画面内でOutputをクリックすると表示される。また、ステータスバーのOutputをクリックすると、最新のリストをいつでも参照できる。省略値は有効(チェック)されているので、この値はそのままにしておく。
Code for IBM iで接続したコネクションを切断するには、コマンドパレットを表示(表示-コマンドパレットをクリック)して、IBM i:Disconnect from current connection. を選択する必要があるが、Show Con
nection Buttonsを有効にすると、切断および再接続ボタンがステータスバーに表示されるようになる。デフォルトは無効なので有効にしておくとよい(図表16)。
①:切断
②:再接続
■ ソースコードの表示とコンパイル
では、Code for IBM iを使用して、IBM i 上のソースコードの修正を行ってみる。まず、接続後に表示される OBJECT BROWSER でソースファイルを表示するフィルターを作成する。今回使用するライブラリ IMAG2023 に存在するすべてのソースファイルを選択するよう設定する。
Create new filter をクリックし、表示される設定項目を以下のように指定している。
◎項目:設定値
・Filter name:IMAG2023-SRC
・Library:IMAG2023
・Object:*(変更しない)
・Object type filter:*SRCPF(変更しない)
・Member:*(変更しない)
・Member type:*(変更しない)
設定し終わったらSave settingsをクリックして保存する。すると、OBJECT BROWSERにIMAG2023-SRCというフィルターが作成される。
それではフィルターを展開して、すでに存在しているメンバー(ここでは try01r.rpgle)をクリックして表示してみる(図表17)。
表示されるのは定位置形式のRPG Ⅳプログラムで、皆さんにもおなじみの表示装置ファイルを使用した対話型プログラムである。
ではこのソースコードをコンパイルしてみる。ソースコードにカーソルがある状態でCtrl+Eを押すと、メンバーのタイプに応じて実行するコンパイラの候補が上部に表示される。今回は Create Bound RPG Program (CRTBNDRPG) を選択した。
実行結果は右下に表示される。アクションが失敗したとのメッセージが表示されるが、今回対象のソースコードはあえてコンパイル・エラーが発生するように記述した(図表18)。
コンパイルリストはShow Outputボタンをクリックすることで表示される(図表19)。
通常はコンパイルリストの内容を表示するためにWRKSPLFやWRKJOBコマンドを実行し、エラー箇所を特定したらコンパイルリストの表示を終了して SEUを再度実行してコードを修正するという手順が必要だった。Code for IBM iでは上部にソースコードが表示された状態でコンパイルリストを参照できるので、エラー箇所の特定と修正はかなり楽になるはずだ。
コンパイルリストからエラー箇所を特定してソースコードの該当箇所を探す以外に、リスト画面の左上の問題をクリックする方法もある。エラー重大度ごとにエラー一覧が表示され、さらにそのエラーをクリックするとソースの該当部分にカーソルが移動するので、さらに便利だ(図表20)。
今回は「RNF2120 外部記述が見つからない」というエラーなので、コンパイル時のライブラリ・リストの設定に問題があるということがわかる。TECSMPとTRY01RDは IMAG2023ライブラリにあるので、USER LIBRARY LISTで現行ライブラリにIMAG 2023を設定しよう(図表21)。
この例では、現行ライブラリがQGPLになっているので右横のアイコンをクリックしてIMAG2023を現行ライブラリに設定する。その後再度コンパイル・アクションを実行する。
RNF2120のエラーは解消したが、RNF7030エラー(FMT20 という名称が宣言されていない)により、再度コンパイル・エラーが発生している(図表22)。
RNF7030の行をクリックすると、FMT20を使用している行にカーソルが移動する。移動先がEXFMTの行だとすると、使用している表示装置ファイルTRY01RDにFMT20が定義されていないというエラーである。先ほど作成したフィルター内のQDDSSRCにあるtry010rd.dspfを表示して確認してみる(図表23)。
するとFMT20ではなくFMT02であることがわかったので、TRY01Rのソースを修正して保存後、再度コンパイルを実行する。
今度はコンパイルが成功した旨のメッセージが右下に表示された(図表24)。
RPG Ⅲプログラムのコンパイル
図表25は、RPG Ⅲのメンバーも開いた結果だ。
先ほどのプログラムとまったく同じロジックのプログラムで、FMT02 も正しく入力されているのでこのままコンパイルできるはずだなので、そのまま Ctrl+E を押す。
すると、候補に表示されるコンパイル・コマンドにCRTRPGPGMが見つからない(図表26)。
これは、Code for IBM iがRPG Ⅲのプログラムのコンパイル・コマンドを事前登録していないからだ。もちろん、必要なコマンドは新しいアクションとして登録することができるので、それを実施する。
ステータスバーのActionsをクリックすると、ファイルの拡張子によって選ばれる事前登録されたコマンドの一覧が表示される。画面下部にNew Actionボタンがあるのでクリックすると、図表27の画面が表示される。
◎項目:設定値
・Action Name:Ctrl+E を押したときに候補に表示される際の名称
・Command to run:実行されるコマンド(表示される変数を使用して記述する)
・Extensions:RPG のみ設定
・Types:Member(メンバーに対するアクションで有効にする)
・Environment:OPM が選択できないので ILE のまま
指定可能な置換変数は以下の通り。
◎置換変数:説明
・&OPENLIB:該当のソース・ファイル(メンバー)のライブラリ名
・&OPENSPF:ソース・メンバーが登録されているソース・ファイル名
・&OPENMBR:選択しているソース・メンバー名
・&EXT:選択しているソース・メンバーの拡張子
・&CURLIB:USER LIBRARY LIST にセットしている現行ライブラリ
今回は Action Name に「Create RPG III Program (CRTRPGPGM)」、Command to run に以下のコマンドを指定して保管する。
CRTRPGPGM PGM(&OPENLIB/&OPENMBR) SRCFILE(&OPENLIB/&OPENSPF) OPTION(*SRCDBG)
再度ソースコードを選択し、Ctrl+Eを押すと追加したアクションが表示されるはずなので、それをクリックする(図表28)。
コンパイルが実行され、プログラムが作成された旨のメッセージが表示された(図表29)。
コンパイルリストをステータスバーのOutputをクリックして表示し、先頭部分に移動するとCRTRPG
PGMコマンドが実行されていることが確認できる(図表30)。
簡単なサンプルで解説したが、Code for IBM iを利用すれば、IBM i上のソースメンバーを直接編集し、コンパイルできることをおわかりいただけたと思う。しかもRPG ⅣもRPG Ⅲもシンタックス・ハイライトでソースコードは見やすく表示され、PCの解像度に依存するものの、SEUよりも表示できる行数は圧倒的に多い。SEUが提供する行単位のプロンプト機能はないという点を除けば、Code for IBM iがSEU/PDMの変わりになり得ることはおわかりいただけたと思う。(Part 4に続く)
Code for IBM i |目次
Part1 Code for IBM iについて
Part2 開発環境俯瞰図
Part3 基本的な使い方
Part4 ソースコードの保守
Part5 Code for IBM i以外の便利な拡張機能
Part6 DeepL API を使った翻訳プログラムの作成と実行
著者|
小川 誠氏
ティアンドトラスト株式会社
代表取締役社長 CIO CTO
1989年、エス・イー・ラボ入社。その後、1993年にティアンドトラストに入社。システム/38 から IBM i まで、さまざまな開発プロジェクトに参加。またAS/400 、IBM i の機能拡張に伴い、他プラットフォームとの連携機能開発も手掛ける。IBM i 関連の多彩な教育コンテンツの作成や研修、セミナーなども担当。2021年6月から現職。
[i Magazine 2023 Winter掲載]