text:小川 誠 ティアンドトラスト
VSCodeに必須の拡張機能をインストールしたら、IBM iにソースをプッシュする準備をしよう。準備がすべて整ったら、FF RPG のコードをVSCodeでコーディングし、IBM iにプッシュするまで順を追って解説する(ここでは架空のIBM iアドレスやユーザー名などを使用しているので、それぞれの環境に沿って置き換えてほしい)。
IBM i ユーザー名:USER01(パスワードも同じ)
IBM i ホスト名:ホスト名もしくはIPアドレス
フォルダの準備
まずPC上で、ソースコードを保管するフォルダを作成する。それぞれ任意のフォルダを作成して構わないが、プロジェクトごとに専用のフォルダを作成することを推奨する。
ここではC:\ffrpgsrcというフォルダを作成し、そこにソースコードを保管する。
IBM i 側のディレクトリの準備
コンパイラ言語でソースコードが必要になるのはコンパイルの瞬間のみであり、実行時にはソースコードはなくても構わない。そのため一般的には、ユーザー専用のディレクトリ(通常は /home/<ユーザー名> 配下)に保管する。
ここでは、/home/USER01/ffrpgsrcディレクトリを作成し、VSCodeからはこのディレクトリにソースコードをプッシュするように設定する。
CRTUSRPRF USRPRF(USER01) PASSWORD(USER01)
:
(USER01 でサインオン)
:
(フォルダがなければ作成)
MKDIR DIR(‘/home/USER01’)
MKDIR DIR(‘/home/USER01/ffrpgsrc’)
SFTPの設定
VSCodeでの設定に移ろう。まずVSCodeを起動する。続いて、「フォルダーを開く」をクリックして、C:\ffrpgsrc を選択する(起動している場合は、「ファイル」-「フォルダーを開く」をクリックして、C:\ffrpgsrc を選択する(図表1)。
VSCode にとって新しいフォルダの場合は、「このフォルダー内の作成者を信頼しますか?」と表示されるので、「はい、作成者を信頼します」をクリックする。
続いて、SFTPを設定する。アクティビティバー下部の管理アイコンをクリックし、表示されるメニューで「コマンドパレット」を選択するか、「表示」-「コマンドパレット」を選択すると、上部にコマンドパレットが表示されるので、> に続けてsftpと入力する。
表示された「SFTP: Config」をクリックすると、フォルダ内に.vscodeフォルダが作成される。さらにそのなかにsftp.jsonファイルの初期化が作成されて、そのファイルがエディタに表示される。
ファイルにすでに値が入っているもので重要なのは、それぞれ図表2のとおりである。
sftp.jsonファイルの初期化にはパスワード(password)はなく、その場合はアップロードのたびにパスワードの入力を求められる。セキュリティ上は好ましくないが、パスワードをjsonファイル内に記述すれば、パスワード入力は求められない(図表3)。
公開鍵認証を使用する場合は、ローカルにある秘密鍵のファイル名をprivateKeyPathに指定すればユーザー認証が可能になり、パスワードの記述は不要になるので、できればこちらを利用したい(図表4、ファイル名は一例)。
helloworld.rpgleのコーディングとプッシュ
これで、VSCodeを使ってFF RPGをコーディングし、IBM i にプッシュする準備が整った。それでは早速、簡単なソースコードを作成してプッシュしてみよう。
作成するソースコード名は、helloworld.rpgleとする(図表5)。
拡張子は重要なので、必ず.rpgle と間違えないように記述しよう。
新しいファイルを作成するアイコンをクリックして、helloworld.rpgleと入力し、Enterキーを押す。するとファイルc:\ffrpgsrc\helloworld.rpgleが作成され、エディタ部に編集モードで表示される。
続いて、現在カーソルがある行(1行目の1桁目)に**freeと入力する。さらに3行目にmと入力すると、スニペットが表示されるのでmainを選択する(図表6)。
スニペットの選択が表示されなければ、拡張機能が正しくインストールされていないか無効になっている、あるいはファイルの拡張子が間違っている可能性があるので確認してほしい。
展開されたコードの yourcode の部分に、以下のコードを入力する(図表7)。
dsply ‘Hello World!’;
それでは、入力したコードを保存してみよう。保存のショートカット・キーはCtrl+Sである。拡張機能SFTPの設定ファイルsftp.jsonで、uploadOnSaveを有効に設定しているので、保存と同時にIBM iにアップロードされる。アップロードが成功したら、ステータスバー左側に「done helloworld.rpgle」と表示される。
ステータスバーに上記以外が表示されたら、ssh接続で失敗しているので、次を確認する。
・IBM iでsshdが開始されているか
・拡張機能SFTPの設定ファイルsftp.jsonは正しく記述されているか
―ホスト名もしくは IPアドレスは正しいか
―ユーザー名は正しいか
―パスワードを記述している場合は正しいパスワードか
sftp.json内のパスワードが間違って記述されている状態で、何度か連続して保存を実行しエラーとなった場合、IBM i側でユーザーが無効(*DISABLED)になっている可能性もあるので、そちらも確認してほしい。
コンパイル
アップロードされたソースコードは、アクティビティバーに追加されたSFTPアイコンから確認できる。このアイコンをクリックすると、sftp.jsonに指定したremotePathディレクトリの内容がサイドバーに表示される(図表8)。
表示されたファイルをクリックすると、エディタに表示されるので、記述したコードが正しくアップロードされたこともVSCode内から確認できる。ただし、コードは読み取り専用で表示されているので、直接は変更できない。変更する場合は、ローカルのファイルを変更して再度保存およびアップロードする必要がある。
ソースコードは、5250対話型ジョブでWRKLNKコマンドでも確認できる(図表9)。
WRKLNK OBJ(‘/home/USER01/ffrpgsrc/helloworld.rpgle’)
オプション5で内容も確認できる(図表10)。
それではこのソースコードをコンパイルしてみよう。
CRTBNDRPG PGM(LibName/HELLOWORLD) SRCSTMF(‘/home/USER01/ffrpgsrc/helloworld.rpgle’)
ソースコードは、アップロードしたファイルをSRCSTMパラメータにフルパスで指定している。本来であれば、これでコンパイルできるはずだが、このまま実行すると以下のエラーとなる。
ファイル/home/USER01/ffrpgsrc/helloworld.rpgleを開くことができません。
このエラーは、プッシュしたソースコード・ファイルのCCSIDが1208(ユニコード)であることに起因する。
CRTBNDRPGなどのコンパイル・コマンドは、CCSIDがユニコードのファイルを直接読み込めない。コンパイルするには、事前に読み込み可能なCCSID(5035や1399)に変換する必要がある。
この変換をコンパイル時に同時に実行するよう指示するパラメータが、TGTCCSIDである。もう一度実行してみよう。
CRTBNDRPG PGM(LibName/HELLOWORLD) SRCSTMF(‘/home/USER01/ffrpgsrc/helloworld.rpgle’)
TGTCCSID(5035)
今度は正しくコンパイルされたはずだ。TGTCCSIDパラメータが表示されない場合は、個別のPTF適用が必要になる。IBM iのバージョンと必要なPTF番号については、以下のサイトを参照してほしい。
Compile RPG from Unicode source – new TGTCCSID parameter in 7.1, 7.2, 7.3
著者|
小川 誠氏
ティアンドトラスト株式会社
常務取締役
1989年、エス・イー・ラボ入社。その後、1993年にティアンドトラストに入社。システム/38 から IBM i まで、さまざまな開発プロジェクトに参加。またAS/400 、IBM i の機能拡張に伴い、他プラットフォームとの連携機能開発も手掛ける。IBM i 関連の多彩な教育コンテンツの作成や研修、セミナーなども担当。2021年6月から現職。
[i Magazine・IS magazine]