前置き
- 前職では、IBM i(AS/400)の開発はエミュレーターからSTRPDM、既存ソースで参考になるものをPDMのOPT:3でコピーして~を繰り返していました。
- そんな私ですが、最近ようやくFFRPGを触る機会を持つことができ、以下の感想を持ちました。
- 「わたしたちの知っているRPG開発ではない」
- 「書きやすいし、他言語経験者にも優しい」
- 「FFRPGを扱えるようになることによってIBM iの開発者が他言語にトライするハードルが下がりそう」
- 早く始めなかった理由は、業務やコスト以外に開発環境構築が大変そう、CCSIDとかいろいろ考えないといけないのでは?という始めることへの漠然とした不安でした。
- この不安を取り除いて、シュッと素早く、安全に環境を構築し、FFRPGに飛び込む人を増やしたいと思い、記事に残したいと思います。
- 様々な方の良い記事を参考にして本記事を作成しておりますが、個人的な意見を含んでおります。ご承知おきください。
本編の前に
VSCodeで固定長のソースコードは編集できるのか
- お試しで、データ転送でtxt形式でダウンロードしたソースコードの拡張子を.rpgle、.rpgに変更して確認しました。
- 尚、下記にあるVSCodeの拡張機能がインストールされている前提で確認をしております。
固定長編集はできるが、使いづらい。VSCode開発はFFRPGを選びたい
-
RPGⅢ、RPGⅣ(固定長) → 編集はできます!が、桁位置などがずれると大変&プロンプトがないので、慣れない人は苦戦しそうです。
-
RPGⅢはRPGⅣへソースの変換 (CVTRPGSRC)をし、FFRPGに徐々に変えていくことをお勧めしたいです。
-
SEUのプロンプトのような機能を求める場合は、RDi(Rational Developer for i)がおすすめです。
-
また、プロンプトが優しいSEU自体は、V6.1で機能追加はされておらず、様々な便利関数が使えない状況です。
-
上記のことより、VSCodeでよりモダンに楽しく開発をするならFFRPGに挑戦していただきたい、と思います。
0. 環境前提
- PC環境
- Windows11
- 接続先IBM i
- IBM iバージョン:V7.4
- QCCSID:1399(5035でも恐らく同様で、問題ないと思います)
- 導入済ライセンスに
5733SC1
があり、OpenSSHが利用できる状態
1.【PC】VSCode/拡張機能インストール
VSCodeインストール
- まずはインストーラーをこちらから取得する
- Windowsユーザーの方はexeをダブルクリック→ウィザード通りに操作を行う
拡張機能インストール
-
Ctl + Shift + X
または 左のパズルアイコンの拡張機能を押下し、拡張を追加する- 拡張機能は必須と任意があります。表にしたのでごお好みでインストールを!
拡張の名前 | 必須or任意 | 何ができる拡張? |
---|---|---|
Japanese Language Pack for Visual Studio Code | 必須 | VSCodeの日本語対応 |
IBM i Development Pack | 必須 | VSCodeでRPG/CL/COBOLのソースコードの保守、コンパイルといった開発が簡単にできてしまう拡張機能のパッケージ |
SFTP | 必須 | PC→IBM i(IFS)へソースコードの自動保存用に使用 |
indent-rainbow | 任意 | FFRPGのインデントを美しく表示してみたい人ー! |
vscode-icons | 任意 | アイコンがわかりやすい!FFRPGには対応していませんが… |
2.【IBM i】SSHD起動
- 5250画面のエミュレーターにて以下コマンドを実行し、SSHDを起動
STRTCPSVR *SSHD
- SSHDの起動状況を確認
- SSHD起動後、QUSRWRKサブシステム内にジョブ
QP0ZSPWP
が開始される。このジョブが存在しているかを確認
- SSHD起動後、QUSRWRKサブシステム内にジョブ
- QCCSIDが1399ではなく、65535の場合は…
- SSHD起動ユーザープロファイルを
CRTUSRPRF
で作成する- ユーザープロファイルを作成時CCSIDを5035にする
- SSHD起動ユーザープロファイルで
STRTCPSVR *SSHD
コマンドを実行
- SSHD起動ユーザープロファイルを
3.【IBM i】ソースファイルを配置するフォルダ作成
- 5250画面のエミュレーターにて以下コマンドを実行
- ※作成ディレクトリは任意。今回は
ffrpgsrc_for_qiita
とする
MKDIR DIR(‘/home/<ユーザー名>’) MKDIR DIR(‘/home/<ユーザー名>/ffrpgsrc_for_qiita’)
- ※作成ディレクトリは任意。今回は
4.【PC】PCフォルダに保存したソースをIFSに自動Pushさせる(SFTPを利用)
- まずはVSCodeを開き、フォルダを開くを押下
- 任意のフォルダを選択、開く
- 今回は
ffrpgsrc_for_qiita
- 今回は
- コマンドパレットを表示
- Windows:
Ctl + Shift + P
- Mac:
Cmd + shift + P
- Windows:
-
sftp
と入力し、SFTP:Configを選択
- jsonファイルが開くので、以下の内容で更新を行う
-
uploadOnSave
をTrueとすることで、フォルダ・ファイルを保存をするとIFSに自動更新(自動転送)がされる -
remotePath
には 3.で作成したソースファイル配置ディレクトリを指定
{ "name": "<任意で指定>", "host": "<IPまたはホスト名を指定>", "protocol": "sftp", "port": 22, "username": "<ユーザー名>", "password": "<パスワード>", "remotePath": "/home/<ユーザー名>/ffrpgsrc_for‗qiita", "uploadOnSave": true }
-
- 公開鍵認証を使う場合は
"password":
の行を削除し、"privateKeyPath:"
にて、秘密鍵を設定する(PPK形式は使えなかったので、OpenSSH形式で作成しました) - 秘密鍵のパスと名前は、ご自身で作成したものを読み替える
{ "name": "<任意で指定>", "host": "<IPまたはホスト名を指定>", "protocol": "sftp", "port": 22, "username": "<ユーザー名>", "remotePath": "/home/<ユーザー名>/ffrpgsrc_for_qiita", "privateKeyPath": "C:/Users/<ユーザー名>/.ssh/openssh_key", "uploadOnSave": true }
5.【PC→IBM i】VSCodeにてIBM iへ接続設定を行う
-
IBM iの接続情報を作成する
-
Connection情報に以下を入力
Left align Right align Connection Name Connectionに接続名を入力 Host or IP Addless 接続する区画のIPまたはHost名を入力 Port 接続時使用ポート(22ポートでOK) Username サインオン・ユーザー Password サインオン・ユーザーのパスワード -
秘密鍵を使う場合はパスワードは入力せず、Private keyを選択する(こちらの拡張機能はOpenSSH、RFC4716、PPK形式に対応しています)
-
入力後、Connect ボタンを押下
6.【PC】サンプルコードの作成とPush
-
VSCodeのエクスプローラーエリアで右クリック、新規ファイル作成
-
ソースコードは以下を貼り付け(内容はCALL時の引数に10を足してDSPLYするもの)
**free ctl-opt dftactgrp(*no) main(main); //--------------------- // main処理 add10 // CALL PGM(コンパイルするLIB/ADD10) PARM((S (*CHAR 1)) (900 (*DEC 9 0))) // サンプルコード //--------------------- dcl-proc main; dcl-pi *N; #kubun char(1); #number packed(9:0); end-pi; if #kubun = 'S'; dsply subpro(#number); else; dsply '区分NG'; endif; end-proc; dcl-proc subpro; dcl-pi *n varchar(52); number packed(9:0); end-pi; dcl-s dsplay_message char(52); number = number + 10; dsplay_message = '返却結果:' + %char(number); return dsplay_message; end-proc;
-
上記ソースコードを
Ctrl + S
で保存- 保存することにより、PC→IBM i(IFS)へPush完了
7.【PC】IFSにPushされているか確認
- 左下IFS BROWSERにて、 4.にてsftp.json内でremotePath指定したパス(
/home/<ユーザー名>/ffrpgsrc_for_qiita
)にサンプルソースが存在していることを確認
- IBM iの5250画面でも確認
- SO/SIは自動的に挿入されているため、ソース側で特別にSO/SIを追記することは不要
おまけ
- SFTP拡張機能を使ってSSH接続でターミナルをオープンさせる
😢躓いた点→解決
2byte文字が文字化けてる!?
- 他区画(V7.5)で同様の作業をした際、IFSにPushされたファイルはCCSID:1208(UTF8)のはずなのですが、819になっていました。
- 暫定対応として、5250画面でファイルの属性変更(CHGATR)で、*CCSIDを1208に変更して、その後は問題なしです。
解決
- 長らくPTFをあてていなかった区画だったので、最新の累積PTFとTRをあて、解決しました。
おわりに
- ローカルPCでソース編集をし、IFSにPushするところまでを実施することができました。
- 次回、VSCodeでコンパイル時の設定(ライブラリーリスト変更、コンパイルコマンドのパラメータ変更)とコンパイルリストの確認方法の記事を追加予定です。
参考記事
- この記事は以下の情報を参考にして執筆しました。
- IBM iユーザーに捧げるVisual Studio Code入門|Visual Studio Codeを使用したFF RPG開発の実際◎特集 Part3
- IBM i駆け出し日記:VS CodeでIBM iを触る~設定編~
-
【できるIBM i 7.4解剖】第10回 「IBM i のSFTPとFTPSサポート」
- こちらの記事では公開鍵/秘密鍵をPuttyで作成されています。
- 上記記事通りにPuttyで秘密鍵を作成をされた方は、puttygenのエクスポート機能を使うことで、PPK形式→OpenSSHにエクスポートができます。これによって、VSCodeのSFTP拡張機能で使うOpenSSHの秘密鍵を作ることができます。2回鍵を作成せずに利用できるので、ぜひエクスポート機能をお使いください!
- puttygenでは、OpenSSH形式→PPK形式もできます。