PG資源の棚卸

システムを長い間運用していると、メニュー外の一時的な作業PGが貯まっていきます。
念のために別名で保存したPG、データを強制的に補正するためのPG、デバッグのための検索PG、プレゼンのためのサンプルPG、などなど・・・。気が付けば現在は使われなくなったメニューもあり、どれが現役かどれが不要なのかわかりにくくなります。
そこで、PG資源の棚卸作業についてご紹介したいと思います。

本記事は富士通ASP環境での資源管理体系をもとにしています。
メニュー、CL(制御文)・COBOL文・フォームをローカル環境にテキスト形式で転送した結果から、PG資源の構成表を作成しています。ASPのコマンドは参考程度に記載しました。

1.資源を共通形式で一覧化する

システムの資源には、メニュー、制御文、PG本体、フォーム、データファイルなど、複数の情報が存在しています。
先ず、それらの情報を共通の形式に揃えて解析できる状態に変換します。
そのうえで下記のようなPG構成表をEXCELで作成してみます。

(1)(2)(3)(4)(5)(6)(7)(8)(9)(10)
メニュー№メニュー名ページPFキー制御文PGフォーム名ファイル名更新か参照か検索キー

※データファイルは更新か参照のみかも書き出しておくと、システム構成を把握しやすくなります。

1.1 PG構成表の作成手順

①準備として、資源別に各資源内の全ファイルをテキスト形式のファイルに落とします。
②システムのメニュー表を作成します。
③各メニューの構成文を開き、PFキー、タイトル、制御文を一覧表に追加します。
④制御文を開き、PG本体と使用データファイルを一覧表に追加します。
 データファイルは更新作業か参照のみかの区別も追記します。
 開いた制御文から他の制御文を呼び出している場合は共通モジュールとして分類分けをします。
⑤PG本体を開き、フォーム名(印刷と画面)とファイルの検索キーを一覧表に追加します。
 開いたPG文から他のPGを呼び出している場合は共通モジュールとして分類分けをします。
⑥分類分けをした共通モジュールを開き、同じように使用している資源を表に追加します。
 (この作業は複数回必要となる場合もあります。)
⑥作成したPG構成表と、各資源の全ファイル名とを突き合わせます。
⑦メニュー外の資源を整理します。

制御文やPGには、更に他の制御文やPGを呼び出している場合があります。そのような制御文やPGは他でも使用されている可能性が高い共通モジュール、または追加で組み込んだ処理かと思われます。メニューからの展開時には深追いせず、一旦共通モジュールとして分類分けをしたのちに、次の段階で精査する方が楽かと思います。
根気のいる作業になりますが、この作業を繰り返したのちに本当に不要と思われる資源が残ることになります。

1.2 命名規則について

PG資源には命名規則を決めておくと資源の所属がわかりやすくなります。

命名規則の1例をご紹介します。
①システムに名前を付けます。(略字も同時に決めます)
②サブシステムごとにグループ分けをしてIDを決めます。(例、経理=’A’、営業=’M’)
③サブシステム毎にメニュー名を決めます。
 システム名(略字)+’menu’+サブシステムID
④PG資源は、システム名(略字)+サブシステムID+PG資源名(ID)+連番 で構成します。
 PG資源名には資源別のIDを組み入れます。
  (例、制御文=’L’、PG本体=’S’、印刷フォーム=’P’、画面=’C’)
制御文、PG本体、フォームなどは、処理単位で同一連番とすると管理しやすくなります。

変数名についても命名規則を設けた方がシステムの統一性や可読性は上がりますが、意味が伝わる最小現の長さの落としどころが難しいところです。
ここでご紹介したIDは1文字ですが、現実的な長さは3文字以内かと思います。
また、念のために保存しておくと際限なく貯まる可能性があります。すっきりと破棄する覚悟も必要かと思います。

2.富士通ASP環境でのコマンド例

(1)CNVMNUD(メニュー変換)
  ページ毎、PFキー毎のメニュー構成文が書き出されます。
  ファイル名は、 メニューID/メニューページ/PFキー.RPF です。
  CMD=”CALL PGM-制御文名”、TITLE=”タイトル” から制御文名とタイトルを抽出します。
(2)PUTTRS(ファイル転送)
  ①制御文の場合
   ASSIGN FILE-ファイル名@SHRU から
     ファイル名と更新(Update)か参照(ReadOnly)か抽出します。
   CALL PGM-PG名(COBOL名)からPG名を抽出します。
  ②PG本体(COBOL)の場合
   COPY フォーム名 OF XMDLIB からフォーム名を(印刷と画面)抽出します。
   ASSIGN RECORD KEY フィールド名 からファイルの検索キーを抽出します。
  ③フォームの場合
   フォームのオブジェクト名のみを利用します。
   PG構成表とつき合わせるためです。
  ④ファイル定義体の場合
   PG構成表の作成とは別に、データファイルのレイアウト表を作成できます。  

※サンプル 
   /FILE ファイル名
    P 
    /RECORD レコード名
    E10KEY           'インデックスキー        
    E10KBN U 0002 E10KEY        '外部10進2桁、E10KEYの下位フィールド
    E10COD X 0006 E10KEY        '文字列6桁、E10KEYの下位フィールド
    E10DT1 N 0015               '漢字15桁    

3.Windowsでよく利用したコマンド

何度も資源をダウンロードしていると、過去の保存結果との整合性が気になります。
よく使っていたコマンドは次の二つです。

3.1 robocopy 

robocopy  <コピー元><コピー先><File><オプション>
コピー元からコピー先へコピーします。
よく使っていたオプションは、 /mir /tee /r:1 /w:1 /log:ログファイル名 です。

コマンドコピー元コピー先動作
/mir存在しない存在するコピー先ファイルを削除する
存在する存在する全く同一の場合は何もしない
コピー元のほうが新しければ上書きする
存在する存在しないコピーする
/tee実行結果をコンソールに表示
/r:1再試行は1回
/w:1再試行の間の間隔は1秒
/log:ログを書き出す

3.2 fc 

fc <file1><file2>
単純に二つのファイルの内容を比較します。
異なる箇所を表示してくれます。

システムの大幅な修正やシステムの移行時には、PG資源の棚卸が必要となります。
環境によって作業は異なるとは思いますが、参考になれば幸いです。