2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

VSCode上で「RPGのソースをIFSへPush」と「IFSのソースをコンパイル」をしてみた

Last updated at Posted at 2024-10-10

VSCode初心者の5250画面ユーザーが、RPGプログラムのソースファイルをIFSへPush、そしてコンパイルまでVSCodeでしてみました!

当記事ではその実際の手順はもちろん、コンパイルまでの過程でぶつかったトラブルやその解決方法も一緒に記載します。これからVSCodeでRPGを扱ってみようと思う方、VSCodeでIFSへのPushやコンパイルを行おうとして上手くいかない方の参考になれば嬉しいです!

0. 前提

今回は以下の環境・設定を使用しました。また、接続先IBM iはOSのバージョンがそれぞれ異なる日本語環境と英語環境の2パターンを試してみました。実際の手順を行う前に、必要に応じて確認や変更をしてください。

  • 環境①【英語環境】
項目 設定値
IBM i バージョン V7.5
Primary Language 2924 (English)
QCCSID 65535
QLANGID ENU (US English)
ユーザーのCCSID *SYSVAL
ユーザーのLANGID *SYSVAL
  • 環境②【日本語環境】
項目 設定値
IBM i バージョン V7.3
Primary Language 2962 (Japanese Kanji)
QCCSID 65535
QLANGID JPN (Japanese Katakana)
ユーザーのCCSID 5035 (Japan English/Kanji (extended))
ユーザーのLANGID *SYSVAL

QCCSIDが65535、ユーザーのCCSIDが*SYSVALでVSCodeからIBM iへログインできない場合、ユーザーレベルでCCSIDを指定する必要があります。

  • OpenSSHの起動 (詳細はこちら)
  • VSCodeへ拡張機能のインストール (詳細はこちら)

1. IFSへソースファイルをPush

まずはVSCodeにてPC上のファイルをIFSにPushしていきます。

1-1. 【初期設定】IFSにソースファイル用のフォルダー作成

ログインユーザーでIFSにソースファイルを配置するためのフォルダーを作成します。

  • 5250画面にて以下のコマンドを実行。
MKDIR DIR('/home/<ユーザー名>')
MKDIR DIR('/home/<ユーザー名>/<任意のフォルダー名>')

1-2. 【初期設定】PCのソースファイルをIFSにPushするためのSFTP設定

PCのソースファイルをIFSにPushするにはSFTPを使用します。そのため、VSCodeでSFTPを使用するためのセットアップを行います。

  • VSCodeにてフォルダーを開くを選択し、ソースファイルが置いてあるフォルダーを開く。
    image.png

  • 「>sftp」で検索し、SFTP: Configを選択するとsftp.jasonファイルが開く。
    image.png

  • sftp.jasonの設定を以下のように更新し保存する。

    • passwordを追加しておくことで、ログイン時のパスワード入力を省略できる
    • uploadOnSaveをtrueにするとファイルを保存した場合に自動的にPushされる。falseの場合は手動でPushが必要。(方法は後述
{
    "name": "<任意で指定>",
    "host": "<IPまたはホスト名を指定>",
    "protocol": "sftp",
    "port": 22,
    "username": "<ユーザー名>",
    "password": "<パスワード>",
    "remotePath": "/home/<ユーザー名>/<<作成したフォルダー名>",
    "uploadOnSave": true
}

1-3. 【初期設定】VSCodeとIBM i との接続設定

  • メニューバーのIBM iを選択しConnect to an IBM iを押下。
    image.png

  • 必要な情報を入力しConnectを押下。

設定項目 設定内容
Connection Name 任意の接続先名
Host or IP Address 接続先の区画のIPまたはHost名
Port (SSH) 接続時使用ポート(特に指定がなければ22のままでOK)
Username ログインユーザー名
Password ログインユーザーのパスワード

image.png

1-4. VSCodeをIBM i へ接続

  • 上記で作成した接続設定の▷ (Connect to IBM i)を押下し、IBM iへ接続。
    image.png

1-5. サンプルコードの作成とIFSへのPush

ここでは実際にVSCodeでサンプルコードを作成とIFSへのPushを行ってみます。

  • ソースファイルを配置する任意のPCフォルダーを開く。(ネットワークドライブのフォルダーも可)
    image.png

  • 新しいファイルを作成を押下し、選択したフォルダーにサンプルコードを作成する。ファイルの拡張子は.rpgleとする。
    image.png
    image.png

  • ここでは例として「Hello World!」の文字を表示するプログラムのソースHELLOWORLD.rpgleを作成する。

**free
ctl-opt dftactgrp(*no) main(main);

dcl-proc main;
  dcl-s msg varchar(20);
  msg = 'Hello World!';
  dsply msg;
  return ;
end-proc;
  • uploadOnSaveをtrueに設定した場合は保存したタイミングで、falseに設定した場合は下記のようにUpload Fileを選択する。
    image.png

  • IFSの指定したフォルダにソースファイルがPushされていることを確認。
    image.png

  • 5250画面のWRKLNKからも確認
    image.png
    image.png

2. IFSのソースをコンパイル

2-1. 【初期設定】コンパイルリストの設定

5250画面でコンパイルを行った際にはコンパイルリストが出力されますが、VSCodeで行った際も同様に出力するよう設定が可能です。また、当項目で登場する設定画面では他にも様々なカスタマイズができるので、お好みに合わせて変更することをお勧めします。

  • ファイル > ユーザー設定 > 設定より設定画面を開く。
    image.png

  • 拡張機能のCode for IBM iの項目にあるLog Compile Outputにチェックが入っていることを確認。
    image.png

2-2. 【初期設定】コンパイルコマンドの設定

5250画面の場合と同様に、VSCodeでもコンパイル時にはCRTBNDRPGコマンドを使用しますが、ここではそのコマンドのデフォルト値を設定します。VSCodeでコンパイルする際はここで設定したデフォルト値を用いてコンパイルコマンドが実行されますが、適切な設定を行わないとOSのバージョンによってはエラーが起きるため注意です

  • 画面下部のステータスバーにある接続先(ここではMy Connection)にカーソルを合わせ、Actionsを選択。
    image.png

  • Work with ActionsのタブからCreate Bound RPG Program (CRTBNDRPG) with inputsを選択。
    image.png

  • Command(s) to runにて設定されているデフォルト値を確認。ここの値をOSのバージョンによって以下のように変更しSaveを押下。
    image.png

    • V7.3以前:パラメーターTGTCCCSID(*JOB)を削除
      OSのバージョンがV7.3までの場合、CRTBNDRPGコマンドにTGTCCSIDパラメーターが存在しないため、削除しないとエラーになる。
      image.png

    • V7.4以降:【日本語環境の場合】 パラメーターTGTCCCSID(*JOB)TGTCCCSID(5035)に変更
      VSCodeからIFSにPushしたソースをコンパイルするため、日本語環境ではTGTCCSIDの設定変更が必要。※英語環境の場合はデフォルト値のTGTCCSID(*JOB)のままでOK。
      image.png
      参考:https://www.imagazine.co.jp/code-for-ibm-i-j-part4/

なお、コンパイル時に使用されるCCSIDのルールを以下に記載します。少しややこしいので、興味があれば見てみてください。
なお5250画面ではDSPJOBコマンドにて、2. Display job definition attributesより確認できます。

コンパイル時のCCSID決定方法
  1. CRTBNDRPGコマンドのTGTCCSIDを参照する
      1. 1-65534のCCSIDが指定されている場合はそのCCSIDを使用する。
      2. *JOBの場合はJobのCCSIDを参照する。(2番へ)
      ※パラメーターTGTCCSIDが存在しない場合も2番へ
     
  2. JobのCCSIDを参照する
    JobのCCSIDは、CCSID, LANGIDを以下の手順で参照することで決定する。
     
    A. CCSID
         i. ユーザーのCCSIDを参照する
             JobのCCSIDはユーザーのCCSIDを参照して決定する。
               1. 1-65534のCCSIDが指定されている場合はそのCCSIDを使用する。
               2. *SYSVALの場合はシステム値のQCCSIDを参照する。(A-iiへ)
     
         ii. システム値のQCCSIDを参照する
             ユーザーのCCSIDが*SYSVALの場合、システム値のQCCSIDを参照して決定する。
               1. 1-65534のCCSIDが指定されている場合はそのCCSIDを使用する。
               2. 65535の場合はLANGIDを参照する。(Bへ)
     
    B. LANGID
         i. ユーザーのLANGIDを参照する
             JobのLANGIDはユーザーのLANGIDを参照する。
               1. LANGIDが指定されている場合はそのLANGIDを使用する。
               2. *SYSVALの場合はシステム値のQLANGIDを参照する。(B-iiへ)
     
         ii. システム値のQLANGIDを参照する
             ユーザーのLANGIDが*SYSVALの場合、システム値のQLANGIDを参照する。
               1. LANGIDに対応するデフォルトのCCSIDが使用される。(一覧はこちら

なお、上記決定手順では細部を省略して記載しているので、詳細は以下をご参照ください。
https://www.ibm.com/docs/ja/i/7.5?topic=ssw_ibm_i_75/cl/crtbndrpg.html

例:筆者の場合

①英語環境

参照項目 設定値 参照結果
TGTCCSID *JOB *JOBなのでJOBのCCSID参照
(ユーザーのCCSIDから順番に参照)
ユーザーのCCSID *SYSVAL *SYSVALなのでQCCSID参照
QCCSID 65535 65535なのでユーザーのLANGID参照
ユーザーのLANGID *SYSVAL *SYSVALなのでQLANID参照
QLANGID ENU (US English) ENUに対応する37が使用される

②日本語環境

参照項目 設定値 参照結果
TGTCCSID 5035 5035が使用される
ユーザーのCCSID 5035 (Japan English/Kanji (extended)) ---
QCCSID 65535 ---
ユーザーのLANGID *SYSVAL ---
QLANGID JPN (Japanese Katakana) ---

2-3. ライブラリリストの編集

コンパイルの前に、必要に応じてライブラリを追加します。ここでは例としてライブラリJGLIBを追加します。

  • USER LIBRARY LIST+ (Add to library list)を押下。
    image.png
  • ライブラリ名を入力してEnterを押下。
    image.png
  • 入力したライブラリが追加された。順番は↓(Move Down) ↑(Move Up)で調整可能。
    image.png

2-4. コンパイル

IFSのファイルを参照してプログラムをコンパイルします。

  • IFS BROWSERの対象ファイルを右クリックしRun Actionをクリック。
    image.png

  • 先ほどパラメーターを調整したCreate Bound RPG Program (CRTBNDRPG) with inputsを選択。
    image.png

  • コンパイル先のライブラリ、コンパイル時のプログラム名、参照するソースを入力しExecuteを押下。
    image.png
    image.png

  • ポップアップが表示されるので、Open outputを押下。
    image.png

  • 5250と同様にコンパイルリストが表示される。
    image.png
    image.png

2-5. プログラムの稼働確認

念のため先ほど作ったプログラムが正しく動くかを確認します。(例で作ったプログラムは「Hello World!」を表示するだけの簡単なものですが、、、)
image.png
正しく稼働しました!これでコンパイルは完了です!

3. トラブルシューティング

ここでは筆者が実際にぶつかったトラブルをご紹介します。

3-1. IBM iに接続できない(クレデンシャル)

以下のようにクレデンシャルを確認するようエラーポップアップが表示されました。筆者の場合は以下の方法で問題を解決できました。
image.png

【解決方法】

  1. ログイン情報の確認
    接続先を右クリックしLogin Settingsを押下。ログインユーザーのIDやパスワードが正しいか確認します。
    image.png

  2. ログインユーザーのパスワードが失効していないか確認
    VSCode用に作成して普段使用しないユーザーの場合、見落としているかもしれません。パスワードが失効している場合は再度登録してみてください。ユーザープロファイルよりユーザーのPWDEXPITV (Password Expiration Interval)を*NOMAXにしておくことで、当問題は予防できます。

3-2. IBM iに接続できない(CCSID)

日本語環境で発生した問題です。以下のようにCCSIDが正しくないというエラーポップアップが表示されました。
image.png

【解決方法】

  1. ログインユーザーのCCSIDを確認
    前提でも書きましたが、QCCSIDが65535、ユーザーのCCSIDが*SYSVALの場合、上記のようなエラーが出る場合があります。エラーが出た場合はログインユーザーのCCSIDを明示的に指定してみてください。
    ※変更後は画面下部のボタンで一度ネットワークを切断し、再度接続する必要があります
    image.png

3-3. コンパイルが通らない

コンパイルに失敗した場合、以下のようなエラーポップアップが表示されます。
image.png

【解決方法】

  1. ソースを確認
    これは5250画面でも同じことですが、まずはコンパイルを試みたプログラムのソースを確認しましょう。ポップアップのOpen outputを押下することでコンパイルリストを表示できます。
    image.png
    image.png
    上記の通り、Severity 30の問題があることが分かります。なお、VSCodeはコンパイル後、問題がある箇所を教えてくれます。これは便利!
    image.png

  2. ユーザーのCCSIDを確認
    前述の通りユーザーのCCSIDを正しく設定していない場合、エラーになる可能性があります。

  3. ソースファイルのCCSIDを確認
    WRKLNKコマンドにて対象のファイルを選択し、8=Display Attributeを実行
    image.png
    CCSIDが1208であることを確認。異なる場合は13=Change attributeにてCCSIDを変更。
    image.png
    image.png

  4. コンパイルのコマンドを確認
    TGTCCSID, 改行
    前述の通り、バージョン7.3以前でTGTCCSIDがコマンドに含まれているとエラーになってしまいます。また、コマンドに改行が含まれていると、Code for IBM iではそれ以降のステートメントが認識されなくなってしまうようなので注意です(筆者はそれでめちゃくちゃ時間を溶かしました、、、)
    image.png

3-4. その他拡張機能の不具合

設定は何度確認しても正しいはずなのに、なぜか上手くいかない、、、
そんなときは拡張機能のバグの可能性もあるので、別バージョンのインストールを試してみましょう。
ちなみに筆者は以下のように接続はできているがIFSだけ表示されないバグが起こりました。
image.png

  1. 拡張機能の他バージョンをインストールする
    左メニューバーの拡張機能よりCode for IBM iを選択し、アンインストールの右のを押下し特定のバージョンをインストールを選択。
    image.png
    インストールするバージョンを選択する。
    image.png
    再起動をしてバージョン変更完了。
    image.png

最後に

VSCodeにてIFSへRPGのソースファイルをPushし、IFSのソースをコンパイルするまでの手順は以上となります。全手順がVSCode上で完結するのがとても便利ですね。
筆者はまだできていませんが、GitHubなどと組み合わせることでIBM iのソース管理はさらに便利になるのではないかと考えています!

最後までお付き合いいただきありがとうございました!

参考記事

https://qiita.com/KOINULIB/items/b7259d93ec772effdef7
https://qiita.com/KOINULIB/items/21c4940059b43b0e5e9d
https://qiita.com/RiSING_alpha-team/items/1254437673699179580c
https://qiita.com/RiSING_alpha-team/items/7b5c910c6df111a53ace
https://www.imagazine.co.jp/feat-visual-studio-code-part3/

2
0
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?