IBM iとRPGがWebサービスに主要な強みを提供する理由、および他のプログラミング言語とフレームワークについて考えます。
04/04/2022 マイケル・シュミット
また新たなウェブサービスが本番稼動し、開発者の一日が始まる。特別な作業ではありませんが、今回のプロセスは順調に進みました。 何が作業をそんなに容易にしたのでしょう? 他のプログラムではなく特定のプログラムを使用することを決定した理由は何でしょう? この記事では、プラットフォームとしてIBM i、プログラミング言語としてRPG、選択したWebサービスフレームワークとしてILEasticを選択した理由を説明します。 要件、長所と短所を取り上げ、他のプログラミング言語とフレームワークを簡単に見ていきます。
問題のWebサービスは、顧客の配送先住所の提供に関するものであり、特別なものではありません。 データはIBM iサーバー上の表に保管されています。
技術的要件のいくつかは下記のようなものでした:
- オンサイトでホストされる(ローカルでしか使われないので)
- IBM iのDb2へのアクセスをサポートする
- JWTをサポートする
- JSONを生成する
- OPTIONS HTTP要求をサポートする
- RESTのような要求パス
- OpenAPIと互換のWebサービス
RPGとIBM iを選択する
サービスを実行する必要のあるプログラミング言語またはプラットフォームは要件にありませんでした。 選択肢にあったプログラミング言語はJava、TypeScript、RPGでした。
上記のすべての選択肢の中で、RPGがこのWebサービスに最適であると判断しました。
RPGの利点のいくつかは次のようなものです:
- データベース接続プールあるいは構成に煩わされることのない、常に利用可能なデータベース接続
- ネイティブの実戦の試練に耐えたHTTPサーバーフレームワーク:ILEastic
- 高速で機能豊富なJSONライブラリー:noxDB
- 非常に少数の依存関係(他の4つのソフトウェアライブラリー)
- 追加のツールが不要
- 良好な応答時間(この特定のWebサービスでは<20ms)
- メモリ使用量が極めて小さい(<10 MB)
- デプロイとメンテナンスのための追加のトレーニングやツールが不要
プラットフォームの選択について:条件を満たすプログラミング言語はすべてIBM iで利用可能です。 IBM iが最も安全で最も安定したプラットフォームの1つであることを知っているので、Webサービスを実行するためにIBM iを使用するという選択をするのは非常に簡単でした。 IBM iには、後方互換性があるという実績もあります。つまり、新しいWebサービスへの投資は、5年または10年(そして、おそらくそれ以上)も生き残ります。
ほとんどのアプリケーションはデータベースに支えられているので、IBM iに統合されたDb2はWebサービスに最適です。 ネイティブプログラミング言語であるRPGと組み合わせると、データベース関数はRPGの最優先グループに属するので、超高速のデータベースアクセスができます。
RPG:最小限の依存関係
RPGについて私が最も気に入っていることの1つは、追加のツールを必要とせず、非常に僅かな、かつ管理しやすい依存関係があることです。 数字を見てみましょう:
- RPG:4つの依存関係
- Java: 40を超える依存関係(Helidon、Quarkus)
- TypeScript:400を超える依存関係(Express)
注:これらの数値は、データベースにアクセスをするWebサービス用の一般的な設定を反映しています。
「別のフレームワークを使用すれば、もっと少ない依存関係で済ませられる」と言うかもしれません。 ええ、恐らくそれは可能です。 ただし、これらの数値は、それらのフレームワークの基本機能を使用するプロジェクトからのものであり、データベースにアクセスするWebサービスプロジェクトの一般的な設定を反映しています。 目的は単純さでした。 より少ない機能とずっと多くの労力で、おそらくそれらの依存関係を減らすことができます。 しかし、単純さは開発時間の短縮につながり、多くのストレスを除く筈です。
私の意見では、RPGが断然これに勝ります。
RPGの追加トレーニングやツールが不要
WebサービスにILEasticでRPGを使用するもう1つの大きな利点は、それが既存のインフラストラクチャとツールにシームレスに一体化することです。
RPGで書かれたWebサービスプログラムは、もう1つのILEプログラムです。 特別なことは何もなく、魔法あるいは特別な治療は必要ありません。 他の通常のILEプログラムと同じように開始し、通常のプログラムの場合と同じように、IBM iサーバー上のワークロードに含めます。 IBM iサーバー上の他のプログラムと同じように管理およびモニターできるので、開発からDevOpsへの引き渡しが非常に簡単になります。
DevからDevOpsへ
DevOpsへの円滑な移行とWebサービスとの通信は、どちらも等しく重要です。
ILEasticは、綺麗なWebAPIを作成するために必要なすべてをサポートします。 Webサービスに一致するOpenAPI文書を作成するのは容易です。 そのような文書を設計するための無料で利用可能なツールがいくつかあります。 それらのいくつかは次の通りです:
このOpenAPI文書をSwagger UIプロジェクトと組み合わせると、Apache HTTPサーバーを使用してIBM iサーバーで簡単にホストできます。 仲間のフロントエンド開発者にSwagger UI URLを指し示すだけで、彼らは大いに満足する筈です。
OpenAPI文書を提供することで、サービス利用者の仕事がずっと簡単になりました。これは、Webサービスが他の残りの世界と互換性がある可能性が非常に高いことを示しています。
ILEasticを使いRPGで書かれたWebサービスには、明確な違いは何もありません。そして、それは良いことです。 それは他のWebサービスに似た感覚です。 このWebサービスはその他残りのアプリケーションやWebサービスと密接なまとまりがあるので、サービス利用者はこのWebサービスを使用するために新しいことを学ぶ必要はありません。
ILEasticとnoxDB開発
「何も特別なことはない」は、可能な最善の方法でILEasticを使った開発にも適用されます。 ILEasticは、サービスプログラムおよびコピーブックとして提供されます。 単にコピーブックをソースに含め、プログラムオブジェクトをサービスプログラムにバインドするだけです。 世の中にあるあらゆるツールを使用して、Webサービスプログラムオブジェクトを構築できます。 既存の環境(変更管理システムなど)に完全に統合されますが、MakeやBobのようなツールでもうまく機能します。
ILEasticのAPIは、適切に記述され、機能が豊富で、完全に文書化されています。 また、HEAD、OPTIONS、PATCHなど(あなたがこのトピックにどれ位深く入り込んでいるかにも依りますが)一般的に使用されないHTTPメソッドもサポートします。 プラグインシステムを使用すると、認証やCORSなどの一般的なタスクを単一ポイントで処理し、設定にプラグインできます。
ILEasticを使用するもう1つの利点は、コンテンツの作成に必要なものを何でも使用できることです。 ここで、JSONとXMLを解析して生成できるILEサービスプログラムであるnoxDBが登場します。 それは、SQLインターフースも備えているので、SQLからJSONを直接生成できます。 noxDBを使用すると、JSON出力を完全に制御できます。 開発は、お気に入りのOpenAPIエディターでWeb APIを設計し、次にILEasticとnoxDBを使って実装することから始められます。 ILEasticとnoxDBの組み合わせは、ピーナッツバターとゼリーのように定番の組み合わせです。 これ以上のものはありません!
調和する概念
さらに優れているのは、JavaまたはNode.jsの世界から来たときに、概念的に新しいことを学ぶ必要がないことです。 それは同じように機能します:組み込みサーバーを構成し、エンドポイント関数を記述し、関数へのルートを構成し、そして最後に(と言っても価値が少ない訳ではありませんが)サーバーを起動します。 ILE環境とIBM iにDb2があることで得られるすべての利点の他に、あなたは何が期待できるか既に分かっている筈です。
ILEastic上のWebサービスおよびその他
この記事があなたのすべての質問に答えたことを願っています。 ピーナッツバターとゼリーのような定番の組み合わせを手に取り、IBM iでいくつかの優れたWebサービスの調理を始めてください。 楽しんでください!
ILEasticに関する技術的な詳細をお探しの場合は、ここでチュートリアルを見つけることができます。
ILEasticとnoxDBの両方のプロジェクトはオープンソースであり、コードリポジトリにいくつかの例があります。
Webサービスを楽しんでください!
統合ウェブサービス(IWS)を使わずに、IBM iでRPG言語を使って簡単にWebサービスを提供できたらと考えたことはありませんか。今回ご紹介する、オープンソースのILEasticというIBM iのILE環境下でマイクロサービスの実行を支援するフレームワークと、noxDBというXML/JSONの解析、構築ライブラリーを組み合わせることで、容易にRPG言語によるWebサービスを開発することができます。(編集部)