RPG はどんな言語?
RPG(Report Program Generator)は初期モデルから数えると50年以上の歴史を持つプログラミング言語です。いわゆる「手続き型言語」であり、処理をプロシージャ単位で記述し、モジュールとしてまとめます。実行単位であるプログラムはこのモジュールから構成されます。このモジュール性により、複雑なプログラムも保守性を確保しつつ容易に開発が可能です。 RPG 言語は、企業の基幹を支えるシステムを構築する際に使用されます。基幹システムの領域は企業にとってとても重要なものであり、なにより安定稼働と資産継承を実現しなければならない分野です。IBM i はこの基幹システムを30年近くにわたりサポートしてきた実績を持つ OS であり、今後も IBM によって継続サポートが約束されています。RPG 言語はこの IBM i で利用可能な言語で、OS 同様に継続して機能拡張を約束されているのです。RPG のバリエーション
RPG には3つのモデルがあり、それぞれ今も現役で利用されています。一般的に新しいモデルが発表されると古いモデルの言語は使われなくなりますが、RPG は資産継承が重要なファクターなので、OS がバージョンアップしても古いモデルはそのまま利用可能です。 現在稼働しているプログラムは RPGⅢ で作成されたものがまだまだ多いと思いますが、今後は RPGIV で作成されたものがメインとなっていくでしょう。先ほど紹介したモジュール単位の開発は、RPGIV のみが対応していますので、これから新規開発する際には RPGIV を選択すべきです。 RPGIV には書き方が二種類あります。ひとつは前のモデルの RPGIII との互換性を重視し、プログラム・コードを定位置記入形式で記述するものです。これは、各桁にそれぞれ意味をもたせ、どの桁に何が書かれているかによって処理を記述していきますので、コードが少なくてすむ反面、各桁の意味を知らないと直感的に処理内容を把握できないという欠点があります。 もうひとつは他言語と同様に桁位置に依存せずにソースを記述する方法で、この方法で作成するプログラムを定位置記入形式と区別するために FFRPG と呼んでいます。FFRPG は Free Form RPG の略です。 この連載で紹介するサンプル・コードはすべて FFRPG です。RPGIII の技術者の方にも、これから言語学習を始める方にも、そして他言語の経験者の方にも理解してもらえるものにしていきたいと思っています。プログラムの作成手順
実際のプログラムを作成する前に、作成手順と事前準備について確認しておきましょう。 RPG はコンパイラー型の言語です。Java と同様にソースコードを記述し、コンパイラーを使用して実行可能な形式に事前に変換します。Java の場合は、コンパイラーは実行マシンを選びませんが、RPG のコンパイラーは IBM i でのみ利用可能です。これを踏まえてプログラムの作成手順をまとめると以下のようになります。- プログラムのソース・コードを作成
- IBM i のディレクトリにソースを転送
- IBM i 上でコンパイル
- IBM i 上で実行
事前準備
まず、自習環境設定編の資料を参照して開発環境の準備をしましょう。 事前に行わなければならない作業は以下の通りです。- IBM i Access for Web mobile にアクセスし、初期パスワードを変更する
- IBM i Access for Web mobile で5250 にアクセスしサイン・オンできるか確認する
- Orion への接続およびユーザーの登録、エディタの設定とプロジェクトの作成
/QOpenSys/QIBM/UserData/OPS/Orion/serverworkspace
上記ディレクトリ配下にユーザー毎に専用のディレクトリが作成されます。 この例では、ユーザー icafe00001 と icafe00002 用にディレクトリが作成されていますが、ユーザー名の頭2桁でグループ化され、さらにユーザー名と同名のディレクトリ配下に必要な情報が json 形式で作成されます。プログラム・ソース・ファイルは OrionContent ディレクトリ内にフォルダーを分けて保存されることになります。 コンパイルする際は、この長いディレクトリを絶対パスで指定する必要があります。例えば、上記例で icafe001.rpgle への絶対パスは以下のようになります。/QOpenSys/QIBM/UserData/OPS/Orion/serverworkspace/ic/icafe00001/OrionContent/icafe/icafe001.rpgle
これを毎回指定するのは大変なので、以下のようにパスを2分割し、サイン・オン後は前半部分が現行ディレクトリとして設定されるようになっています。 この結果、毎回設定するのは上記例では icafe/icafe001.rpgle です。Hello Free Form RPG World!
最初に作るプログラムは「Hello Free Form RPG World!」です。文法解説は今後行いますが、とりあえず用意したコードを書いて作ってみましょう。 それでは、Orion にログインし、自習環境設定編に基づいて作成した icafe プロジェクト内に icafe001.rpgle というファイルを作成して上記コードを記述しましょう。タブ・キーを使ってコードにインデントをつけ、見やすく記述してみてください。 Orion は、文字を入力するたびにファイルが保存されますので、入力し終わったらすぐにコンパイルすることができます。 入力が終わったら間違っていないことをもう一度確認してください。 それでは次にコンパイルを行ってみましょう。これも自習環境設定編を参考に IBM i Access for Web にアクセスし、5250 セッションを起動してサイン・オンします。サイン・オン後の画面は以下のとおりです。 コンパイルはオプション1を実行します。1のリンクをクリックするか、左下の入力域に1を入力して エンター・キーを押してください。RPG ソースをコンパイルするコマンド CRTBNDRPG のプロンプト画面が表示されます。 今回は不必要なパラメータが表示されていないように制御しています。表示されているパラメータを簡単に説明しましょう。 プログラム名は *CTLSPEC となっていますが、これはソースの中の DFTNAME キーワードで指定された名前参照するという意味です。今回このキーワードで指定されているのは icafe001 なのでこの名前のプログラムが作成されることになります。 ライブラリーは *CURLIB となっています。IBM i ではサイン・オンする単位(対話型ジョブといいます)毎にオブジェクトを作成する際の省略値のライブラリー(現行ライブラリーといいます)を指定できるのですが、今回は皆さん専用のライブラリー icafexxxxx が現行ライブラリーに設定されていますので、作成するプログラムはそのライブラリーに保存されます。 今回はプログラム名およびライブラリー名は直接指定できないように制御しています。 ソース・ストリーム・ファイルは Orion で作成したファイルを指定します。ここが前述の長いパスを指定するところなのですが、先ほど説明したとおり、前半部分は現行ディレクトリとしてすでに設定済ですので、指定するのは icafe/icafe001.rpgle だけです。 TARGET CCSID ですが、これは Orion で保存されたソース・ファイルの CCSID をコンパイラーが認識できる 5035 に変更するよう指示するパラメータです。Orion の作成するソース・ファイルの CCSID は 1208(ユニコード)であり、ユニコードのファイルはコンパイラーが直接読むことはできないため、このパラメータが必要となります。 では、ソース・ストリーム・ファイルを指定してエンター・キーを押してください。画面が icafe実習メニューに戻り、画面下部に以下のメッセージが表示されれば成功です。プログラム icafe001 がライブラリー icafexxxxx に入れられました。
上記と異なるメッセージが表示された場合はコンパイル・エラーなので、コードの記述に間違いがないか確認して、Orion の画面で修正したあと、再度上記コンパイルを行ってください。 それでは実行してみましょう。メニューのオプション2を実行します。 プログラム名は icafe001(大文字でも小文字でも構いません)を入力します。ライブラリー名は *LIBL になっていますが、今回はこのままでエンター・キーを押します。 今回のプログラムは DSPLY という命令を使って Hello Free Form RPG World! を表示するのですが、実行直後にはどこにも表示されていません。このメッセージを見るにはメニューのオプション5を使用します。ジョブ・ログ表示の画面が表示されますが、まだ先ほどのメッセージは表示されていないと思います。さらに画面下部の「詳細メッセージの表示」もしくは F10 キーを教えください。先ほどのメッセージが表示されましたか?終わりに
いかがでしたか?今回は「とりあえず作ってみよう!」なので、文法的な解説は一切行いませんでした。他言語の入門でもよく使われる「Hello xxxxx!」なので、他言語の開発者には違和感のない、なんとなくわかるコードだったと思います。 RPGIII や定位置記入形式の RPGIV で普段プログラミングされている方には、RPG とは思えない別言語のような印象を受けられたかもしれませんね。 次回から、以下の内容を11回に分けて解説していく予定です。- 開発環境
- FFRPG の基本構造
- データベース – SQL
- データベース – ネイティブ・アクセス
- 実践的なプログラム
- 関数の作成