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

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`|

:::note warn 
QCCSIDが65535、ユーザーのCCSIDが`*SYSVAL`でVSCodeからIBM iへログインできない場合、ユーザーレベルでCCSIDを指定する必要があります。
:::
   - OpenSSHの起動 (詳細は[こちら](https://qiita.com/RiSING_alpha-team/items/1254437673699179580c))
- VSCodeへ拡張機能のインストール (詳細は[こちら](https://qiita.com/RiSING_alpha-team/items/7b5c910c6df111a53ace))

# 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](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3844144/d2aca94a-fe32-0de8-10db-4044ed852df5.png)

- 「>sftp」で検索し、`SFTP: Config`を選択するとsftp.jasonファイルが開く。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3844144/777fb5ca-bbf0-6349-3548-297d40e5fc8e.png)

- sftp.jasonの設定を以下のように更新し保存する。 
  - `password`を追加しておくことで、ログイン時のパスワード入力を省略できる
  - `uploadOnSave`をtrueにするとファイルを保存した場合に自動的にPushされる。falseの場合は手動でPushが必要。（方法は[後述](#1-5-サンプルコードの作成とifsへの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](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3844144/7df1be6b-3caf-b9e3-1960-ddd0b5eb562e.png)

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

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



![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3844144/015cbeaa-880d-a631-d3ba-cda0804e4910.png)

## 1-4. VSCodeをIBM i へ接続
 - 上記で作成した接続設定の`▷ (Connect to IBM i)`を押下し、IBM iへ接続。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3844144/aee63515-fde2-9c36-674a-f9cdc0bca10e.png)

## 1-5. サンプルコードの作成とIFSへのPush
ここでは実際にVSCodeでサンプルコードを作成とIFSへのPushを行ってみます。
- ソースファイルを配置する任意のPCフォルダーを開く。（ネットワークドライブのフォルダーも可）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3844144/65bb254e-ccd8-c325-d0f9-5a412397d37f.png)

- `新しいファイルを作成`を押下し、選択したフォルダーにサンプルコードを作成する。ファイルの拡張子は`.rpgle`とする。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3844144/862a4670-b3fb-a09d-10df-9e6220a8e05b.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3844144/673b3aa5-5ddc-4868-5635-302e9fb74cf5.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](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3844144/b017afd9-0d35-2b8e-d246-eff853ce852f.png)

- IFSの指定したフォルダにソースファイルがPushされていることを確認。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3844144/83b847b5-c526-e0ec-0b57-4f921107c029.png)

- 5250画面のWRKLNKからも確認
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3844144/1d67f52f-816f-da4c-217d-224e2da0164b.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3844144/80b488c8-c16a-6a89-b731-0eccb132e832.png)

# 2. IFSのソースをコンパイル
## 2-1. 【初期設定】コンパイルリストの設定
5250画面でコンパイルを行った際にはコンパイルリストが出力されますが、VSCodeで行った際も同様に出力するよう設定が可能です。また、当項目で登場する設定画面では他にも様々なカスタマイズができるので、お好みに合わせて変更することをお勧めします。
- `ファイル` > `ユーザー設定` > `設定`より設定画面を開く。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3844144/cf2749da-17a3-2fd0-3fee-5aaacac65145.png)

- 拡張機能の`Code for IBM i`の項目にある`Log Compile Output`にチェックが入っていることを確認。 
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3844144/c35b1448-aadd-9de9-e75c-547dd808ec4e.png)

## 2-2. 【初期設定】コンパイルコマンドの設定
5250画面の場合と同様に、VSCodeでもコンパイル時には`CRTBNDRPG`コマンドを使用しますが、ここではそのコマンドのデフォルト値を設定します。VSCodeでコンパイルする際はここで設定したデフォルト値を用いてコンパイルコマンドが実行されますが、**適切な設定を行わないとOSのバージョンによってはエラーが起きるため注意です**。
- 画面下部のステータスバーにある接続先（ここでは`My Connection`）にカーソルを合わせ、`Actions`を選択。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3844144/ab07a815-80df-ba84-0d28-659410e21a30.png)
- `Work with Actions`のタブから`Create Bound RPG Program (CRTBNDRPG) with inputs`を選択。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3844144/56cef208-b972-70a0-0aef-a15005f4afa0.png)

- `Command(s) to run`にて設定されているデフォルト値を確認。ここの値をOSのバージョンによって以下のように変更し`Save`を押下。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3844144/9f20d9d8-7da4-3619-9838-d8fca0b2d34d.png)

  - V7.3以前：パラメーター`TGTCCCSID(*JOB)`を削除 <br>OSのバージョンがV7.3までの場合、`CRTBNDRPG`コマンドに`TGTCCSID`パラメーターが存在しないため、削除しないとエラーになる。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3844144/0f318590-636e-8565-a727-839eb2d4bbc3.png)

  - V7.4以降：**【日本語環境の場合】** パラメーター`TGTCCCSID(*JOB)`を`TGTCCCSID(5035)`に変更<br>VSCodeからIFSにPushしたソースをコンパイルするため、日本語環境では`TGTCCSID`の設定変更が必要。※英語環境の場合はデフォルト値の`TGTCCSID(*JOB)`のままでOK。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3844144/e88b7015-5c15-f335-e614-2d1153ecc05f.png)
参考：https://www.imagazine.co.jp/code-for-ibm-i-j-part4/

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

1. CRTBNDRPGコマンドのTGTCCSIDを参照する
&nbsp;&nbsp;1. 1-65534のCCSIDが指定されている場合はそのCCSIDを使用する。
&nbsp;&nbsp;2. `*JOB`の場合はJobのCCSIDを参照する。（2番へ）
&nbsp;&nbsp;※パラメーターTGTCCSIDが存在しない場合も2番へ
&nbsp;
1. JobのCCSIDを参照する
JobのCCSIDは、CCSID, LANGIDを以下の手順で参照することで決定する。
&nbsp;
   A. CCSID
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;i. ユーザーのCCSIDを参照する
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;JobのCCSIDはユーザーのCCSIDを参照して決定する。
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1. 1-65534のCCSIDが指定されている場合はそのCCSIDを使用する。
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2. `*SYSVAL`の場合はシステム値のQCCSIDを参照する。（A-iiへ）
&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ii. システム値のQCCSIDを参照する
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ユーザーのCCSIDが`*SYSVAL`の場合、システム値のQCCSIDを参照して決定する。
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1. 1-65534のCCSIDが指定されている場合はそのCCSIDを使用する。
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2. 65535の場合はLANGIDを参照する。（Bへ）
&nbsp;
   B. LANGID
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;i. ユーザーのLANGIDを参照する
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;JobのLANGIDはユーザーのLANGIDを参照する。
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1. LANGIDが指定されている場合はそのLANGIDを使用する。
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2. `*SYSVAL`の場合はシステム値のQLANGIDを参照する。（B-iiへ）
&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ii. システム値のQLANGIDを参照する
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ユーザーのLANGIDが`*SYSVAL`の場合、システム値のQLANGIDを参照する。
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1. LANGIDに対応するデフォルトのCCSIDが使用される。（一覧は[こちら](https://www.ibm.com/docs/ja/i/7.5?topic=information-language-identifiers-associated-default-ccsids)）

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

<details>
<summary>例：筆者の場合</summary>

①英語環境
|参照項目|設定値|参照結果|
|:-|:-|:-|
|TGTCCSID|`*JOB`|`*JOB`なのでJOBのCCSID参照<br>（ユーザーの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)|---|

</details>

</details>

## 2-3. ライブラリリストの編集
コンパイルの前に、必要に応じてライブラリを追加します。ここでは例としてライブラリ`JGLIB`を追加します。
- `USER LIBRARY LIST`の`+ (Add to library list)`を押下。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3844144/dcc2be8b-e1bd-973d-55ac-ff432ec1372e.png)
- ライブラリ名を入力して`Enter`を押下。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3844144/f4e9588e-c176-22b7-bd8d-f88301fdf92c.png)
- 入力したライブラリが追加された。順番は`↓(Move Down)` `↑(Move Up)`で調整可能。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3844144/e235f61e-560e-cb24-dbc4-23c68de108ba.png)

## 2-4. コンパイル
IFSのファイルを参照してプログラムをコンパイルします。
- `IFS BROWSER`の対象ファイルを右クリックし`Run Action`をクリック。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3844144/d3cc8370-507e-ab0e-0650-c10c71f31605.png)

- 先ほどパラメーターを調整した`Create Bound RPG Program (CRTBNDRPG) with inputs`を選択。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3844144/7e94a4e0-0fce-c075-a6cd-bebed1ac4008.png)

- コンパイル先のライブラリ、コンパイル時のプログラム名、参照するソースを入力し`Execute`を押下。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3844144/64bc0d0d-1b3e-3aa7-5d36-a1fda63a5bc4.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3844144/f2412edd-7e19-76a2-a365-2864e5b6562b.png)

- ポップアップが表示されるので、`Open output`を押下。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3844144/fcef688d-1cba-ee72-3c91-ffceaa9c8885.png)

- 5250と同様にコンパイルリストが表示される。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3844144/9fa3b76d-145a-ce3e-8249-8147e8acbb7b.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3844144/3adbbe0e-0a51-4142-f631-0b14e08ab5c2.png)

## 2-5. プログラムの稼働確認
念のため先ほど作ったプログラムが正しく動くかを確認します。（例で作ったプログラムは「Hello World!」を表示するだけの簡単なものですが、、、）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3844144/d03394db-e307-3010-fd30-fdfb6a922694.png)
正しく稼働しました！これでコンパイルは完了です！

# 3. トラブルシューティング
ここでは筆者が実際にぶつかったトラブルをご紹介します。

## 3-1. IBM iに接続できない（クレデンシャル）
以下のようにクレデンシャルを確認するようエラーポップアップが表示されました。筆者の場合は以下の方法で問題を解決できました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3844144/b3bd9fbf-cbf3-9fd0-ee0e-90f8be7c1670.png)

**【解決方法】**
1. ログイン情報の確認 <br>接続先を右クリックし`Login Settings`を押下。ログインユーザーのIDやパスワードが正しいか確認します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3844144/97b2b21f-d040-41ad-fa45-3ecf3ce82b06.png)

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

## 3-2. IBM iに接続できない（CCSID）
日本語環境で発生した問題です。以下のようにCCSIDが正しくないというエラーポップアップが表示されました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3844144/d3a65d05-0d3e-04c7-1bfe-117529b4ac3f.png)

**【解決方法】**
1. ログインユーザーのCCSIDを確認  <br>[前提](#0-前提)でも書きましたが、QCCSIDが65535、ユーザーのCCSIDが*SYSVALの場合、上記のようなエラーが出る場合があります。エラーが出た場合はログインユーザーのCCSIDを明示的に指定してみてください。 <br>※変更後は画面下部のボタンで一度ネットワークを切断し、再度接続する必要があります
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3844144/8667db95-419a-0930-2a47-31188748ac1c.png)

## 3-3. コンパイルが通らない
コンパイルに失敗した場合、以下のようなエラーポップアップが表示されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3844144/c9483962-6c11-0b99-8ab5-ea00dc55813d.png)

**【解決方法】**
1. ソースを確認 <br>これは5250画面でも同じことですが、まずはコンパイルを試みたプログラムのソースを確認しましょう。ポップアップの`Open output`を押下することでコンパイルリストを表示できます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3844144/95898824-8041-55d6-d526-92a500585262.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3844144/299ca235-28b5-8368-19b1-f78b2eb9f900.png)
上記の通り、Severity 30の問題があることが分かります。なお、VSCodeはコンパイル後、問題がある箇所を教えてくれます。これは便利！
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3844144/8b1281d3-2519-d101-5fc9-2efd5b7691ee.png)
2. ユーザーのCCSIDを確認 <br>[前述](#0-前提)の通りユーザーのCCSIDを正しく設定していない場合、エラーになる可能性があります。

3. ソースファイルのCCSIDを確認
WRKLNKコマンドにて対象のファイルを選択し、`8=Display Attribute`を実行
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3844144/e935c1df-885a-521d-f2ac-2b9f4bb47ded.png)
CCSIDが1208であることを確認。異なる場合は`13=Change attribute`にてCCSIDを変更。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3844144/eacd12e6-c4e3-25a1-135f-ac93302b63ea.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3844144/7dc92c55-d159-0f97-5fbc-6f5bb48bd621.png)

4. コンパイルのコマンドを確認
TGTCCSID, 改行
[前述](#2-2-初期設定コンパイルコマンドの設定)の通り、バージョン7.3以前でTGTCCSIDがコマンドに含まれているとエラーになってしまいます。また、コマンドに改行が含まれていると、Code for IBM iではそれ以降のステートメントが認識されなくなってしまうようなので注意です（筆者はそれでめちゃくちゃ時間を溶かしました、、、）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3844144/4b07691d-7ea6-bce6-bbd1-e399bf8e2f60.png)

## 3-4. その他拡張機能の不具合
設定は何度確認しても正しいはずなのに、なぜか上手くいかない、、、
そんなときは拡張機能のバグの可能性もあるので、別バージョンのインストールを試してみましょう。
ちなみに筆者は以下のように接続はできているがIFSだけ表示されないバグが起こりました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3844144/c8435b27-0350-ba8f-34d6-3b42a889b3ac.png)

1. 拡張機能の他バージョンをインストールする
左メニューバーの拡張機能よりCode for IBM iを選択し、`アンインストール`の右の`∨`を押下し`特定のバージョンをインストール`を選択。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3844144/82812506-4b1d-c633-a9f3-c7c6bfcebb26.png)
インストールするバージョンを選択する。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3844144/3f5a5341-ef98-d69a-a8b2-04cb45204162.png)
再起動をしてバージョン変更完了。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3844144/a90241ac-6fd2-0508-5e9f-40d8482ea222.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/