Now let’s look at the basic usage of Code for IBM i. I published it in the winter 2022 issue of i Magazine, but I will explain the basics again. If possible, please read the feature “Introduction to Visual Studio Code for IBM i users” in advance (published on the i Magazine site).
■ Execution environment
First, the IBM i environment used to create this article is as follows. Depending on the environment, it may not be the same as the article content, so please keep that in mind. In addition, it goes without saying that the necessary licenses and PTFs must be installed and each command executed by a user with appropriate authority based on company regulations.
・Version: IBM i 7.3・Cumulative PTF: C9116730・Technology Refresh: 6・SF99703 (DB2 for IBM i): 32・5770WDS-SI62605・QCCSID: 5035
■ Prerequisites (IBM i)
About sshd
Code for IBM i uses ssh to connect to IBM i, so sshd must be started on the IBM i side.
Command: STRTCPSVR SERVER(*SSHD)
sshdを開始すると、QUSRWRKサブシステム内にジョブ QP0ZSPWP が開始される。sshdが開始されているかどうかは、このジョブが存在しているかどうかで判断してほしい。
次に、接続に必要なユーザープロファイルを用意する。sshdのデフォルトでは、ユーザー名は8文字以内でないと接続が拒否される。ユーザー名が9文字あるいは10文字であっても接続させたい(既存のユーザーが8文字以上)場合は、
コマンド:ADDENVVAR ENVVAR(PASE_USRGRP_LIMITED) VALUE(‘N’) LEVEL(*SYS)
を実行するか、もしくは/QOpenSys/QIBM/UserData/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をインストールしよう。VSCodeのアクティビティバーで拡張機能アイコンをクリックし、「Marketplaceで拡張機能を検索する」と表示された入力域にIBMと入力すると、Code for IBM iが表示されるので、インストールをクリックする(図表12)。
図表12 Code for IBM iのインストール
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。このアイコンは今後頻繁に使用する)。
図表13 アイコン
続けて、サイドバーに表示される「Connect to an IBM i」をクリックして表示される設定画面で以下を入力する(図表14)。
図表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 SUPPORT2. USER LIBRARY LIST3. OBJECT BROWSER4. IFS BROWSER
ステータスバーにもCode for IBM i関連の項目が表示される(図表15)。
図表15 ステータスバーに表示されたCode for IBM iの機能ボタン
◎表示項目:説明
・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 Connection Buttonsを有効にすると、切断および再接続ボタンがステータスバーに表示されるようになる。デフォルトは無効なので有効にしておくとよい(図表16)。
①:切断②:再接続
図表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)。
図表17 ソースメンバーの一覧表示
表示されるのは定位置形式のRPG Ⅳプログラムで、皆さんにもおなじみの表示装置ファイルを使用した対話型プログラムである。
ではこのソースコードをコンパイルしてみる。ソースコードにカーソルがある状態でCtrl+Eを押すと、メンバーのタイプに応じて実行するコンパイラの候補が上部に表示される。今回は Create Bound RPG Program (CRTBNDRPG) を選択した。
実行結果は右下に表示される。アクションが失敗したとのメッセージが表示されるが、今回対象のソースコードはあえてコンパイル・エラーが発生するように記述した(図表18)。
図表18 コンパイル結果の表示
コンパイルリストはShow Outputボタンをクリックすることで表示される(図表19)。
図表19 コンパイル・リストの表示
通常はコンパイルリストの内容を表示するためにWRKSPLFやWRKJOBコマンドを実行し、エラー箇所を特定したらコンパイルリストの表示を終了して SEUを再度実行してコードを修正するという手順が必要だった。Code for IBM iでは上部にソースコードが表示された状態でコンパイルリストを参照できるので、エラー箇所の特定と修正はかなり楽になるはずだ。
コンパイルリストからエラー箇所を特定してソースコードの該当箇所を探す以外に、リスト画面の左上の問題をクリックする方法もある。エラー重大度ごとにエラー一覧が表示され、さらにそのエラーをクリックするとソースの該当部分にカーソルが移動するので、さらに便利だ(図表20)。
図表20 エラー一覧の表示
今回は「RNF2120 外部記述が見つからない」というエラーなので、コンパイル時のライブラリ・リストの設定に問題があるということがわかる。TECSMPとTRY01RDは IMAG2023ライブラリにあるので、USER LIBRARY LISTで現行ライブラリにIMAG 2023を設定しよう(図表21)。
図表23 正しいレコード様式名
この例では、現行ライブラリがQGPLになっているので右横のアイコンをクリックしてIMAG2023を現行ライブラリに設定する。その後再度コンパイル・アクションを実行する。
RNF2120のエラーは解消したが、RNF7030エラー(FMT20 という名称が宣言されていない)により、再度コンパイル・エラーが発生している(図表22)。
図表22 コンパイル・エラー
RNF7030の行をクリックすると、FMT20を使用している行にカーソルが移動する。移動先がEXFMTの行だとすると、使用している表示装置ファイルTRY01RDにFMT20が定義されていないというエラーである。先ほど作成したフィルター内のQDDSSRCにあるtry010rd.dspfを表示して確認してみる(図表23)。
図表23 正しいレコード様式名
するとFMT20ではなくFMT02であることがわかったので、TRY01Rのソースを修正して保存後、再度コンパイルを実行する。
今度はコンパイルが成功した旨のメッセージが右下に表示された(図表24)。
図表24 コンパイル結果(成功)の表示
RPG Ⅲプログラムのコンパイル
図表25は、RPG Ⅲのメンバーも開いた結果だ。
図表25 RPG Ⅲのソースメンバー
先ほどのプログラムとまったく同じロジックのプログラムで、FMT02 も正しく入力されているのでこのままコンパイルできるはずだなので、そのまま Ctrl+E を押す。
すると、候補に表示されるコンパイル・コマンドにCRTRPGPGMが見つからない(図表26)。
図表26 CRTRPGPGMが表示されていない
これは、Code for IBM iがRPG Ⅲのプログラムのコンパイル・コマンドを事前登録していないからだ。もちろん、必要なコマンドは新しいアクションとして登録することができるので、それを実施する。
ステータスバーのActionsをクリックすると、ファイルの拡張子によって選ばれる事前登録されたコマンドの一覧が表示される。画面下部にNew Actionボタンがあるのでクリックすると、図表27の画面が表示される。
図表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)。
図表28 追加されたアクションの表示
コンパイルが実行され、プログラムが作成された旨のメッセージが表示された(図表29)。
図表29 コンパイル結果の表示
コンパイルリストをステータスバーのOutputをクリックして表示し、先頭部分に移動するとCRTRPGPGMコマンドが実行されていることが確認できる(図表30)。
図表30 コンパイル・コマンド実行の確認
簡単なサンプルで解説したが、Code for IBM iを利用すれば、IBM i上のソースメンバーを直接編集し、コンパイルできることをおわかりいただけたと思う。しかもRPG ⅣもRPG Ⅲもシンタックス・ハイライトでソースコードは見やすく表示され、PCの解像度に依存するものの、SEUよりも表示できる行数は圧倒的に多い。SEUが提供する行単位のプロンプト機能はないという点を除けば、Code for IBM iがSEU/PDMの変わりになり得ることはおわかりいただけたと思う。(Part 4に続く) Read More