メニューボタン
IBM i お役立ち情報2025.08.27

RPG開発者のためのIBM i モダナイゼーション入門!
RDi とWeb APIで新しい開発の世界を楽しもう - 第 7 回 -

はじめに

出村:「前回は、実際にIWSでWeb APIを作成しましたね。作成してみてどうでしたか?」

松田:「実際に作ってみると、IWSの手順と前回であればSQL文さえポイントを押さえていけば難しいものではないということがわかりました。」

渡邊:「私も同意見です。今回は、ILE RPGを用いて作成していくことになるかと思いますが、こちらも順を追って確認すれば問題ないと思っています。」

出村:「そうですね。今回は、ILE RPGによるWeb API作成となりますが、SQLよりも実施できる内容が広がります。実運用でも、ILE RPGを用いていらっしゃるお客様は多いので、ぜひ覚えていきましょう。」

前提

出村:「今回作成するリクエストURLと、リクエストした結果として得られるJSONのレスポンスは以下の通りです。少し解説すると、前回と同じ物理ファイル【BDSYAINP】から、社員番号で検索し、添付画像の通り、社員名とカナとメールアドレスを抽出するAPIをILE RPGで作成します。物理ファイルの定義や物理ファイル上のデータの準備は前回の記事を参照してください。今回使用するILE RPGのソースは、SAVFファイルとして添付していますので活用して下さい。」

松田:「ILE RPGのソースには、Web API独自の内容は含まれているのですか?」

出村:「良い質問ですね。以下のプログラムの内容にあるように、1行目のH仕様書とHTTP STATUSを除けば、社員番号をパラメータとして受け取り、社員名、社員名カナ、メールアドレスを物理ファイルから検索して、回答するプログラムです。」

渡邊:「H仕様書には何を書いているのですか?H仕様書というと、プログラム全体の制御に関する仕様書で、日付の形式等を設定するイメージです。」

出村:「そうですね。Web API用のILE RPGのソースでは、コンパイルする時にPCML情報(プログラム名やパラメータの型)を出力する必要があります。
PCMLはProgram Call Markup Languageの略で、ILE RPGとJavaやRESTとの間で入出力パラメータのやり取りができるようになる技術となります。 イメージとしては、JavaからIBM i 上のプログラムを呼び出す際に使用します。(下記イメージ図参照)PCML情報はIFSに出力する方法とプログラムに埋め込む方法がありますが、【*MODULE】を指定してプログラムに埋め込む形で指定しましょう。」

<使用するプログラムの内容>
プログラムのソースは下記よりダウンロード下さい。ターゲットリリースをV7R3M0に設定しているため、V7R3以上のマシン上で復元するようご注意ください。
SAMPLE.SAVF

実際のソース内容
SYAPI01R.txt

渡邊:「なるほど、今までのILE RPGでは使ったことが無い内容なので、とても面白いです。」

出村:「さらに、パラメータ resStatusは、HTTPのレスポンスコードを応答するために使います。社員番号が見つかれば、【200 OK】を、見つからなければ【404 NOT FOUND】を応答するようにします。こちらのソースをコンパイルして、今回はライブラリTSTAPIに入れておきます。」 

松田:「パラメータ変数に大文字と小文字が混在していますが、何か違いはあるのでしょうか。」

出村:「パラメータ名がそのままレスポンス時のJSONのキー名になります。それでは、IBM Web Administrator for i で設定を進めてゆきましょう。」

REST APIをILE RPGで実装する

<作業概要>

  1. プログラムオブジェクトの選択、サービス名の指定
  2. セキュリティ設定、パラメーターの使用方法、トリム設定
  3. サービス詳細設定、利用ユーザーIDの選択、ライブラリー・リスト設定
  4. WEBサービスから受け取る情報について、設定の最終確認

出村:「IWSの設定を始める前に、2点補足をしておきます。1点目は先に少し触れましたが、今回のILE RPGプログラムは元々単体で動くプログラムに少し手を加えただけなんです。」

渡邊:「確かに、H仕様書の記述と大文字・小文字の内容だけですね。これだけで、REST用として使えるということですか?。」

出村:「その通りです。今回はREST APIテスト用のプログラムとしてご紹介していますが、元々使っていたILE RPGのプログラムを簡単に活用できるということです。この後説明するIWSの設定を行い、プログラムを登録すればREST APIサーバとして使うことができるんです。」

松田:「ILE RPGを使ったREST APIサーバを作る時は、ILE RPGのプログラム作成が大変なのではと思っていましたが、すごくハードルが下がりました。IWSが優秀ということですか?」

出村:「そうです。細かい説明は省きますが、文字コードの変換をしたり、JSONとRPGプログラムパラメータ間の変換をしたりしていますよ。2点目は、ソース内の英小文字に関する注意点です。英小文字を認識させる必要があります。よって、ソースファイルのCCSIDは【1399】で、そのソースをエミュレータで編集する際にはホストコードページ【1399 日本語(Latin Unicode 拡張; JIS2004)】に予め設定しておきましょう。では、早速IWSの設定を始めます。IBM Web Administrator for i を開き(※)、【Application Server】から自身のサーバーを選択、新規サービスの配置を選択します。」

  1. プログラムオブジェクトの選択、サービス名の指定

    ※接続用URL
    http://(サーバーのIPアドレス):2001/HTTPAdmin

    松田:「IBM Web Administrator for i での設定はSQLバージョンと同様ですね。」

    出村:「Webサービス・タイプの指定が【REST】、Webサービス実装の指定が【WebサービスとしてのILEプログラムオブジェクト】が選択されていることを確認し、【プログラム・オブジェクトのパス】にIFS形式でプログラムのパス(呼び出したいオブジェクトのパス)を記載します。ILE RPGのプログラムは、ライブラリTSTAPIに入れていますので、IFS形式で書くと【/QSYS.LIB/TSTAPI.LIB/SYAP01R.PGM】になりますね。」

    渡邊:「ライブラリまで入力すれば、【参照ボタン】で保管されているオブジェクトを選択することができるのですね。入力完了したら、次に進みます。」

    出村:「リソース名はデフォルトのままで次に進みます。リソース名がリクエストの一部になることは、SQLの場合と同じです。次に進みましょう。」

  2. セキュリティ設定、パラメーターの使用方法、トリム設定

    出村:「ここでは、通信方式と認証方式を指定します。こちらもSQLの場合の同じですが、セキュア転送が【いいえ】であればhttp、【はい】であれば、httpsでしたね。認証方式は【*NONE】であれば認証無し、【*BASIC】であればBASIC認証となります。前回同様テストですから、セキュア転送【いいえ】、認証【*NONE】で次に進みましょう。」

    出村:「ここではパラメーター名が表示されます。パラメーター名は、先ほど説明したPCML情報をIWSが読み取って表示しています。」

    渡邊:「なるほど。プログラム上でパラメーターと表現していた部分ですね。」

    出村:「そうです。ここでは、それぞれのパラメーターにおいて、入力、出力を選択します。今回は、【syaibn】のみが入力で、他はすべて出力になります。」

    松田:「社員番号の使用法のみが【入力】になっているのは、冒頭のご説明の通り、社員番号【syaibn】をパラメータとして受け取り、社員名、社員名カナ、メールアドレスを物理ファイルから検索し応答するためですね。隣には、該当するソース内容を記載しています。次に進みましょう。」

    出村:「新サービスの配置の画面では、トリムの設定含め、デフォルトのまま次に進みます。」

  3. サービス詳細設定、利用ユーザーIDの選択、ライブラリー・リスト設定

    出村:「こちらは詳細設定の画面です。【HTTP応答コード出力パラメーター】にはレスポンスステータス【resStatus】を入力します。加えて、入力パラメータ・マッピングを設定します。パラメータ【syaibn】を【syainno】にマッピングします。必要な場合、デフォルト値の設定も可能です。【syainno】については、URLで指定するパラメータ【syainno=社員番号】のようになります。次に進みましょう。」

    出村:「ここでは、ILE RPGのプログラムを実行するユーザを指定します。今回はサーバーのユーザーIDを使ってILE RPGのプログラムを実行するため、【サーバーのユーザーIDを使用】を選択します。IBM i 内のユーザーを使う場合は、【既存のユーザーID】を使います。次に進みましょう。」

    出村:「ここでは、ILE RPGのプログラムを実行する上で、ライブラリーリストに追加するライブラリーがあれば追加します。追加する位置を選択して、追加ボタンから追加するライブラリーを指定します。複数のプログラムを動かす際等は漏れのないようリストに登録しましょう。今回は、【TSTAPI】が入っていればOKなので次に進みます。」

  4. WEBサービスから受け取る情報について、設定の最終確認

    出村:「詳細は割愛しますが、ここではWebサービスからその他ILE RPGのプログラムが受け取りたい情報があれば選択してください。今回は、デフォルトのまま次に進みます。」

    出村:「これまで設定した情報の最終確認画面に推移します。問題なければ、【完了】を選択して下さい。しばらく時間がかかりますが、待ちましょう。」

    松田:「インストール中になっている様子が確認できますね。」

    渡邊:「該当のサービスが実行中に切り替わったことがわかりますね。」

    松田:「ここまで作成したサービスはIBM i のどこかに保管されているのでしょうか。」

    出村:「はい、作成したサービスはアプリケーションサーバーのフォルダに保管されます。IFS上に保管されるので、オブジェクトリンクコマンドWRKLNKで確認が可能です。」

    コマンド例:

    WRKLNK OBJ('/www/IWSLAB1/webservices/services/SYAPI01R')

    松田:「IFS上にWeb API関連のオブジェクトが生成されているのですね。」

    出村:「ここまで一通りWeb APIを作成してきましたが、ここからは実際に作成したWeb APIを使ったテストを行いましょう。VS Codeを開き、WEBサービスのURLをVS Code上に貼り付けてください。」

    出村:「さらに、社員番号のパラメータに値を入れる必要があるので、下記のように具体的な社員番号を入れた形で【Send Request】を実行します。」

    渡邊:「SQLの時と同様に、結果が右側に表示されましたね。」

    松田:「今回の実行結果と前回SQL文でAPI作成した際の実行結果と比較してみると、出力結果は同じ内容になっていますね!」

    <前回の実行結果>

    渡邊:「存在しない社員番号でもテストしてみました!社員番号500番を入れたところ、該当するデータがないのでエラーを示す404が表示されました。」

    松田:「エラーも含め、きちんと想定通りの結果になっていることが確認できましたね!」

    出村:「ILE RPGでもREST APIサーバが作れましたね。IWSでSQLとILE RPGで作る方法を説明しましたが、文字コードのお話をしたいと思います。REST APIが扱うJSONの文字コードはUTF-8が実質的な標準です。一方で、Db2 for iやIBM iアプリケーションは文字コードはEBCDICとなります。IWSは、この2つの文字コードを取り持ち、変換しています。」

    渡邊:「IWSは文字コード変換をしてくれているのですね。そういえば、ILE RPGでは、JSONのパラメータを意識しなくても作成できていましたね。」

    出村:「そうなんです。ILE RPGとJSONのパラメータを変換してくれています。IWSは、IBM iユーザがREST APIサーバを作る手間を大幅に軽減してくれていますよ。」

次回予告

出村:「今回はILE RPGを使ってREST APIを実装する方法を学びましたが、いかがでしたか?」

松田:「ILE RPGでも全く同じように結果が出力できますが、個人的にはSQL文のほうがシンプルで実施しやすいと感じました。ただ、同時に、複雑な内容になってくる場合はILE RPGプログラムで作りこむ必要があるのだと思います。」

渡邊:「ILE RPGを使ったREST APIが思ったよりも作りやすく、既存のプログラムを活用できるのがとてもよかったです。色々活用できそうです。」

出村:「そうですね、今回は物理ファイルからの情報参照でしたが、次回はAPIプログラムについてRDIでデバッグを実施したり、既存データの変更をしたりしてみましょう。」

次号へつづく


出村 宏志
ベル・データ株式会社 アプリケーションビジネス本部DX推進部

1995年ベル・データ㈱に入社
1999年より約15年ほどIBM i のインフラエンジニアを経験し、その後アプリケーション開発に従事。キャンプで焚火をしながらボーっとするのが最近の楽しみです。

渡邊 隆
ベル・データ株式会社 アプリケーションビジネス本部DX推進部

ネットワーク、オープン、セキュリティ、DX関連のプリセールス、構築、サポートを経て、現在はDX推進部に所属。工場DXソリューションを担当しながら、初挑戦のIBM i に格闘中。休日は、クラッシックピアノの練習や仲間との弾き合い会を楽しんでいます。

松田 三奈
ベル・データ株式会社 アプリケーションビジネス本部DX推進部

新卒よりインフラエンジニアとしてPowerサーバーのリプレイスに従事し、現在はDX推進部に所属。休日は、カフェ巡りや旅行など天候に関わらず外に出てアクティブに活動することが好きです。

あわせて読みたい記事

PAGE TOP