「RPGは古い」と思っている方、本当に「現代のRPG」をご存知でしょうか?現代のアプリケーションを構築するという要求に応えるべく、RPGは弛まず進化し続けています。今回は、「現代のRPG」および近年盛んに喧伝されているモダナイゼーションの意義についての洞察を与えてくれる記事をご紹介します。(編集部)
プログラミング言語RPGはモダナイゼーションに向けた重要な基盤を提供しています。
ジョン・パリス
今日、RPG開発者達が引退し始めており、その交代要員を雇うのが困難だと気付き出すという、お馴染みの問題に多くのIBM i 使用企業が直面しています。
思うに、彼等の問題は、間違ったものを探している点にあります。彼等にはRPG開発者は不要なのです。彼等には開発者が必要なのです。具体的に言えば、必要なのは次期バージョンのFacebookやインスタグラムではなく、ビジネス・アプリケーションを構築したいと思う開発者です。
この時点で、現代のプログラマーはRPGでプログラムを書きたいとは思わないとあなたは考えているかもしれません。もし私が幾つかの会社で依然として実行されているタイプのRPG(即ち、固定フォームのカラム式コードで、約30年以上前にSystem/36やSystem/38で動いていたものとさほど大きく変わらないもの)について語っているならば、これに同意せざるを得ないでしょう。私だってそんな古いやつでプログラムを書きたくはありません。
幸運にもそうする必要はありません。なぜなら、私は今日のRPGについて語っているからです。これは完全にフリーフォームの言語で、現代のプログラマーにとても馴染みのある外観を呈しており、ほとんどの人は難なくそれを習得するでしょう。
どうしてこんなことになったのか?
IBM i というプラットフォームの最大の強みの1つは、30年以上前に実行していたのと同じプログラムを変更なしに実行できることにあります。
IBM i というプラットフォームの最大の弱点の1つは、30年以上前に実行していたのと同じプログラムを変更なしに実行できることにあります。
このことが、多くの企業が「壊れていなければ修理するな」という考えの下に構築された信念をきっちり守るという状況を招きました。その結果、彼等のプログラムは30年以上前のそれとほぼ同じものの様に見えます。
開発者達が、もっと現代的な標準を受け容れたいと思ったときでさえ、(単にあまりにも怠け者で新しいテクニックを学ばない)古株の開発者を幸せな気分にし続ける必要があると考えている管理職に妨害されることに時々彼等は気付きます。
根本的なシステム要求は常に変化しているので、他のプラットフォーム、例えばWindows、を使っている開発者達は、物事を放置しておくという贅沢を手にすることは滅多にありません。その結果、完全に問題の無いプログラムを、単に新しいOSのリリース上で動かすだけのために修正するのは、彼等にとって珍しいことではありません。このことは、間違いなく彼等が有しているコード基盤(現役のプログラミングコード)を継続的に進化させ、絶え間なくモダナイズするという結果をもたらしています。これは、正しい理由で起きたことではないかも知れませんが、少なくとも起きたのです。もちろん、これは必要な開発者の数が、実行されている仕事量に対して全く不釣り合いなものになる傾向があることも意味しますが、私はそれに賛成しません。
お客様から彼等のコード基盤のモダナイズについてアドバイスを求められたとき、コード基盤に大幅なメンテナンスを行う場合には、常に最新のプログラムを買うという方針を採用するよう提案することがよくあります。もちろん「大幅」の定義は会社によってまちまちですが、相当量のテストを必要とする何かが差し迫った対象であることは間違いありません。これにより、古いRPG言語のより難解な側面についての知識があまり必要なく、新しいRPGプログラマーにとって把握し易い、より現代的でもっと保守管理しやすいコード基盤になります。
RPG開発者達の交代に関するこの記事で、この領域における私たちの幾つかの経験についてもっと知ることができます。
「コード基盤のモダナイズ」にどれだけの作業を伴うのか?
以下の様に、RPGには5つの主要な種別が世の中に存在します。
- RPG Ⅱ(すなわち、S/36の遺産)
- RPGⅢコード(すなわち、RPG/400)
- 固定フォームのRPG Ⅳ(ILERPG)
- RPG Ⅳ‐演算仕様書だけフリーフォーム
- RPG Ⅳ‐完全なフリーフォーム
コードを最新かつ新しいRPGプログラマーに理解可能なものにする(つまり、レベル#5に到達する)のに必要な総作業量は、この5つのレベルのどれについて話をしているかに依ります。
RPGⅡは取り扱いが最も難しいことが多く、通常は変換するより書き直しをすることをお勧めします。なぜなら、たとえ変換ツールを使っても、変換には膨大な手作業が必要になる可能性があるからです。
RPGⅢコードがまだ1本でも残っているということには弁解の余地がありません。まったくありません。RPGⅢから固定フォームのRPGⅣへの変換は単純であり、小さな非互換性の問題は良く知られており、よく理解されています。何だかんだ言っても、RPGⅣが最初に発表されてから25年以上経っているのです。悲しむべきことに、幾つかのソフトウェア・ベンダーは、自社の製品をこの状態のまま放置することを許してきました。
固定フォームのRPGⅣからフリーフォームRPGに移行する作業はツールに任せるのが最善であり、多くの優れたツールが無料ないし安価な料金で利用可能です。私は個人的に次の3つの異なるツールを使ったことがあります。Limonaソフトウェア社のRPGツールボックス、Arcad社のトランスフォーマー、Craig Rudledge社の無料変換ツールがそれです。これらはすべて良い仕事をします。より良いツールは、あらゆる非互換性を処理でき、堅実な動くコードを保証します。1つのツール(トランスフォーマー)は、どんな迷子のGOTO操作に出会ってもこれを変換できます。
固定フォームの宣言からフリーフォームへの移行は単純なプロセスであり、操作の100%の親和性を維持しながら同様のツール・グループを使うことができます。
これで現代的RPGが手に入るでしょうか?答えは否です。しかし、それによって遥かに理解し易く、メンテナンスし易いコードが手に入りますし、優れたモダナイゼーションの基盤を形成することができます。新しいRPGプログラマー達は、極めて短時間でそれを問題なく理解し、基本的なメンテナンス作業を実施するでしょう。近年、パートナーのスーザン・ガントナーと私は、ポール・ツーイなどの同僚と共に、数多くの「IBM i とRPG初心者」向けトレーニング・セッションを実施してきました。私たちはC#、C++、.Net、PHP、およびPythonプログラマーに現代的RPGの楽しさを教えてきました。ほとんどの人が、容易かつ楽しくそれを身に着けています。
ビジネス・プログラミングに対する順応性のある開発者達は、ビジネス計算をコーディングする際にRPGが提供する簡易性に喜びの声をあげます。RPGは(たとえば)通貨値を元々理解しているので、単純な「単価X数量」といった計算をする場合でさえも正確な結果を得るために関数ライブラリを必要とする言語と比べ、作業がとても楽になります。
このようにしてコード基盤を進化させるやり方は、モダナイゼーションの実行可能なアプローチとして次第に認識されてきています。それがどれほど効果的であり得るかをある程度知るには、Micro Focus社やStandishグループのこの最近のレポートを読んでください。そのような進化の重要な段階で、RPGコードをモダナイズすると私たちが言う場合、私たちが意味していることが分かるでしょう。
RPGは本当に現代的言語か?
今日のRPGは、間違いなく我々古い人間が学んだ言語とは違います。それは批評家たちが好んで描く古臭いカラム形式の言語から長い長い道のりを歩んできました。
現代的プログラミング言語に典型的に期待されるかもしれないものという観点からすると、欠けている唯一の主要な機能はオブジェクト指向(OO)です。正直なところ私は、これは必ずしも悪いことだとは思いません。OOはGUIを作るといった状況ではうまく機能しますが、ビジネスプロセスのユーティリティは大きく不足しています。
では、今日のRPGの現代的機能のうちで、RPGを中傷する人達が知らぬが仏の状態のままにしておきたいものは何でしょうか。その一覧は次の通りです。
- 埋め込みSQL
- 広範な(そして絶えず増え続けている)一連の組み込み関数
- カスタム関数ライブラリを作成、利用する機能
- CおよびJava関数を直接利用する機能
- XMLを処理するために組み込まれた機能
- パラメータとしてのファイル
- プロシージャのオーバーロード
- 動的配列
- 入れ子状のデータ構造(構造体)
- JSONのような構造化されたデータを処理、生成するための組み込み機能
そしてこの一覧には、ウェブサービスや現代アプリケーションの開発に必須のその他の要素を簡単に提供および利用できるようにする、増大中のオープンソースRPGオファリングの基盤が含まれていません。
RPGは単なる別の言語ではない
RPGは、データ中心のビジネス・アプリケーションを開発するのに理想的な数多くのユニークな機能を備えています。単なる別の言語としてRPGに焦点を当てるのは、私にとって不本意です。しかし、私のここでの任務は、以下の2つの主要な点について述べることでした。
- 今日のRPGはPHP、Python、C#などのような、もっとありふれた言語に近くなっています。そのため新しい開発者達は現代のRPGを容易に習得できます。そして、ひとたび現代のRPGを学べば、古いRPGを理解することは彼等にはずっと容易です。
- 既存のRPGコードをモダナイズすることは、絶対必要かつ比較的容易なことです。このことは、新しいプログラマーが貢献するのを容易にするだけでなく、時間の経過と共にアプリケーションを更にモダナイズするための強固でより柔軟な基盤を提供します。