(57)【要約】【課題】新テンプレートを生成して再度、ソースコードを自動生成できるテンプレート生成装置、テンプレート生成方法およびプログラムを提供する。【解決手段】テンプレート生成装置１００は、プログラムソースからテンプレート部のロジックを抜出すテンプレート部抽出部１１０と、前記ロジックをもとに、旧テンプレートＩＤごとに共通コードを抽出する共通コード抽出部１２０と、前記ロジックをもとに、共通コード以外の情報を差分情報として抽出する差分情報抽出部１３０と、旧テンプレートに含まれない共通コードを、新テンプレートに追加するコードとして抽出する新テンプレートコード抽出部１４０と、旧テンプレートに、新テンプレートコードを追加し、新テンプレートを生成する新テンプレート生成部１５０と、生成した新テンプレートと差分情報とを登録する新テンプレート登録部１６０と、を備える。【選択図】図４
2018173699.tif 000002
【特許請求の範囲】
【請求項１】
テンプレートと、プログラム設計情報とを組み合わせてプログラムソースを生成するシステムに用いられるテンプレート生成装置であって、
プログラムソースからテンプレート部のロジックを抜出すテンプレート部抽出手段と、
抜き出したテンプレート部のロジックをもとに、旧テンプレートＩＤごとに共通コードを抽出する共通コード抽出手段と、
抜き出したテンプレート部のロジックをもとに、前記共通コード以外の情報を差分情報として抽出する差分情報抽出手段と、
前記旧テンプレートに含まれない前記共通コードを、新テンプレートに追加する新テンプレートコードとして抽出する新テンプレートコード抽出手段と、
前記旧テンプレートに、前記新テンプレートコードを追加し、新テンプレートを生成する新テンプレート生成手段と、
生成した前記新テンプレートと前記差分情報とを登録する新テンプレート登録手段と、を備える
ことを特徴とするテンプレート生成装置。
【請求項２】
前記共通コード抽出手段は、
前記共通コードを抽出する単位として、当該共通コードが予め定めた粒度であること、当該共通コードがプログラムの文法上同等とみなされる構文であること、および／または、当該共通コードの旧テンプレートが同じであること、を条件に前記共通コードを抽出する
ことを特徴とする請求項１に記載のテンプレート生成装置。
【請求項３】
前記新テンプレート生成手段は、
前記旧テンプレートに含まれないコードであることを条件に、当該旧テンプレートに含まれない共通コードを抽出する
ことを特徴とする請求項１に記載のテンプレート生成装置。
【請求項４】
前記新テンプレート登録手段は、
生成した前記新テンプレートを、元のテンプレートが組み合わされていたプログラム設計情報と組み合わせて登録する
ことを特徴とする請求項１に記載のテンプレート生成装置。
【請求項５】
前記新テンプレート登録手段は、
前記プログラムソースを生成する前記システム側から要求があった場合、所定期間ごとに定期的に登録する場合、または、前記新テンプレートが所定個以上生成された場合のうち、少なくともいずれか１つでテンプレート登録を行う
ことを特徴とする請求項１に記載のテンプレート生成装置。
【請求項６】
テンプレートと、プログラム設計情報とを組み合わせてプログラムソースを生成するシステムに用いられるテンプレート生成装置のテンプレート生成方法であって、
テンプレート生成装置は、
抜き出したテンプレート部のロジックをもとに、旧テンプレートＩＤごとに共通コードを抽出するステップと、
抜き出したテンプレート部のロジックをもとに、前記共通コード以外の情報を差分情報として抽出するステップと、
前記旧テンプレートに含まれない前記共通コードを、新テンプレートに追加する新テンプレートコードとして抽出するステップと、
前記旧テンプレートに、前記新テンプレートコードを追加し、新テンプレートを生成するステップと、
生成した前記新テンプレートと前記差分情報とを登録するステップと、実行する
ことを特徴とするテンプレート生成方法。
【請求項７】
制御部を備えるコンピュータを、
テンプレート生成装置のサーバとして機能させるプログラムであって、
プログラムソースからテンプレート部のロジックを抜出すテンプレート部抽出手段、
抜き出したテンプレート部のロジックをもとに、旧テンプレートＩＤごとに共通コードを抽出する共通コード抽出手段、
抜き出したテンプレート部のロジックをもとに、前記共通コード以外の情報を差分情報として抽出する差分情報抽出手段、
前記旧テンプレートに含まれない前記共通コードを、新テンプレートに追加する新テンプレートコードとして抽出する新テンプレートコード抽出手段、
前記旧テンプレートに、前記新テンプレートコードを追加し、新テンプレートを生成する新テンプレート生成手段、
生成した前記新テンプレートと前記差分情報とを登録する新テンプレート登録手段、を前記コンピュータに実行させる
ことを特徴とするプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、テンプレート生成装置、テンプレート生成方法およびプログラムに関する。
【背景技術】
【０００２】
近年、これまで現行コンピュータで稼働してきた業務システム（レガシーシステム）を新規コンピュータに移行させるためのマイグレーションサービスを望む企業、自治体などが多い。マイグレーションの形態としては、例えば、汎用系のホストコンピュータ（または、オフコン）から、ＷＩＮＤＯＷＳ（登録商標）、ＵＮＩＸ（登録商標）、ＬＩＮＵＸ（登録商標）などのＯＳ（Operating System）が稼働するオープン系のサーバコンピュータへのマイグレーション、という形態がある。
【０００３】
また、テンプレートと設計書からコードを自動生成するコード自動生成ツールがある。開発時には、仕様変更が度々発生するため、設計書を変更する。その度にコードの再生成を行うことになる。また、テンプレート以外は汎用的に作成されているため、自動生成されたコードに対して、開発者が修正を行うことになる。
【０００４】
特許文献１には、ファイル定義体に格納された項目名に、所定の文字と区切り文字とを付加した項目名を作成し、作成した項目名と項目属性とを用いてデータファイルを定義するコピー句を生成するコピー句生成部と、複写したコピー句から所定の文字を置換する命令とを用いてデータファイルを定義するように変換するプログラム変換部とを備えるレガシーシステムのプログラムを効率的に変換する装置が記載されている。
【０００５】
特許文献２には、構造的なまとまりを判定する基準として関数及び構文を定義することで、検出したコードクローンから、前記構造的なまとまりを持つコードクローンのみを抽出するコードクローン構造解析手段と、抽出されたコードクローンをユーザインタフェース手段で設定された情報に基づき自動で共通関数化する共通関数生成手段と、を備えるソフトウェアリファクタリング支援装置が記載されている。
【０００６】
特許文献３には、設計情報に基づいてプログラムを自動生成し、設計情報の変更内容に基づいてプログラムの変更箇所を検索し、自動生成されたプログラムに修正が加えられた修正プログラムに前記検索された変更箇所を追加または削除して前記修正プログラムの修正内容を継承したプログラムを自動生成することを特徴とする修正プログラムを継承したプログラムの自動生成方法が記載されている。
【先行技術文献】
【特許文献】
【０００７】
【特許文献１】特開２０１０−１３４４８７号公報
【特許文献２】特開２００９−１７６０６４号公報
【特許文献３】特開２０００−２２２１９５号公報
【発明の概要】
【発明が解決しようとする課題】
【０００８】
しかしながら、テンプレートを用いてソースコードを自動生成することにより開発したシステムにあっては、保守開発を繰り返す中で、テンプレートに手を加える改修が多く入ってしまい再度自動生成ができなくなってしまうという課題がある。
【０００９】
そこで、本発明は、前記した問題を解決するために、テンプレートを用いてソースコードを自動生成するシステムにおいて、改修が入ったとしても、新テンプレートを生成して再度、ソースコードを自動生成できるテンプレート生成装置、テンプレート生成方法およびプログラムを提供することを目的とする。
【課題を解決するための手段】
【００１０】
前記課題を解決するため、本発明によるテンプレート生成装置は、テンプレートと、プログラム設計情報とを組み合わせてプログラムソースを生成するシステムに用いられるテンプレート生成装置であって、プログラムソースからテンプレート部のロジックを抜出すテンプレート部抽出手段と、抜き出したテンプレート部のロジックをもとに、旧テンプレートＩＤごとに共通コードを抽出する共通コード抽出手段と、抜き出したテンプレート部のロジックをもとに、前記共通コード以外の情報を差分情報として抽出する差分情報抽出手段と、前記旧テンプレートに含まれない前記共通コードを、新テンプレートに追加する新テンプレートコードとして抽出する新テンプレートコード抽出手段と、前記旧テンプレートに、前記新テンプレートコードを追加し、新テンプレートを生成する新テンプレート生成手段と、生成した前記新テンプレートと前記差分情報とを登録する新テンプレート登録手段と、を備える特徴とする。
その他の手段については、発明を実施するための形態のなかで説明する。
【発明の効果】
【００１１】
本発明によれば、新テンプレートを生成して再度、ソースコードを自動生成できるテンプレート生成装置、テンプレート生成方法およびプログラムを提供することができる。
【図面の簡単な説明】
【００１２】
【図１】本発明の実施形態に係るテンプレート生成装置の概念図である。
【図２】上記実施形態に係るテンプレート生成装置により抽出された新テンプレートの一例を示す図である。
【図３】上記実施形態に係るテンプレート生成装置の差分情報の一例を示す図である。
【図４】上記実施形態に係るテンプレート生成装置の構成を示す図である。
【図５】上記実施形態に係るテンプレート生成装置のテンプレート生成処理を示すフローチャートである。
【図６】上記実施形態に係るテンプレート生成装置のプログラムソースを示す図であり、（ａ）は、テンプレート部分を抽出する前のプログラムソースを示し、（ｂ）は、プログラムソース３１−１からテンプレート部分を抽出したプログラムソースを示す。
【図７】上記実施形態に係るテンプレート生成装置により生成された３本のプログラムソースが改修された改修後のプログラムソースを示す図であり、（ａ）は、１本目改修後のプログラムソースを示し、（ｂ）は、２本目改修後のプログラムソースを示し、（ｃ）は、３本目改修後のプログラムソースを示す。
【図８】上記実施形態に係るテンプレート生成装置の共通コード抽出後のプログラムソースを示す図である。
【図９】上記実施形態に係るテンプレート生成装置の差分情報の一例を示す図である。
【図１０】上記実施形態に係るテンプレート生成装置のプログラムソースを示す図であり、（ａ）は、旧テンプレートを有するプログラムソースを示し、（ｂ）は、旧テンプレートに含まれないコードを有するプログラムソースを示す。
【図１１】上記実施形態に係るテンプレート生成装置の旧テンプレートに含まれない共通コード情報以外の差分情報の一例を示す図である。
【図１２】上記実施形態に係るテンプレート生成装置の旧テンプレートを反映して生成された新テンプレートを有するプログラムソースを示す図である。
【図１３】上記実施形態に係るテンプレート生成装置の差分情報の一例を示す図である。
【図１４】上記実施形態に係るテンプレート生成装置の新テンプレートと差分情報を反映して生成されたプログラムソースを示す図である。
【図１５】従来技術のテンプレートを用いてソースコードを自動生成するシステムを示す図である。
【図１６】従来技術のテンプレートを示す図である。
【図１７】図１６のテンプレートをもとにプログラム自動生成ツールを用いて自動生成されたプログラムソース１４の一例を示す図である。
【図１８】背景技術に係るシステムにより生成された３本のプログラムソースが改修された改修後のプログラムソースを示す図であり、（ａ）は、１本目改修後のプログラムソースを示し、（ｂ）は、２本目改修後のプログラムソースを示し、（ｃ）は、３本目改修後のプログラムソースを示す。
【発明を実施するための形態】
【００１３】
以下、図面を参照して本発明を実施するための形態（以下、「本実施形態」という）における負荷分散装置等について説明する。
（背景説明）
まず、図１５を参照して背景技術を説明する。
図１５は、従来のテンプレートを用いてソースコードを自動生成するシステムを示す図である。
図１５に示すように、プログラムの開発支援のための開発リポジトリ（repository）１は、テンプレート（雛型）群１１と、プログラム設計情報の設計書１２とを組み合わせて、プログラム自動生成ツール１３を用いてプログリポジトリラムソース１６を自動生成する。開発リポジトリ１は、情報システムの設計・開発・保守に関するあらゆる情報を統合的に蓄積・管理する機構をいう。開発リポジトリ１は、ソフトウェアやデータ項目について、関連するメタデータ（仕様書や設計書、モデルやダイアグラム、情報操作ルールなど）と結び付けて格納する。
【００１４】
図１６は、テンプレート１１を示す図、図１７は、図１６のテンプレート１１をもとにプログラム自動生成ツール１３を用いて自動生成されたプログラムソース１４の一例を示す図である。
図１７に示すように、プログラムソース１４は、図１６のテンプレート１１の記述が転記され、テンプレート１１以外の箇所にユーザコーディング（図１７の実線囲み参照）が入る。なお、図１６のテンプレート１１は、命令語の並びからなる部分を示している。図１７のユーザコーディングは、ユーザが記述するソースコード（コンピュータが処理可能な形式のプログラム）であり、ここではあるコード（Ａコード）の入出力を記述している。
【００１５】
上記テンプレート１１を用いてソースコードの自動生成により開発したシステムでは、保守開発を繰り返す中で、テンプレート１１に手を加える改修等１５（図１５参照）が入る。プログラムソース１６は、改修後のプログラムソースである。
【００１６】
図１８は、改修前のプログラムソース１４が改修等１５により３本のプログラムソースが改修された改修後のプログラムソース１６−１〜１６−３を示す図である。図１８（ａ）は、１本目改修後のプログラムソース１６−１を、図１８（ｂ）は、２本目改修後のプログラムソース１６−２を、図１８（ｃ）は、３本目改修後のプログラムソース１６−３をそれぞれ示す。図１８（ａ）−（ｃ）を横断して示す実線囲みは、プログラムソース１６−１〜１６−３のテンプレート部分である。
【００１７】
図１８（ａ）に示す改修後のプログラムソース１６−１は、図１７の改修前のプログラムソース１４と比較して分かるように、図１８（ａ）に示す命令ブロック
IF  TRAN-CD  =  SPACE
THEN
MOVE 'TRN'   TO  ERR-CD
ELSE
CONTINUE
END-IF.
と、
IF  TRAN-CD  =  SPACE 
と、に改修が入っている。
【００１８】
図１８（ｂ）に示す改修後のプログラムソース１６−２は、プログラムソース１６−１の改修に加え、図１８（ａ）に示す改修後のプログラムソース１６−１にさらに、命令ブロック
MOVE  IN-001  TO   OUT-001
MOVE  IN-002  TO   OUT-002
MOVE  IN-003  TO   OUT-003
という追加の改修が入っている。
【００１９】
図１８（ｃ）に示す改修後のプログラムソース１６−３は、プログラムソース１６−１の改修に加え、命令ブロック
COMPUTE  OUT-001  =  IN-001  +  IN-011
COMPUTE  OUT-002  =  IN-002  +  IN-022
COMPUTE  OUT-003  =  IN-003  +  IN-033
という追加の改修が入っている。
【００２０】
このように、長年の改修により、当初のプログラムソース１４（図１７参照）のテンプレート部分に改修が入る。保守開発を繰り返す中で、テンプレートに手を加える改修が多く入ってしまうと、再度自動生成ができなくなる課題がある。
【００２１】
（実施形態）
図１は、本発明の実施形態に係るテンプレート生成装置の概念図である。本テンプレート生成装置は、テンプレートを用いてソースコードを自動生成するシステムに適用される。図１の説明に当たり、図１５と同一構成部には、同一番号を付している。また、図１８と同様な改修が行われるものとする。
図１示す破線囲みが、図１５のシステムに対し新規な部分である。
テンプレート生成装置１００（後記図４参照）は、類似分析による新テンプレートを抽出する。具体的には、テンプレート生成装置１００は、改修後のプログラムソース２１と開発リポジトリ１のテンプレート群１１とを入力し、プログラムソース２１の共通性を分析し、改修後のプログラムソース２１に共通であり、かつ既存テンプレート１１に類似しない新テンプレート２２を抽出する。なお、改修後のプログラムソース２１は、改修後のプログラムソース１６と同一であってもよい。ここでは、改修後のプログラムソース２１は、改修後のプログラムソース１６と同一であり、図１８（ａ）−（ｃ）に示されている。
テンプレート生成装置１００は、テンプレート１１と、プログラム設計情報とを組み合わせてプログラムソースを生成するシステムに用いられる。
【００２２】
図２は、テンプレート生成装置１００により抽出された新テンプレート２２の一例を示す図である。
テンプレート生成装置１００は、改修後のプログラムソース２１から、類似部分を新テンプレート化する（図２の実線囲み参照）。
図２に示す新テンプレート２２は、図１６のテンプレート１１と比較して分かるように、図２に示す新テンプレート２２の命令ブロック
IF  TRAN-CD  =  SPACE
THEN
MOVE 'TRN'   TO  ERR-CD 
ELSE
CONTINUE
END-IF.
が、改修後のプログラムソース２１に共通であり、かつ既存テンプレート１１に類似しない類似部分として新テンプレート化される。
【００２３】
図１に戻って、テンプレート生成装置１００は、テンプレート登録２３により新テンプレート２２（図２参照）を、開発リポジトリ１の既存のテンプレート１１に登録し、テンプレート１１を新テンプレート２２で更新する。既存のテンプレート１１は、新テンプレート２２によって更新されるので、保守開発を繰り返しても、開発リポジトリ１のテンプレート１１は最新となる。このため、開発リポジトリ１は、テンプレート群１１と、プログラム設計情報の設計書１２とを組み合わせて、プログラム自動生成ツール１４を用いてプログラムソース１６を自動生成することができる。
【００２４】
また、テンプレート生成装置１００は、新テンプレート２２をもとに、改修後のプログラムソース２１を置き換え（図１の番号２４参照）、更新された改修後のプログラムソース２５とする。改修後のプログラムソース２５には、新テンプレート２２（図２参照）と、新テンプレート２２との差分情報２６（後記図３参照）と、を記述する。テンプレート生成装置１００は、各ソースコードから、テンプレート部分のロジックを抜出し、旧テンプレートＩＤごとに共通コードと差分情報２６を生成する。差分情報２６を必要とするのは、新テンプレートからプログラムソースを作成する場合のみである。また、新テンプレートのみでプログラムソースを作成するケースもある。
【００２５】
なお、図１では、説明の便宜上、テンプレート生成装置１００の機能のうち、新テンプレート２２と差分情報２６の生成と、新テンプレート２２の登録（図１の番号２３参照）とを、図１のテンプレート生成装置１００の外ブロックとして記載したが、実際にはテンプレート生成装置１００の内部に各機能部として備える。また、新テンプレート２２を用いた改修後のプログラムソース２１を置き換える処理（図１の番号２４参照）は、図１のプログラム自動生成ツール１３を用いて自動的に実行される。
【００２６】
図３は、差分情報２６の一例を示す図である。
図３に示す差分情報２６は、プログラムＩＤ、テンプレートＩＤ、差分情報を含み、
PGM002,TEMP001,00010,MOVE  IN-001  TO   OUT-001
PGM002,TEMP001,00011,MOVE  IN-002  TO   OUT-002
PGM002,TEMP001,00012,MOVE  IN-003  TO   OUT-003
PGM003,TEMP001,00010,COMPUTE  OUT-001  =  IN-001  +  IN-011
PGM003,TEMP001,00011,COMPUTE  OUT-002  =  IN-002  +  IN-022
PGM003,TEMP001,00012,COMPUTE  OUT-003  =  IN-003  +  IN-033
で記述される。
【００２７】
図４は、本発明の実施形態に係るテンプレート生成装置１００の構成を示す図である。
テンプレート生成装置１００は、テンプレートとプログラム設計情報とを組み合わせてプログラムソースを生成するシステムに適用される。
図４に示すように、テンプレート生成装置１００は、テンプレート部抽出部１１０（テンプレート部抽出手段）と、共通コード抽出部１２０（共通コード抽出手段）と、差分情報抽出部１３０（差分情報抽出手段）と、新テンプレートコード抽出部１４０（新テンプレートコード抽出手段）と、新テンプレート生成部１５０（新テンプレート生成手段）と、新テンプレート登録部１６０（新テンプレート登録手段）と、を備える。
【００２８】
テンプレート部抽出部１１０は、プログラムソースからテンプレート部のロジックを抜出す。
【００２９】
共通コード抽出部１２０は、抜き出したテンプレート部のロジックをもとに、旧テンプレートＩＤごとに共通コードを抽出する。前記共通コードを抽出する単位として、予め定めた粒度であること、プログラムの文法上同等とみなされる構文であること、および／または、同じ旧テンプレートＩＤであること、を条件に前記共通コードを抽出する。なお、比較対象は、テンプレートであるので、共通コードの抽出は、完全一致であることを前提とする。
【００３０】
差分情報抽出部１３０は、抜き出したテンプレート部のロジックをもとに、共通コード以外の情報を差分情報として抽出する。具体的には、差分情報抽出部１３０は、共通コード情報以外の情報を差分情報として、ソースコード上に占める位置情報を取得する。
【００３１】
新テンプレートコード抽出部１４０は、旧テンプレートに含まれない共通コードを、新テンプレートに追加するコードとして抽出する。
【００３２】
新テンプレート生成部１５０は、旧テンプレートに、新テンプレートコードを追加し、新テンプレートを生成する。具体的には、新テンプレート生成部１５０は、生成された共通コードと、旧テンプレートとを比較し、旧テンプレートに含まれない共通コードを、旧テンプレートに追加して新テンプレートを生成する（図１の新テンプレート２２参照）。新テンプレート生成部１５０は、旧テンプレートに含まれないコードであることを条件に、旧テンプレートに含まれない共通コードを抽出する。
【００３３】
新テンプレート登録部１６０は、生成した新テンプレート（図４の新テンプレート１５０Ａ参照）とテンプレート部の共通部との差分情報１３０Ａとを登録する（図１のテンプレート登録２３参照）。例えば、新テンプレート登録部１６０は、新テンプレートとテンプレート部の共通部との差分情報とを、開発リポジトリ１（図４参照）に登録する。
【００３４】
テンプレート生成装置１００は、例えばサーバから構成される。テンプレート生成装置１００をサーバにより構成した場合、当該サーバの制御部は、ＲＯＭ（Read Only Memory）に記憶された制御プログラムを読み出してＲＡＭ（Random Access Memory）に展開し、ＣＰＵ（Central Processing Unit）がテンプレート生成処理を実行する。本実施形態の説明において「〜部」として説明するものは、「〜回路」、「〜装置」、「〜機器」であってもよく、また、「〜ステップ」、「〜工程」、「〜手順」、「〜処理」であってもよい。また、「〜部」として説明するものは、ＲＯＭに記憶されたファームウェアで実現されていても構わない。あるいは、「〜部」として説明するものは、ソフトウェアのみ、あるいは、素子、デバイス、基板、配線といったハードウェアのみ、または、ソフトウェアとハードウェアとの組み合わせで実現されていても構わない。ファームウェアとソフトウェアは、プログラムとして、フレキシブルディスク、コンパクトディスク、磁気ディスク、光ディスク、ＤＶＤ等の記録媒体に記憶される。
【００３５】
以下、上述のように構成されたテンプレート生成装置１００の動作を説明する。
図５は、テンプレート生成装置１００のテンプレート生成処理を示すフローチャートである。図６〜図１４は、図５のフローの各ステップで説明されるテンプレート、プログラムソース、差分情報を示し、図５のフローの説明において適宜参照する。
図５において、まず、ステップＳ１１でテンプレート部抽出部１１０（図４参照）は、プログラムソース２１（図４参照）からテンプレート部のロジックを抜出し、ロジックを抜き出したテンプレート部のみのプログラムソース（改修後）１１０Ａ（図４参照）を保存する。保存されたプログラムソース（改修後）１１０Ａは、後記するテンプレート部のみのプログラムソース（改修後）１２０Ａと共に、差分情報抽出部１３０に入力される。
【００３６】
図６は、図５のプログラムソース（改修後）１１０Ａに対応する具体的なプログラムソース３１を示す図である。図６（ａ）は、プログラムソース３１−１を、図６（ｂ）は、テンプレート部分を抽出する前のプログラムソース３１−１からテンプレート部分を抽出したプログラムソース３１−２をそれぞれ示す。
図６（ｂ）には、図６（ａ）に示すプログラムソース３１−１から、コメント行*USER-S〜*USER-Eの間を除いて、テンプレート部分のロジックを抜出したプログラムソース３２−２が示されている。
【００３７】
図５のフローに戻って、ステップＳ１２で共通コード抽出部１２０（図４参照）は、共通コードを以下の条件で抽出する。
(1)共通コードを抽出する単位として、共通コードが予め定めた粒度（granularity）（後記）であること。
(2) 共通コードがプログラムの文法上同等とみなされる構文であること。
(3) 共通コードの旧テンプレートが同じ（同じ旧テンプレートＩＤ）であること。
ここで、上記粒度は、共通コードとして取り上げる対象の、範囲の広さや規模をいう。例えば、共通コードを抽出する単位として、命令ブロック、命令文、制御文、データ定義（変数）などを揃えて抽出する。
共通コード抽出部１２０は、抽出したテンプレート部のみのプログラムソース（改修後）１２０Ａ（図４参照）を保存する。
【００３８】
図７は、図４のプログラムソース（改修後）１２０Ａに対応する具体的な改修前のプログラムソース１４（図１７参照）が改修（３本のプログラムソースが改修）された改修後のプログラムソース３２−１〜３２−３を示す図である。図７（ａ）−（ｃ）は、それぞれ別プログラムである。図７（ａ）は、１本目改修後のプログラムソース３２−１を、図７（ｂ）は、２本目改修後のプログラムソース３２−２を、図７（ｃ）は、３本目改修後のプログラムソース３２−３をそれぞれ示す。なお、図７（ａ）−（ｃ）は、前記図１８（ａ）−（ｃ）に対応している。
【００３９】
図７（ａ）に示す改修後のプログラムソース３２−１は、図６（ｂ）の改修前のプログラムソース３１−２と比較して分かるように、図７（ａ）の命令ブロック
IF  TRAN-CD  =  SPACE
THEN
MOVE 'TRN'   TO  ERR-CD  
ELSE
CONTINUE
END-IF.
に改修が入り、かつ、
IF  TRAN-CD  =  SPACE
に改修が入っている。なお、図７（ａ）に示す改修後のプログラムソース３２−１は、差分情報なしでもよい。
【００４０】
図７（ｂ）に示す改修後のプログラムソース３２−２は、プログラムソース３２−１の改修に加え、命令ブロック
MOVE  IN-001  TO   OUT-001
MOVE  IN-002  TO   OUT-002
MOVE  IN-003  TO   OUT-003
という追加の改修が入っている。
【００４１】
図７（ｃ）に示す改修後のプログラムソース３２−３は、プログラムソース３２−１の改修に加え、命令ブロック
COMPUTE  OUT-001  =  IN-001  +  IN-011
COMPUTE  OUT-002  =  IN-002  +  IN-022
COMPUTE  OUT-003  =  IN-003  +  IN-033
という追加の改修が入っている。
図５のフローに戻って、ステップＳ１２で共通コード・差分情報生成部１２０は、共通コードを、上記(1)〜(3)の条件で抽出する。
【００４２】
図８は、共通コード抽出後のプログラムソース３３を示す図である。
図８に示すように、プログラムソース３３には、共通コードの命令ブロック
IF  TRAN-CD  =  SPACE
THEN
MOVE 'TRN'   TO  ERR-CD
ELSE
CONTINUE
END-IF.
が抽出されている。
【００４３】
図５のフローに戻って、ステップＳ１３で差分情報抽出部１３０（図４参照）は、共通コード情報以外の情報を差分情報として、ソースコード上に占める位置情報を取得する。差分情報抽出部１３０（図４参照）は、テンプレート部の共通部との差分情報１３０Ａ（図４参照）を保存する。
【００４４】
図９は、図４のテンプレート部の共通部との差分情報１３０Ａに対応する具体的な差分情報３４の一例を示す図である。
図９に示す差分情報３４は、プログラムＩＤ、テンプレートＩＤ、行番号、差分情報を含み、
PGM002,TEMP001,00020,MOVE  IN-001  TO   OUT-001
PGM002,TEMP001,00021,MOVE  IN-002  TO   OUT-002
PGM002,TEMP001,00022,MOVE  IN-003  TO   OUT-003
PGM003,TEMP001,00020,COMPUTE  OUT-001  =  IN-001  +  IN-011
PGM003,TEMP001,00021,COMPUTE  OUT-002  =  IN-002  +  IN-022
PGM003,TEMP001,00022,COMPUTE  OUT-003  =  IN-003  +  IN-033
で記述される。
以上で、共通コードと差分情報の生成処理を終え、下記の新テンプレート生成処理に移行する。
【００４５】
まず、ステップＳ１４で新テンプレートコード抽出部１４０（図４参照）は、旧テンプレートに含まれない共通コードを、新テンプレートに追加するコード（図４の新テンプレートコード１４０Ａ参照）として抽出する。
【００４６】
図１０は、旧テンプレートを有するプログラムソース３５−１〜３５−２を示す図である。図１０（ａ）は、旧テンプレートを有するプログラムソース３５−１を、図１０（ｂ）は、旧テンプレートに含まれないコードを有するプログラムソース３５−２をそれぞれ示す。
図１０（ａ）に示す旧テンプレートを有するプログラムソース３５−１は、図１０（ｂ）の旧テンプレートに含まれないコードを有するプログラムソース３５−２と比較して分かるように、図１０（ｂ）の旧テンプレートに含まれない共通コード
IF  TRAN-CD  =  SPACE
THEN
MOVE 'TRN'   TO  ERR-CD
ELSE
CONTINUE
END-IF.
を有している。
【００４７】
図１１は、図４の新テンプレートコード１４０Ａに対応する具体的な旧テンプレートに含まれない共通コード情報以外の差分情報３６の一例を示す図である。
図１１に示す差分情報３６は、テンプレートＩＤ、行番号、種別、差分情報を含み、
TEMP001,00014, 追加,   IF  TRAN-CD  =  SPACE
TEMP001,00015, 追加,      THEN
TEMP001,00016, 追加,         MOVE 'TRN'   TO  ERR-CD  
TEMP001,00017, 追加,      ELSE
TEMP001,00018, 追加,         CONTINUE
TEMP001,00019, 追加,    END-IF.
TEMP001,00021, 削除,*   IF  ERR-CD  =  SPACE 
TEMP001,00022, 削除,*     THEN 
TEMP001,00023, 削除,*       PERFORM  KANREN-CHECK-SEC
TEMP001,00024, 削除,*     ELSE 
TEMP001,00025, 削除,*   END-IF. 
TEMP001,00026, 変更,*       IF  TRAN-CD  =  SPACE
で記述される。
【００４８】
図５のフローに戻って、ステップＳ１５で新テンプレート生成部１５０（図４参照）は、旧テンプレートに、新テンプレートに追加するコードを追加し、新テンプレートを生成する。すなわち、抽出した共通コードを、旧テンプレートに反映し、新テンプレートを生成する。このときテンプレートＩＤを振り直す。新テンプレート生成部１５０は、生成した新テンプレート１５０Ａ（図４参照）を保存する。
【００４９】
図１２は、図４の新テンプレート１５０Ａに対応する具体的な旧テンプレートを反映して生成された新テンプレートを有するプログラムソース３７を示す図である。図１２は、旧テンプレートとの違いを取り込んだ新テンプレートを示す。
図１２に示す新テンプレートを有するプログラムソース３７は、図１０（ｂ）の旧テンプレートに含まれないコードを有するプログラムソース３５−２と比較して分かるように、図１０（ｂ）の旧テンプレートに含まれない共通コードの命令ブロック
IF  TRAN-CD  =  SPACE
THEN
MOVE 'TRN'   TO  ERR-CD  
ELSE
CONTINUE
END-IF.
が反映されている一方、
図１０（ｂ）の旧テンプレートに含まれない共通コードの命令ブロック
IF  ERR-CD  =  SPACE
THEN 
PERFORM  HENKAN-SEC 
ELSE 
CONTINUE 
END-IF. 
が削除された記述となる。
なお、上記削除した命令ブロックは、標識領域にアスタリスク(*)を記述してコメント行として残している。
【００５０】
図５のフローに戻って、ステップＳ１５で新テンプレート生成部１５０は、新たな差分情報３８（図１３参照）がある場合、この差分情報３８を用いて同様な方法で、新テンプレートを生成する。このときテンプレートＩＤを振り直す。
【００５１】
図１３は、図４の新テンプレート１５０Ａに対応する具体的な差分情報３８の一例を示す図である。なお、図１１に示す差分情報３６のような「種別」はない。
図１３に示す差分情報３８は、プログラムＩＤ、テンプレートＩＤ、行番号、差分情報を含み、
PGM002,TEMP001,00020,MOVE  IN-001  TO   OUT-001
PGM002,TEMP001,00021,MOVE  IN-002  TO   OUT-002
PGM002,TEMP001,00022,MOVE  IN-003  TO   OUT-003
PGM003,TEMP001,00020,COMPUTE  OUT-001  =  IN-001  +  IN-011
PGM003,TEMP001,00021,COMPUTE  OUT-002  =  IN-002  +  IN-022
PGM003,TEMP001,00022,COMPUTE  OUT-003  =  IN-003  +  IN-033
で記述される。
【００５２】
図５のフローに戻って、ステップＳ１６で新テンプレート登録部１６０は、生成した新テンプレート（図４の新テンプレート１５０Ａ参照）とテンプレート部の共通部との差分情報１３０Ａとを、元のテンプレートが組み合わされていたプログラム設計情報と組み合わせて登録する（図１のテンプレート登録２３参照）。例えば、図４の例では、生成した新テンプレート１５０Ａとテンプレート部の共通部との差分情報１３０Ａとを開発リポジトリ１（図４参照）に登録する。
【００５３】
なお、図１では、説明の便宜上、テンプレート生成装置１００の機能のうち、新テンプレート２２と差分情報２６の生成と、新テンプレート２２の登録（図１の番号２３参照）とを、図１のテンプレート生成装置１００の外ブロックとして記載したが、実際にはテンプレート生成装置１００の内部に各機能部として備える。また、新テンプレート２２を用いた改修後のプログラムソース２１を置き換え（図１の番号２４参照）る処理は、図１のプログラム自動生成ツール１３を用いて自動的に実行される。これにより、図１に示す開発リポジトリ１は、新テンプレートと、差分情報と、プログラム設計情報の設計書１２とを組み合わせて、プログラム自動生成ツール１３を用いてプログラムソース１６を、再度自動生成する。
【００５４】
図１４は、新テンプレート１５０Ａとテンプレート部の共通部との差分情報１３０Ａに対応する具体的な新テンプレートと差分情報３７を反映して生成されたプログラムソース３８を示す図である。図１４は、図１２のプログラムソースと図１３の差分情報を使って作成したプログラムソースを示す。
図１４に示す新テンプレートを有するプログラムソース３８は、図１２のプログラムソース３７と比較して分かるように、命令ブロック
MOVE  IN-001  TO   OUT-001
MOVE  IN-002  TO   OUT-002
MOVE  IN-003  TO   OUT-003
が追加された記述となる。
【００５５】
［テンプレート生成装置１００の活用例］
テンプレート生成装置１００の活用例について述べる。
テンプレート生成装置１００は、現行開発環境にインストールし、日次で実行することができる。
現行開発環境にインストールし、日次で実行した結果、テンプレート登録を行う契機は以下の通りである。
（１）開発リポジトリ１（図４参照）の管理者より要求があった場合
（２）年次にて定期的に登録する場合
（３）日次実行している中で、新テンプレートが所定（例えば１０個）以上生成された場合
上記（２）（３）の場合、開発リポジトリ１は、本テンプレート生成装置１００に対して新テンプレート発行の要求を行うことなく、新テンプレートおよびその差分情報を受け取ることができる。開発リポジトリ１側の負担を軽減することができる。また、上記（３）の場合、開発リポジトリ側では、気付かなかったテンプレートの改修が多く発生している状況である。本テンプレート生成装置１００は、自律的に、開発リポジトリ１に対して新テンプレートおよびその差分情報を登録することで、開発リポジトリ１側における、ソースコード自動生成効率をより一層高めることができる。
【００５６】
以上説明したように、本実施形態に係るテンプレート生成装置１００は、プログラムソースからテンプレート部のロジックを抜出すテンプレート部抽出部１１０と、抜き出したテンプレート部のロジックをもとに、旧テンプレートＩＤごとに共通コードを抽出する共通コード抽出部１２０と、抜き出したテンプレート部のロジックをもとに、共通コード以外の情報を差分情報として抽出する差分情報抽出部１３０と、を備える。また、旧テンプレートに含まれない共通コードを、新テンプレートに追加するコードとして抽出する新テンプレートコード抽出部１４０と、旧テンプレートに、新テンプレートコードを追加し、新テンプレートを生成する新テンプレート生成部１５０と、生成した新テンプレートとテンプレート部の共通部との差分情報（共通コード以外の情報）とを登録する新テンプレート登録部１６０と、を備える。
【００５７】
これにより、テンプレートを用いてソースコードを自動生成するシステムにおいて、改修が入ったとしても、新テンプレートを生成して再度ソースコードを自動生成することができる。新テンプレートが生成されるので、プログラムソースを、再度自動生成することができる。
【００５８】
本発明は上記実施形態例に限定されるものではなく、特許請求の範囲に記載した本発明の要旨を逸脱しない限りにおいて、他の変形例、応用例を含む。
また、上記した実施形態例は本発明をわかりやすく説明するために詳細に説明したものであり、必ずしも説明した全ての構成を備えるものに限定されるものではない。また、ある実施形態例の構成の一部を他の実施形態例の構成に置き換えることが可能であり、また、ある実施形態例の構成に他の実施形態例の構成を加えることも可能である。また、各実施形態例の構成の一部について、他の構成の追加・削除・置換をすることが可能である。
【００５９】
また、上記実施形態は、ＣＯＢＯＬのプログラムについて説明しているが、対象となるプログラムは、ＶｉｓｕａｌＢａｓｉｃなどどのようなものでもよい。これに伴い、差分情報は、変更された情報が何であるか、また追加、削除される箇所とその内容が分かるものであればどのような形態のものでもよい。
【００６０】
また、上記実施の形態では、テンプレート生成装置という名称を用いたが、これは説明の便宜上であり、装置の名称はプログラムソース生成装置、方法の名称はコード生成方法等であってもよい。
【００６１】
以上説明したテンプレート生成処理は、このテンプレート生成処理を機能させるためのプログラムでも実現される。このプログラムはコンピュータで読み取り可能な記録媒体に格納されている。
【００６２】
また、上記の各構成、機能、処理部、処理手段等は、それらの一部または全部を、例えば集積回路で設計する等によりハードウェアで実現してもよい。また、上記の各構成、機能等は、プロセッサがそれぞれの機能を実現するプログラムを解釈し、実行するためのソフトウェアで実現してもよい。各機能を実現するプログラム、テーブル、ファイル等の情報は、メモリや、ハードディスク、ＳＳＤ（Solid State Drive）等の記録装置、または、ＩＣ（Integrated Circuit）カード、ＳＤ（Secure Digital）カード、光ディスク等の記録媒体に保持することができる。また、本明細書において、時系列的な処理を記述する処理ステップは、記載された順序に沿って時系列的に行われる処理はもちろん、必ずしも時系列的に処理されなくとも、並列的あるいは個別に実行される処理（例えば、並列処理あるいはオブジェクトによる処理）をも含むものである。
また、制御線や情報線は説明上必要と考えられるものを示しており、製品上必ずしもすべての制御線や情報線を示しているとは限らない。実際には殆ど全ての構成が相互に接続されていると考えてもよい。
【符号の説明】
【００６３】
１００  テンプレート生成装置
１１０  テンプレート部抽出部（テンプレート部抽出手段）
１２０  共通コード抽出部（共通コード抽出手段）
１３０  差分情報抽出部（差分情報抽出手段）
１４０  新テンプレートコード抽出部（新テンプレートコード抽出手段）
１５０  新テンプレート生成部（新テンプレート生成手段）
１６０  新テンプレート登録部（新テンプレート登録手段）
【図１】
2018173699.tif 000003
【図２】
2018173699.tif 000004
【図３】
2018173699.tif 000005
【図４】
2018173699.tif 000006
【図５】
2018173699.tif 000007
【図６】
2018173699.tif 000008
【図７】
2018173699.tif 000009
【図８】
2018173699.tif 000010
【図９】
2018173699.tif 000011
【図１０】
2018173699.tif 000012
【図１１】
2018173699.tif 000013
【図１２】
2018173699.tif 000014
【図１３】
2018173699.tif 000015
【図１４】
2018173699.tif 000016
【図１５】
2018173699.tif 000017
【図１６】
2018173699.tif 000018
【図１７】
2018173699.tif 000019
【図１８】
2018173699.tif 000020