MENU

特集 5250環境でGitを利用する、Git再入門 |Part5 連携方法──応用編

著者|
小川 誠

ティアンドトラスト株式会社
代表取締役社長 CIO  CTO

1989年、エス・イー・ラボ入社。その後、1993年にティアンドトラストに入社。システム/38 から IBM i まで、さまざまな開発プロジェクトに参加。またAS/400 、IBM i の機能拡張に伴い、他プラットフォームとの連携機能開発も手掛ける。IBM i 関連の多彩な教育コンテンツの作成や研修、セミナーなども担当。2021年6月から現職。

ブランチの切り替えとコードのコピー

先程までの操作で、masterとnew-worldという2つのブランチがそれぞれ別々のコミットを指しているところまで解説した。

masterブランチとnew-worldブランチのBCH010Rは、コメント追加の有無で異なっている。しかし、これはGitの世界での話であって、現在SEUが管理しているメンバーは、コメントが追加されたバージョンのみが存在している(new-world ブランチと同じ)状態だ(図表11)。

図表11 IFSディレクトリとソール・ファイルの状態
図表11 IFSディレクトリとソール・ファイルの状態

 

現在、ワーキングツリーはnew-worldブランチのBCH010R.RPGがあるので、これをコメント追加前の状態に戻してみよう。ブランチを切り替える作業を chckout という(図表13中の①)。

 >git checkout master
   Switched to branch ‘master’
   $
 >git branch -v
   * master d90bd47 最初のコミット
   new-world 4f279cd コメント行を追加

これでワーキングツリーのBCH010R.RPGは前のバージョンに戻っているはずだ。しかし、ソースファイルのメンバーBCH010RはGitコマンドに影響を受けないので、前のバージョンのコードをコピーする必要がある(図表13中の②)。

IFSディレクトリからネイティブ環境のメンバーにコピーするにはCPYFRMSTMFコマンドを使用する。

 CPYFRMSTMF FROMSTMF(‘/HOME/GITUSER/TESTSRCLIB/QRPGSRC/BCH010R.RPG’)
       TOMBR(‘/QSYS.LIB/TESTSRCLIB.LIB/QRPGSRC.FILE/BCH010R.MBR’)

       MBROPT(*REPLACE) ENDLINFMT(*LF)

コピーが完了したらSEUで確認してみよう。コメント行追加前のコードに戻っているはずだ。またnew-worldブランチをチェックアウトしてCPYFRMSTMFを実行すれば、コメント行が追加されたコードに戻る。

PDMのオプションの活用

/CPYFRMSTMFコマンドは常に手作業で行わなければならないため、実際の運用ではかなり煩雑になってしまう。これを完全に自動化するのは簡単ではないが、PDMのユーザー定義オプションを使用すれば、ある程度簡略化が可能だ。

PDMのユーザー定義オプションは、あらかじめ実行するコマンドを2桁の記号に割り当てておき、PDMの一覧表示のオプションでその記号を入力することでコマンドの実行を行う機能だ。PDMで使用するユーザー定義オプションを保存するファイルはQGPL/QAUOOPTファイルがデフォルトで使用されるが、このファイルを各ユーザー専用のファイルにコピーすることでオプションを自由に追加変更できる。

 CPYF FROMFILE(QGPL/QAUOOPT) TOFILE(<コピー先LIB>/QAUOOPT) CRTFILE(*YES)

コピーしたファイルにオプションを追加するには、STRPDMコマンドで表示されるメニューの「9. ユーザー定義オプションの処理」を使用する。コピーしたファイルを使用するには、たとえばPDM画面で「F18=省略時の値の変更」を実行し、オプション・ファイル欄で使用するファイルを指定すればよい。

画面の展開や登録の方法などは今回は割愛するが、サンプルの登録と呼び出すプログラムのコードを図表12および図表13に示す。

 CALL USERLIB/CPYTOSTMF PARM(&L &F &N) 

図表12 サンプル登録のためのユーザー定義オプションの作成
図表12 サンプル登録のためのユーザー定義オプションの作成
図表13 サンプルを呼び出すためのプログラムCPYTOSTMF(CLプログラム)
図表13 サンプルを呼び出すためのプログラムCPYTOSTMF(CLプログラム)

 

上記ユーザー定義オプションの追加と、プログラムを作成することにより、PDMからオプション2でソースを修正し、その後すぐにCTオプションでユーザーのホームディレクトリ内のGitが管理するディレクトリにメンバーをコピーできるようになる。

コピー後は QP2TERM 画面にて各Gitコマンドを使用して変更の歴史を積み重ねていってほしい。

次のステップへ向けて 

RPG Ⅲのソースコードを、IBM iの5250環境のみでGitで管理する一手法を解説してきたが、いかがだっただろうか。GitといえばこれまでRDiやVSCodeを前提に紹介されることが多かったと思うが、RPG Ⅲのコードも、工夫次第でGitによる管理が可能なことがおわかりいただけたと思う。

IBM iではRPG Ⅲで構築されたシステムがまだまだ現役で、これからもメンテナンスされていく。しかし、ほかのプラットフォームでは当たり前のソースのバージョン管理がRPG Ⅲでは不要という理屈はどこにもない。ソースファイルとGitが管理するワーキング・ツリーの間でソースコードをコピーする手間はどうしてもかかってしまうが、工夫次第で5250だけでもバージョン管理ができそうだという期待を、この記事で感じていただけたなら幸いだ。

5250の対話型プログラムや印刷プログラムなど新しい機能を必要としないプログラムは、これからもRPG Ⅲでメンテナンスしていく企業は多いと思う。このSEUで保守されるソースコードも、一日も早くGitでのバージョン管理を始めていただきたい。

今回、Gitを操作するためにQP2TERM画面を使ったのには理由がある。それは、すべての作業を5250エミュレータだけですぐに始められることを感じてほしかったからだ。しかし、この画面は表示文字数などに制約もあって、お世辞にも使いやすいインターフェースとはいい難い。ある程度この画面でGitのコマンド操作に慣れてもらったら、次はぜひsshなどでIBM iにアクセスしてGitを操作することにも挑戦していただきたい。

また、QP2TERM / ssh +Gitコマンドだけでは使いにくい面も多々あると思うが、Gitリポジトリ全体をPCにコピーすれば、VSCode+各種Git拡張機能を使って変更履歴や歴史(Gitグラフ)、修正箇所などを見やすく表示可能ということも念頭に作業を進めていただきたく思う。

今回の記事は、RPG Ⅲのコードも今すぐにでもGitでの管理を開始してほしいとの思いからであり、「FF RPGへの移行は不要で、この先もRPG Ⅲだけで開発すればよい」と思ってもらうためではないことは重ねてお伝えしたい。外部とやり取りするプログラムや、これから新規に開発するプログラムをRPG Ⅲで作成する理由は何もないので、そちらはFF RPG + VSCode + Gitなどで開発すべきということを理解してほしい。

今回の記事の内容は皆さんに試してもらいたいが、操作前にはソースコードのバックアップは必ず行うことをお願いしたい。また、掲載したプログラムのソースコードは、すべてのケースを想定して作られているわけではなく、あくまでもサンプルなので、それぞれの責任において利用していただくことをお願いする。

新着