前置き
- こちらの記事の続きです
環境前提
- PC環境
- Windows11
- VSCodeの拡張機能
- 必須の拡張がインストールされていること
- 接続先IBM i
- IBM i バージョン:V7.4
- QCCSID:1399(5035でも恐らく同様で、問題ないと思います)
- 導入済ライセンスに
5733SC1
があり、OpenSSHが利用できる状態
1. コンパイル準備:ライブラリーリスト
- IBM i 開発者は何を気を付けるのかというと、やはりライブラリーリストですね!
-
Code for IBM i にて区画に接続後、
USER LIBRARY LIST
の設定をします
2. コンパイル準備:コンパイルリストの設定(+@)
- VSCodeの設定にて、Code for IBM iの拡張について設定変更をします
- ユーザー設定を開きます
- Windows:Ctrl + ,
- Mac:Cmd + ,
- 拡張機能 > Code for IBM i を選択
3. コンパイル準備:コンパイルコマンドの微調整
-
前回作成したFFRPGのソースに対して、IFS BROWSERで右クリックし、
Run Action
を押下するとデフォルトで用意されたコンパイルに関するコマンドが表示されます -
デフォルトのコマンドがどういったパラメータを設定しているかを確認したいと思います
-
ステータスバーのConnection Name(キャプチャではIBMI74)にカーソルを合わせ、
Actions
を選択します
- ここでTerminalsを選択すると、PASEや5250画面の表示ができます!
-
MemberとStreamfileに分けてデフォルトのアクション(コマンド一覧)が並んでいます。
-
今回はIFS上にPushしたFFRPG(.rpgle)をコンパイルするので、Streamfileの下にある
Create Bound RPG Program (CRTBNDRPG) with inputs
を選択、パラメータを一部変更します。 -
今回使っているユーザープロファイル的には
CCSID:*SYSVAL
、SYSVALもQCCSID:1399
なのでデフォルト値の*JOB
でも問題ありませんが、明示的にTGTCCSIDを5035へ変更し、Saveボタンを押下して設定を保存します
- なお、TGTCCCSIDの設定は必須です
- IFSにアップロードされたストリームファイルがUTF8(CCSID1208)なので、RPGコンパイラはUnicodeのソースを直接参照できず、コンパイルエラーとなってしまいます。そのためTGTCCCSIDを5035に指定し、変換をした上でコンパイルをできるようにする必要があります!
- 参考:Code for IBM i その全貌:Part 4 ソースコードの保守|SEU/PDMの代わりになるか
4. いざ、コンパイル!
- 整ってまいりました。再度、ソースを右クリック→
Run Action
を押下してください - 修正をした
Create Bound RPG Program (CRTBNDRPG) with inputs
を選択してください
- コンパイル先のライブラリーを指定(今回はKOINULIB)し、Executeボタンを押下してください
5. コンパイルリストのチェック
- ポップアップが出てきたので、Open outputボタンを押下し、コンパイルリストを確認します
- コンパイルリストは以下の通りで、コンパイル時のコマンドも確認できます
- リスト最下部を確認し、コンパイルが警告はあるものの、無事にPGMの作成に成功しています!
Running Action: Create Bound RPG Program (CRTBNDRPG) with inputs (19:35:36) Current library: QGPL Library list: KOINULIB QGPL QTEMP QMGTOOLS Working directory: /home/SAORI Commands: CRTBNDRPG PGM(KOINULIB/add10) SRCSTMF('/home/SAORI/ffrpgsrc_for_qiita/add10.rpgle') OPTION(*EVENTF) DBGVIEW(*SOURCE) TGTRLS(*CURRENT) TGTCCSID(5035) CPD4090: 印刷装置PRT01が見つからない。出力待ち行列がライブラリーQGPLのQPRINTに変更されました。 RNS9304: プログラムADD10がライブラリーKOINULIBに入れられました。最高の重大度は10。24/01/24の19:36:25に作成されました。 CPC0904: データ域RETURNCODEがライブラリーQTEMPに作成された。 5770WDS V7R4M0 190419 RN IBM ILE RPG KOINULIB/ADD10 IBMI74 24/01/24 19:36:25 PAGE 1 コマンド . . . . . . . . . . . : CRTBNDRPG 投入元 . . . . . . . . . . . : SAORI プログラム . . . . . . . . . . : ADD10 ライブラリー . . . . . . . . : KOINULIB テキスト'記述' . . . . . . . : *SRCMBRTXT ソース・ストリーム・ファイル . : /home/SAORI/ffrpgsrc_for_qiita/add10.rpgle CCSID . . . . . . . . . . . . : 1208 ターゲットCCSID. . . . . . . . : 5035 テキスト'記述' . . . . . . . : 最終変更 . . . . . . . . . . . : 24/01/11 11:54:51 生成重大度レベル . . . . . . . : 10 省略時の活動化グループ . . . . : *YES コンパイラー・オプション . . . : *XREF *GEN *NOSECLVL *SHOWCPY *EXPDDS *EXT *NOSHOWSKP *NOSRCSTMT *DEBUGIO *UNREF *EVENTF デバッグ・ビュー . . . . . . . : *SOURCE デバッグ暗号鍵 . . . . . . . . : *NONE 出力 . . . . . . . . . . . . . : *PRINT 最適化レベル . . . . . . . . . : *NONE ソース・リストの字下げ . . . . : *NONE タイプ変換オプション . . . . . : *NONE ソート順序. . . . . . . . . . . : *HEX 言語識別コード . . . . . . . . : *JOBRUN プログラムの置き換え . . . . . : *YES ユーザー・プロファイル . . . . : *USER 権限 . . . . . . . . . . . . . : *LIBCRTAUT 数値の切り捨て . . . . . . . . : *YES 数値の修正 . . . . . . . . . . : *NONE ターゲット・リリース. . . . . . : *CURRENT ヌル値可能 . . . . . . . . . . : *NO 条件名の定義 . . . . . . . . . : *NONE パフォーマンス収集使用可能化 . : *PEP プロファイル・データ. . . . . . : *NOCOL ライセンス内部コードOPT. . . . : 生成PGMインターフェース. . . : *NO 組み込みディレクトリー . . . . : プリプロセッサー・オプション . : *NONE (略) 最 終 の 要 約 メッセージ合計: 通知 (00) . . . . . . . : 0 警告 (10) . . . . . . . : 1 エラー (20) . . . . . . . : 0 重大エラー (30+) . . . . . . : 0 --------------------------------- ------- 合計 . . . . . . . . . . . . : 1 ソース合計: レコード . . . . . . . . . . : 36 仕様 . . . . . . . . . . . . : 17 データ・レコード. . . . . . . : 0 注記 . . . . . . . . . . . . : 14 * * * * * * 最 終 の 要 約 の 終 わ り * * * * * * * プログラムADD10がライブラリーKOINULIBに入れられました。最高の重大度は10。24/01/24の19:36:25に作成されました。 * * * * * * コ ン パ イ ル の 終 わ り * * * * * * Fetching errors for KOINULIB/ADD10.
6. コンパイルエラーがあったら?
-
うまくいかなかったときの挙動も確認します
-
コンパイルリスト下部を見ます。重要度30で、す、ね
メ ッ セ ー ジ の 要 約 MSG ID SV 番号 メッセージ・テキスト *RNF7031 00 1 名前または標識が参照されていない。 *RNF3776 10 1 メイン・プロシージャーのプロトタイプ上の外部プログラムが ,作成するプログラムと同じでない。 *RNF7030 30 1 名前または標識が定義されていない。 *RNF7503 30 1 式に定義されていないオペランドが含まれている。 * * * * * メ ッ セ ー ジ の 要 約 の 終 わ り * * * * 5770WDS V7R4M0 190419 RN IBM ILE RPG KOINULIB/ADD10 IBMI74 24/01/24 19:50:58 PAGE 8 最 終 の 要 約 メッセージ合計: 通知 (00) . . . . . . . : 1 警告 (10) . . . . . . . : 1 エラー (20) . . . . . . . : 0 重大エラー (30+) . . . . . . : 2 --------------------------------- ------- 合計 . . . . . . . . . . . . : 4 ソース合計: レコード . . . . . . . . . . : 35 仕様 . . . . . . . . . . . . : 17 データ・レコード. . . . . . . : 0 注記 . . . . . . . . . . . . : 13 * * * * * * 最 終 の 要 約 の 終 わ り * * * * * * * コンパイルは停止しました。重大度30のエラーがプログラムで見つかりました。 * * * * * * コ ン パ イ ル の 終 わ り * * * * * * Fetching errors for KOINULIB/ADD10.
-
原因は分かっていますが、とりあえず、
RNF7030
をコンパイルリストの中を検索してみましょう -
そうですよね、宣言していないからですよねー…ということがわかりました!
- 少し文字のずれは気になるものの、5250画面でコンパイルエラーを探す感覚で原因を見つけることができました
*RNF7030 30 15 000015 名前または標識MISSが定義されていない。 *RNF7503 30 15 000015 式に定義されていないオペランドが含まれている。 * * * * * * * * * * 追 加 の 診 断 メ ッ セ ー ジ の 終 わ り * * * * * * * * * * * 5770WDS V7R4M0 190419 RN IBM ILE RPG KOINULIB/ADD10 IBMI74 24/01/24 19:50:58 PAGE 5 相 互 参 照 表 ファイルおよびレコードの参照: ファイル 装置 参照(D=定義済み) レコード ソース中に参照がない。 グローバル・フィールド参照: フィールド 属性 参照(D=定義 M=変更) MAIN PROTOTYPE 3 9 *RNF7030 MISS **UNDEF** 15 SUBPRO A(52) 16 23 VARYING(2) PROTOTYPE
- 少し文字のずれは気になるものの、5250画面でコンパイルエラーを探す感覚で原因を見つけることができました
おわりに
- コンパイルコマンドの微調整は、ぜひ自社の開発ルールに合わせて変更してください
- 個人的にはコンパイルリストが5250画面で見るのと大きく変わらず、RPGⅢで改修していた時との開発の流れの差がないことがよかったです
- FFRPGとRPGⅢの比較の記事化もしてみたいと思っております。ではでは!