IBM i 固有の制約事項をなくし、可変・ルーズな開発環境へ
佐々木 幹雄氏
日本アイ・ビー・エム株式会社
システム事業本部
Power Systemsテクニカル・サポート
コンサルタントITスペシャリスト
ILE RPG機能拡張の3つの方向性
筆者個人の見解として近年のILE RPG 拡張の方向性をまとめると、以下の3点に集約できると考える。
①SoEに最適化された従来の固定・厳格なコーディング一辺倒から可変・ルーズなコーディングへの拡張
②オープンソースコミュニティを模した開かれた・柔軟な機能拡張
③IBM i の特異性を廃した開発環境の標準化
一例として、RPGⅢの配列は基本的に要素数は固定であった。伝票イメージの業務では業務設計開始時点で処理するレコード数が規定され、それによってコードの無駄を省き潜在的バグを回避した高品質なアプリケーションも開発可能であった。
これに対して昨今のSoE領域のアプリケーションにおいては処理レコード数は実際に処理するタイミングでしか確定できないケースも多く、アプリケーションの開発時点で処理レコード件数を制限してしまう固定長的なプログラミングは適合性が低い。RPGⅢのみならずILE RPGでも、従来は可変配列要素数を実現するにはAPIが必要であった。
①の例の1つとして、IBM i 7.4で可変次元配列の拡張により配列要素数が動的に変更可能となった。さらにこの機能は②に述べたRFE(Request For Enhancement:コラム参照)という公開サイトに投稿されたIBM社外のコミュニティメンバーによる機能拡張要求と投票(vote)の結果、実現されたのである。
③は言い換えると、DevOpsに対応する各種ツールから操作が難しいIBM i 固有の制約事項をなくすことである。たとえばプログラムソースをAS/400時代からの物理ソースファイルでなく、Unicodeのテキストファイルで編集・管理可能に拡張されている。
①~③の3点はILE RPGに留まるものでなく、IBM i 7.4機能拡張のあらゆる面で確認できる。以下、アプリケーション開発機能や変更点の例を解説しよう。
ILE RPGの機能拡張
可変次元配列 DIM(*AUTO:)、DIM(*VAR)
配列要素数がプログラム実行時まで確定できないケースでは、従来、%SUBARR組み込み関数を利用するなどの工夫が必要であった。今回IBM i 7.4で拡張されたDIV(*AUTO:)、DIM(*VAR:)を使用すると、配列要素数が可変するプログラミングが容易となる(図表1)。
以下に例を挙げる。
①配列要素数を戻す%ELEM 組み込み関数に値を代入、可変次元配列 arr の要素数を増減する
[解説]
・▮1:配列要素数の最大は100
・▮2:配列の現在の要素数は%ELEM組み込み関数を使用して変更できる
②例: DIM(*AUTO)で定義された配列に指標として*NEXT を使用
[解説]
・▮1:代入ステートメントのターゲットの場合 *NEXT を指定し、次の要素に代入できる。
・ファイル CUSTFILE にフィールド NAME がある前提。
③%ELEMの第2パラメータに*ALLOCを指定し,配列に割当てる要素数を動的に増加させる。
[解説]
・▮1:配列に割り振られる要素数を 100、(この時点の要素数は0)に設定
・▮2:プロシージャに渡される 2 番目のパラメータでプロシージャが設定できる要素数を100に指定。 プロシージャは設定した要素数を返す
・▮3: *KEEP を指定した %ELEM で要素数を設定
ILE COBOLの機能拡張
ILE COBOLは、IBM i 7.3でも、プロシージャに渡すパラメータ数を返すための組み込み関数PARMSの追加や、プロシージャ呼び出しの最大パラメータ数を400から16,382へとする拡張、Unicodeや多国語対応を意識した拡張などを行ったが、IBM i 7.4においても、SETADDRESS OF…ステートメントを動的に実行するのに似たALLOCATEステートメントの追加、FILLERデータ項目をINITIALIZEステートメントで初期設定できるようにする拡張、ユーザー指定の順序でテーブル・エレメントを整列させるテーブルSORTステートメントなどの拡張を行った(図表2)。
ほかにも新しい予約語の追加、GO TOステートメントを廃した構造化プログラミングステートメントを実現するための拡張、インラインコメントの追加など、オープン系言語を意識したコーディングしやすさの向上が図られている。詳細は図表2やIBM Knowledge Center の「ILE COBOL解説書」を参照してほしい。
Java、Web関連の機能拡張・変更
JTOpen JDBCドライバ代替フェイルオーバーサポート
Toolbox for Javaのオープンソース版、JTOpen(jt400.jar)のJDBCドライバが、代替フェイルオーバーをサポートするよう機能拡張された。従来は、DBサーバーとの接続が失われたら、アプリケーションレベルでバックアップ・サーバーとの新しい接続を再度確立する必要があった(図表3)。
この機能では、使用する代替サーバーのリスト、自動的な切り戻し(スイッチバック)、最大試行回数、再試行間隔を指定できる。さらに、Db2 Mirror for i と組み合わせたアプリケーションHA環境の構築にも適用可能である。もちろん、Db2 Mirror for iを利用しない一般的なDB HA構成の構築にも利用できる。
JTOpen*1では、モバイルなどフットプリントの小さなシステム向けにJTOpenLiteというパッケージも提供されている。JTOpenLiteは、JDBC接続などIBM i資源への主要なアクセスだけに機能を限定したパッケージで(jtopenlite.jar)、Java 8版で約500KB弱と軽量なためモバイルデバイスなどでの利用に適している(ちなみに、Java 8版JTOpen 9.8のjt400.jarファイルのサイズは5MB弱)。
ところで、IBM i 7.4はJava 7以前をサポートしない。IBM iの組み込みAPサーバーである統合Webアプリケーションサーバーなど多くのIBM i Java関連ソフトはデフォルトのJVMがJava8に変更されたので、IBM Technology for Java 8.0 64bit、JV1オプション17の導入が必要になる。Javaマイグレーションが行う場合は個別対応が必要である。
PASEのデフォルトもCCSID 1208、 Javafile.encodingはUTF-8に変更されたため、IBM i 7.3以前から移行する際は図表3の参照先情報を確認してほしい。
IBM iにインストールするWASもWAS V8.0以前はサポートされなくなり、インストール可能なのはWAS V8.5またはV9.0以降になる。WASのオープンソース版であるLibertyプロファイルのサポートレベルは17.0.03である。
Notes DominoのIBM i 7.4サポートは原稿執筆時点(2019年7月)では未発表だが、IBM i 7.2/7.3はDomino 10.0.1以降をサポートしている。
*1 JTOpen:の紹介記事:https://ibm.co/2KtjEms
RESTによるSQLリクエスト
~クラウドや他システムとの連携を強化するデータベースへのAPI接続
IBM i 7.3ではクラウドや他のアプリケーションとの接続を強化するRESTful APIで、RPGやCOBOLなどのプログラムを呼び出す機能が追加された。
IBM i 7.4では新たに、データベースのデータをAPIで呼び出せるようになった。仕組みとしては、IWS(統合Webサービス)サーバーが外部のアプリケーションからのジョブをHTTP接続で受信したことをトリガーとして、データベースにSQL接続するものである。
これによりクライアント側にDB2 for iへ接続するためのドライバが不要となり(同時にクライアントの種類の制約も取り払われた)、IBM i側でもDBアクセス用のプログラムを用意しなくともHTTP/REST経由でDB2 for iのデータを照会・更新できるようになった。開発の容易性が高まるなどのメリットを享受できる。
ILE CLの機能拡張
ILE CLコンパイルやコマンド作成(CRTCMD)時のILE RPG、ILE COBOLなどと同様に、IFSのテキストファイルからコンパイルが可能となった(図表4)。
また、ILE CLでは図表5のように%PARMS組み込み関数を利用してプログラムに渡されたパラメータ個数を戻せるように拡張された。
DBの機能拡張・変更
SQL関連のパフォーマンスに関連する諸機能が更改されている(図表6、本記事の最後に記載しています)。代表的なところでは、SQL予約語が変更され、システム関連のスキーマ名も更新されている。このほか、下記のように多数の変更点がある。
・IBM i 7.3以前でSQLの動作を制御できたQAQQINIファイルは、IBM i 7.4では参照されなくなった(QAQQINIファイル自体は使用可能だがシステムから参照されない)
・テンポラリストレージ最大値の管理方法が変更になった
・SQLプランキャッシュサイズの調整方法の変更
・OLAP関数の強化やSQL予約語の変更
従来バージョンと非互換となった変更点も存在するため、IBM Knowledge Centerなどで確認してほしい。
OSコマンド等の拡張・変更
DSPLOG コマンドの検索機能向上
従来、DSPLOGコマンドでログを検索する際、たとえば特定のユーザーのログを確認した場合、ジョブ名、ユーザーID、ジョブ番号の3つを指定する必要があったが、いずれか1つの指定でも検索可能となり、検索の効率が飛躍的に向上した(図表7、本記事の最後に記載しています)。
一見地味な機能拡張だが、IBM i 7.4の発表時にユーザーおよびIBMパートナーの技術者とIBMがディスカッションをした際に「最もうれしい機能拡張」のナンバーワンに挙げられた機能拡張でもある。
また、IBM i 7.4のOS提供コマンド類でOUTPT(*PRINT)およびOUTPUT(*)の出力結果が以前のバージョンと異なる場合があるため、バージョンアップを検討するユーザーは注意していただきたい。詳細はIBM Knowledge Centerで確認が必要である。
・・・・・
COLUMN
RFEについて
RFE(Request For Enhancement)とは、IBM製品全般について機能拡張・改善要望を受け付けるサイトである。サイトに登録されたユーザーからの開発要望はだれでも閲覧でき(IBM developerWorksのID登録が必要)、気に入った要望に投票可能である。登録された要望は、Submitted → Under Consideration → Deliveredと、検討ステージが確認できる。
Part 3で紹介する可変次元配列も、RFEから実現した機能である。投票数が多いほど機能実装される可能性が高まるので、ぜひご自身で閲覧・起票してみてほしい。戦略として会社の同僚やコミュニティによる組織票も有効な戦法だ。
●IBM RFE Community Server & Systems Software
https://ibm.co/2H3IU0J
佐々木 幹雄氏
AS/400誕生とほぼ同時期からIT業界に関わる。IBM i やPC、ネットワーク機器など一般企業のIT基盤の提案・構築、アーキテクトなどを幅広く経験。IBM i エバンジェリストとしての活動もある。
Appendix
図表6 データベースの拡張
図表7 OSコマンドの変更
[i Magazine 2019 Autumn(2019年8月)掲載]
・・・・・
PART 1 オールインワンの軸は曲げずにDXを支える技術の幅を拡大
三ヶ尻 裕貴子氏
日本アイ・ビー・エム株式会社
システム事業本部Power Systemsテクニカル・セールス 部長