RPG IV 7.1での機能強化ベスト7
「おじいちゃんの頃のRPGとは違うよ」というのを何度耳にしたことがありますか。どれくらいの人がアナウンス・レターを全て調べ、その詳細を考察し、コード中で新しい機能を試して(人によっては「遊んで」と言います)いますか。
OS/400 V3R1の導入以来、RPG IVの全てのリリースでRPGコンパイラに新しい機能が追加されています(そうです。当時はOS/400 at V3R1と呼ばれていました)。「新しい機能」とは軽微な調整やオプコードの変更ではなく、他の言語との統合(たとえばJavaやXML)、配列や複数回登場するデータ構造の新しい処理方法、二次元構造の作成機能、さらにはフリーフォーマットのC仕様の導入などといった重要な新しい機能の追加のことを言い、プログラミング(あるいはそれ以上にデバッグ時)における大きな生産性向上をもたらすものと証明されたもののことを言います。
RPG IV 7.1が2010年の4月に発表されたとき、Rational Open Access: RPG Editionに多くの注目が集まりました。しかしその他の機能も同時に数多く追加されたのです。本稿ではRPG Open Accessはもちろんですが、それ以上に、2010年以降RPGの初期のリリース7.1とそれ以後のPTFで導入された私のお気に入りの7つの機能強化について述べます。
配列の並べ替え
配列の並べ替えは私が気に入っている機能強化の一つで、初めて(給与計算の)RPGアプリケーションを作成した80年代にこれがあれば良かったのにと思います。そうすれば時間と労力を大幅に省けたと思います。
RPV IV 7.1ではデータ構造配列を並べ替えることができ、サブフィールドの一つをキーとして検索することもできます。たとえば、custDs配列をamount_owingサブフィールドをキーにして並べ替えるには次のように記述します。
また、custDs配列の中の要素についてaccount_statusフィールドの値が「K」であるものを検索するには次のように記述します。
検索と置換
文字列の中を検索して他の文字列に置換する処理をもっと簡単にできたら良いのにと思ったことはありませんか。たとえばメール・アプリケーションで使用する文字列を作成したり、要素を一度に置換するような標準的なフレームワークを構築したりしたとします。組み込み関数%SCANRPLがまさにこれを実行してくれます。以下の例はこの機能を紹介したものです。
あらゆるタイプの文字列パラメータを渡す
文字列パラメータを渡す際の暗黙変換機能がRPG IV 7.1で追加されました。この機能は、値渡しまたは読み込み専用の参照渡しで渡された文字列に対して動作します。この機能をもう少しわかりやすく説明した例を考えて見ましょう。
- このプロシージャはCONST UCS-2パラメータを使ってプロトタイプされています。
- このプロシージャが呼び出されたときにパラメータとして文字式が渡されます。これにより、UCS-2タイプのパラメータでプロトタイプしたパラメータと戻り値を持つ一つのプロシージャを作成することが可能となります。
- このプロシージャが呼び出されたとき、あらゆるタイプの文字列パラメータを渡すことができ、戻り値もあらゆるタイプの文字列変数に割り当てることができます。
この例を続けると、次に示したmakeTitleプロシージャはコンテンツを大文字に変換し与えられた長さの中で中央揃えにします。
Rational Open Access: RPG Edition
IBMはRPGインタフェースを開放して、プログラマがユーザー体験をいままでのリリースのRPGよりも拡張できるようにしました。アプリケーション・プログラマはRPG IVに、グラフィック、ウェブ、携帯、XMLなどといったインタフェースを含む従来の5250 telnet以外のインタフェースにデータを明示的に送信するように指示することができます(図1)。プログラマの創造力と現代のコーディング技術をビジネス・アプリケーションに適用すれば、ソリューションは無限にあります。
ではRPG Open Accessはどのように動作するのでしょうか。組み合わせるパズルは三つあります。結果を表示するプログラム、各データを転送するハンドラ、そしてRPGプログラムです。説明を簡単にするために、新しい画像を表示するところを詳しく見てこの三つのパズルのピースを見てみましょう。
- 新しい画像を表示するプログラム。デバイスが異なればサポート要件もさまざまなタイプがあります。たとえばブラックベリーの言語はiPhoneの言語とは異なりますし、両言語ともインターネット上で使われている言語とは異なります。データを処理してフォーマット化し、それぞれのデバイス向けに合わせて表示するプログラムが必要です。
- ハンドラ・プログラム。これは「データのキャッチャー」と考えてください。このコードはRPGプログラムから情報のバッファを受け取り、必要に応じて処理して表示プログラムに渡します。
- RPGプログラム。これは、F仕様で新しいキーワードを指定することで、OSが提供する標準のファイル・ハンドラを使わないようにコンパイラに対して実行時に指示するRPG IVプログラムでなくてはなりません。
多数のアプリケーション・プロバイダやお客様の開発部門で、今やRPG Open Accessが使用されています。RPGのプログラマがOpen Accessを使おうという動機となっている主な要因が二つあるようです。一つがあらゆる種類のモバイル・デバイスに対応していること、もう一つがRPGアプリケーションと他のデータベースとの統合を推進していることです。二の足を踏んでいるプログラマたちの理由は、Open Accessを使用するには他の言語やコーディング・テクニックの知識が必要となるということのようですが、移行を可能な限り容易にするための開発環境を提供するツール・ベンダーがあります。魔法の解決策がある訳ではありませんが、IBMの目指すところはプロセスをより簡素化して無駄をなくすことでこれまで一貫しています。前述の通り、ソリューションの選択肢を狭めるものがあるとすればそれはプログラマの想像力だけでしょう。
XML-INTOオプション
XMLドキュメントをRPGプログラムへ直接読み込む機能がRPG IV V5R4のコンパイラに追加されました。そのオプコードの一つがXML-INTOで、次のように使います。
バージョン7.1以来、新しい「オプション」がXML-INTO文にPTFとして追加されています。これらのオプションは、XMLドキュメントを指定したプログラム変数やデータ構造へのインポート結果にいろいろな作用を及ぼします。新しいオプションには以下のものがあります。
- datasubf: XML-INTOに対して、データ構造用のテキスト・データを受け取るためのサブフィールドの名前を指定します。
- countprefix: RPGデータ構造のカウンター・サブフィールドの追加を可能にし、データをプログラムに読み込む際にオプションとしたいものを細かくコントロールすることができます。
- ns: ns=removeとすると、一致したサブフィールドの名前の名前空間部分を取り除き、ns=mergeとすると、名前空間と名前の残りの部分を下線文字で結合します。
- nsprefix: XMLタグから取り除かれた名前空間を受け取るサブフィールド名の接頭語を与えます。doc=fileやns=removeと組み合わせて使用します。
- case=convert: アクサンやウムラウトがついたXMLタグ名中のアルファベット文字を、RPGサブフィールド名マッチング用のジョブのLANGIDSHRテーブルを使ってAからZにマップします。
CCSID
今日では、CCSID変換に置き換え文字を使用しなければならないときはRPGのステータス・コード50を設定します。文を変換するたびにステータス・コードをチェックするのは面倒ですし、どの文が変換されるのかを調べるのがいつも簡単とは限りません。以下の二つの新しいCCSIDCVTキーワードがH仕様に追加されました。
- CCSIDCVT(*EXCP): CCSID変換の結果が置き換え文字となった時に例外とする。
- CCSIDCVT(*LIST): モジュール中のすべてのCCSID変換の一覧を提供する。
この二つのオプションを、たとえばCCSIDCVT(*EXCPT:*LIST)といったように同時に使用することも可能です。
日付、時刻、タイムスタンプの性能
日付、時刻、タイムスタンプ(DTZ)の操作は、DTZフィールドを使用するたびにその値を検証するため、費用がかかります。この処理を容易にするために、IBMは新しいH仕様のキーワードVALIDATE (*NODATETIME)を追加しました。これによりRPGコンパイラは日付、時刻、タイムスタンプのデータを(可能な限り)英数字とみなして扱うことができます。
このキーワードを使用する際は、不正なデータを必ずしも検出できるわけではないという点に注意してください。この機能を使用する前にdeveloperWorksのドキュメント「Enhancement for Date, Time, Timestamp that can improve performance (but use with caution)」
を必ずお読みになり、このキーワードを追加したソースファイルをすべて注意深く分析してください。
RPG IV 7.1の一番良いところ
本稿では、RPG IV 7.1とそれ以後のPTFでの機能強化のうち私が気に入っているものをいくつかご紹介しました。コンパイラ・チームはたくさんの新しい機能を追加し続けているので、見過ごしやすいのです。しかし私にとって一番嬉しいのは、RPG IVがビジネスア・アプリケーション開発のための堅牢で強力なコーディング言語へと進化していることです。RPGは複数の言語やモバイル・デバイスを使用でき、他の場所からデータにアクセスし、日付や文字列を変換し、ビジネスを運営していく上で最適化されたアプリケーションを作成することができます。RPGのレッドブックの記事の一つからその題名を拝借しましょう。「RPGでそんなことが全部できるって誰が知っていましたか」。