(57)【要約】【課題】予め定められている命名規則が反映されたプログラムを自動生成するためのプログラムテンプレートを生成することが可能なプログラムテンプレート自動生成プログラムおよびプログラムテンプレート自動生成装置を提供することにある。【解決手段】プログラムテンプレート自動生成プログラムは、コンピュータに、テンプレート格納手段に格納されている第１のプログラムテンプレート及び変数リスト格納手段に格納されている変数リストを取得するステップを実行させる。プログラムテンプレート自動生成プログラムは、コンピュータに、第１のプログラムテンプレートに含まれる変数を、当該変数に対応づけて前記取得された変数リストに保持されている置換情報で置換することによって、当該置換情報を含む第２のプログラムテンプレートを生成するステップを実行させる。【選択図】図２
2013148953.tif 000002
【特許請求の範囲】
【請求項１】
プログラムの自動生成に用いられる変数を含む第１のプログラムテンプレートを格納するテンプレート格納手段と、前記変数に対応づけて当該変数に対して置換される前記データ要素を含む置換情報であって前記自動生成されるプログラムに対して予め定められた命名規則を反映するための置換情報を保持する変数リストを格納する変数リスト格納手段とを有する外部記憶装置と、当該外部記憶装置を利用するコンピュータとから構成されるプログラムテンプレート自動生成装置において、前記コンピュータによって実行されるプログラムテンプレート自動生成プログラムであって、
前記コンピュータに、
前記テンプレート格納手段に格納されている第１のプログラムテンプレートを取得するステップと、
前記変数リスト格納手段に格納されている変数リストを取得するステップと、
前記取得された第１のプログラムテンプレートに含まれる変数を、当該変数に対応づけて前記取得された変数リストに保持されている置換情報で置換することによって、当該置換情報を含む第２のプログラムテンプレートを生成するステップと
を実行させるためのプログラムテンプレート自動生成プログラム。
【請求項２】
前記外部記憶装置は、前記自動生成されるプログラムにおいて用いられるテーブルのデータ要素および当該データ要素の値を含むテーブル情報を格納するテーブル定義格納手段を更に有し、
前記コンピュータに、
前記テーブル定義格納手段に格納されているテーブル情報を取得するステップと、
前記生成された第２のプログラムテンプレートに含まれる置換情報に含まれるデータ要素を、前記取得されたテーブル情報に含まれる当該データ要素の値で置換することによって、前記プログラムを生成するステップと
を更に実行させる
ことを特徴とする請求項１記載のプログラムテンプレート自動生成プログラム。
【請求項３】
前記外部記憶装置は、ユーザによって定義された前記命名規則を予め格納する命名規則格納手段と、前記変数に対応づけて当該変数が変換される値を含む変数生成ルールを予め格納する変数生成ルール格納手段とを更に有し、
前記コンピュータに、
前記命名規則格納手段に格納されている命名規則を前記変数生成ルール格納手段に格納されている変数生成ルールに含まれる値に適用することによって、前記変数に対応づけて前記置換情報を保持する変数リストを生成するステップと、
前記生成された変数リストを前記変数リスト格納手段に格納するステップと
を更に実行させる
ことを特徴とする請求項１記載のプログラムテンプレート自動生成プログラム。
【請求項４】
前記コンピュータに、
前記命名規則格納手段に格納されている命名規則が予め定められている形式で定義されているかを検証するステップと、
前記検証結果を出力するステップと
を更に実行させる
ことを特徴とする請求項３記載のプログラムテンプレート自動生成プログラム。
【請求項５】
プログラムの自動生成に用いられる変数を含む第１のプログラムテンプレートを格納するテンプレート格納手段と、
前記変数に対応づけて当該変数に対して置換される前記データ要素を含む置換情報であって前記自動生成されるプログラムに対して予め定められた命名規則を反映するための置換情報を保持する変数リストを格納する変数リスト格納手段と、
前記テンプレート格納手段に格納されている第１のプログラムテンプレートを取得する第１の取得手段と、
前記変数リスト格納手段に格納されている変数リストを取得する第２の取得手段と、
前記第１の取得手段によって取得された第１のプログラムテンプレートに含まれる変数を、当該変数に対応づけて前記第２の取得手段によって取得された変数リストに保持されている置換情報で置換することによって、当該置換情報を含む第２のプログラムテンプレートを生成する生成手段と
を具備することを特徴とするプログラムテンプレート自動生成装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明の実施形態は、プログラムを自動生成するためのプログラムテンプレート自動生成プログラムおよびプログラム自動生成装置に関する。
【背景技術】
【０００２】
近年、例えばプログラムテンプレートを用いてプログラム（アプリケーション）を自動生成することが可能なシステムが開発されている。
【０００３】
ところで、プログラムを生成する際には、予め定められている命名規則（例えば、プロジェクト等で定められている命名規則）を反映させることが好ましい。このプロジェクト等で定められている命名規則には、例えば自動生成されるプログラムにおけるクラス名を当該プロジェクト名とすること等が含まれる。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２００６−４１４５号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
しかしながら、上記したようなプログラムを自動生成するシステムにおいては、予め定められている命名規則を反映したプログラムを生成することはできない。
【０００６】
命名規則をプログラムに反映させるためには、ユーザは、自動生成されたプログラムに対して当該命名規則を手作業で反映させる必要があるが、この作業はユーザにとって非常に煩雑である。
【０００７】
また、命名規則を反映したプログラムを生成するために、各種テーブルが定義された情報に含まれる当該命名規則を反映するような情報を、プログラムを自動生成するために用いられるテンプレート（プログラムテンプレート）中に埋めこむことが考えられる。
【０００８】
しかしながら、このようなプログラムテンプレートを予め用意しておいた場合において命名規則（例えば、クラス名等）を変更するような場合には、当該テンプレート中の該当箇所を全て変更しなければならず、手間がかかる。
【０００９】
そこで、本発明が解決しようとする課題は、予め定められている命名規則が反映されたプログラムを自動生成するためのプログラムテンプレートを生成することが可能なプログラムテンプレート自動生成プログラムおよびプログラムテンプレート自動生成装置を提供することにある。
【課題を解決するための手段】
【００１０】
実施形態によれば、プログラムの自動生成に用いられる変数を含む第１のプログラムテンプレートを格納するテンプレート格納手段と、前記変数に対応づけて当該変数に対して置換される前記データ要素を含む置換情報であって前記自動生成されるプログラムに対して予め定められた命名規則を反映するための置換情報を保持する変数リストを格納する変数リスト格納手段とを有する外部記憶装置と、当該外部記憶装置を利用するコンピュータとから構成されるプログラムテンプレート自動生成装置において、前記コンピュータによって実行されるプログラムテンプレート自動生成プログラムが提供される。
【００１１】
実施形態に係るプログラムテンプレート自動生成プログラムは、前記コンピュータに、前記テンプレート格納手段に格納されている第１のプログラムテンプレートを取得するステップを実行させる。
【００１２】
実施形態に係るプログラムテンプレート自動生成プログラムは、前記コンピュータに、前記変数リスト格納手段に格納されている変数リストを取得するステップを実行させる。
【００１３】
実施形態に係るプログラムテンプレート自動生成プログラムは、前記コンピュータに、前記取得された第１のプログラムテンプレートに含まれる変数を、当該変数に対応づけて前記取得された変数リストに保持されている置換情報で置換することによって、当該置換情報を含む第２のプログラムテンプレートを生成するステップを実行させる。
【図面の簡単な説明】
【００１４】
【図１】第１の実施形態に係るプログラムテンプレート自動生成装置のハードウェア構成を示すブロック図。
【図２】図１に示すプログラムテンプレート自動生成装置３０の主として機能構成を示すブロック図。
【図３】図２に示すテンプレート格納部２２に格納されているプログラムテンプレートのデータ構造の一例を示す図。
【図４】図２に示すテーブル定義格納部２３に格納されているテーブル情報のデータ構造の一例を示す図。
【図５】図２に示す変数リスト格納部２４に格納されている変数リストのデータ構造の一例を示す図。
【図６】本実施形態に係るプログラムテンプレート自動生成装置３０の処理手順を示すフローチャート。
【図７】図６に示すステップＳ４の置換処理が実行されることによって生成されたプログラムテンプレートの一例を示す図。
【図８】図６に示すステップＳ５の置換処理が実行されることによって生成されたプログラムの一例を示す図。
【図９】第２の実施形態に係るプログラムテンプレート自動生成装置の主として機能構成を示すブロック図。
【図１０】図９に示す命名規則格納部２５に格納されている命名規則ユーザ定義のデータ構造の一例を示す図。
【図１１】図９に示す変数生成ルール格納部２６に格納されている変数生成ルールのデータ構造の一例を示す図。
【図１２】本実施形態に係るプログラムテンプレート自動生成装置５０によって実行される変数リスト生成処理の処理手順を示すフローチャート。
【図１３】本実施形態に係るプログラムテンプレート自動生成装置５０によって実行される変数リスト生成処理の処理手順を示すフローチャート。
【図１４】第１の文字列置換処理の処理手順を示すフローチャート。
【図１５】変数リスト生成処理において生成される変数リストＡの一例を示す図。
【図１６】変数リスト生成処理において生成される変数リストＢの一例を示す図。
【図１７】第１の命名規則検証処理の処理手順を示すフローチャート。
【図１８】第２の命名規則検証処理の処理手順を示すフローチャート。
【図１９】第３の文字列置換処理の処理手順を示すフローチャート。
【図２０】第３の文字列置換処理の処理手順を示すフローチャート。
【図２１】命名規則格納部２５に格納されている命名規則ユーザ定義の一例を示す図。
【図２２】左辺のドットより前がclassである変数生成ルールの一例を示す図。
【図２３】図２２に示す変数生成ルールの左辺のドットより後ろを左辺とする命名規則ユーザ定義の一例を示す図。
【図２４】第３の文字列置換処理において生成される変数リストＣの一例を示す図。
【図２５】第３の文字列置換処理において生成される変数リストＤの一例を示す図。
【図２６】第３の命名規則検証処理の処理手順を示すフローチャート。
【図２７】命名規則格納部２５に格納されている命名規則ユーザ定義の一例を示す図。
【発明を実施するための形態】
【００１５】
以下、図面を参照して、各実施形態について説明する。
【００１６】
（第１の実施形態）
図１は、第１の実施形態に係るプログラムテンプレート自動生成装置のハードウェア構成を示すブロック図である。図１に示すように、コンピュータ１０は、例えばハードディスクドライブ（ＨＤＤ：Hard Disk Drive）のような外部記憶装置２０と接続されている。この外部記憶装置２０は、コンピュータ１０によって実行されるプログラム２１を格納する。コンピュータ１０および外部記憶装置２０は、プログラムテンプレート自動生成装置３０を構成する。
【００１７】
このプログラムテンプレート自動生成装置３０は、後述するプログラムテンプレートを用いて、プログラム（アプリケーション）を自動生成する機能を有する。また、プログラムテンプレート自動生成装置３０は、予め定められた命名規則（例えば、プロジェクトで決まっている命名規則）が反映されたプログラムの自動生成に用いられるプログラムテンプレートを生成する機能を有する。
【００１８】
図２は、図１に示すプログラムテンプレート自動生成装置３０の主として機能構成を示すブロック図である。
【００１９】
図２に示すように、プログラムテンプレート自動生成装置３０は、プログラム自動生成部３１を含む。本実施形態において、プログラム自動生成部３１は、図１に示すコンピュータ１０が外部記憶装置２０に格納されているプログラム（プログラムテンプレート自動生成プログラム）２１を実行することにより実現されるものとする。このプログラム２１は、コンピュータ読み取り可能な記憶媒体に予め格納して頒布可能である。また、このプログラム２１が、例えばネットワークを介してコンピュータ１０にダウンロードされても構わない。
【００２０】
また、プログラムテンプレート自動生成装置３０は、テンプレート格納部２２、テーブル定義格納部２３および変数リスト格納部２４を含む。本実施形態において、テンプレート格納部２２、テーブル定義格納部２３および変数リスト格納部２４は、例えば外部記憶装置２０に格納される。
【００２１】
テンプレート格納部２２には、プログラムの自動生成に用いられるプログラムテンプレート（第１のプログラムテンプレート）が予め格納される。テンプレート格納部２２に格納されているプログラムテンプレートには、変数が含まれる。なお、テンプレート格納部２２には、自動生成されるプログラム毎のプログラムテンプレートが格納されている。
【００２２】
テーブル定義格納部２３には、プログラムテンプレート自動生成装置３０において自動生成されるプログラムにおいて用いられるテーブルの構造を定義するテーブル情報が格納される。テーブル定義格納部２３に格納されているテーブル情報は、テーブルのデータ要素および当該データ要素の値が含まれる。なお、テーブル情報に含まれるデータ要素には、当該テーブルを識別するためのテーブルＩＤおよび当該テーブルを構成するカラムを識別するためのカラムＩＤ等が含まれる。また、テーブル情報に含まれるデータ要素の値には、テーブルＩＤおよびカラムＩＤの値等が含まれる。
【００２３】
変数リスト格納部２４には、テンプレート格納部２２に格納されているプログラムテンプレートに含まれる変数に対応づけて、当該変数に対して置換される値（以下、置換情報と表記）を保持する変数リストが格納される。変数リスト格納部２４に格納されている変数リストに保持される置換情報には、テーブル定義格納部２３に格納されているテーブル情報に含まれるデータ要素が含まれる。なお、この置換情報は、プログラムテンプレート自動生成装置３０において自動生成されるプログラムに対して予め定められた命名規則を反映するために用いられる。また、変数リスト格納部２４に格納されている変数リストは、例えばプログラムにおいて定義されるクラス名または属性名等の単位で定義される。
【００２４】
プログラム自動生成部３１は、変数リスト格納部２４に格納されている変数リストに基づいて、テンプレート格納部２２に格納されているプログラムテンプレートに対して置換処理を実行することによって、上記した命名規則を反映したプログラムを自動生成するためのプログラムテンプレート（以下、単に命名規則を反映したプログラムテンプレートと表記）を生成する処理を実行する。
【００２５】
具体的には、プログラム自動生成部３１は、テンプレート格納部２２に格納されているプログラムテンプレートに含まれる変数を、当該変数に対応づけて変数リスト（変数リスト格納部２４に格納されている変数リスト）に保持されている置換情報で置換することによって、当該置換情報を含むプログラムテンプレート（第２のプログラムテンプレート）を生成する。
【００２６】
プログラム自動生成部３１は、生成された命名規則を反映したプログラムテンプレートに含まれる置換情報に含まれるデータ要素を、テーブル情報（テーブル定義格納部２３に格納されているテーブル情報）に含まれる当該データ要素の値で置換することによって、プログラムを自動生成する。これにより、命名規則を反映したプログラムが自動生成される。
【００２７】
図３は、図２に示すテンプレート格納部２２に格納されているプログラムテンプレートのデータ構造の一例を示す。
【００２８】
図３に示すプログラムテンプレートの例では、例えば「${class.Dataset クラス名}」が変数（名）を表している。なお、図３に示す「${class.Action クラス名}」および「${attribute.自テーブルの属性名}」も同様である。
【００２９】
図３では、１つのプログラムテンプレートについて説明したが、テンプレート格納部２２には、上記したように自動生成されるプログラム毎のプログラムテンプレート（つまり、複数のプログラムテンプレート）が格納されていてもよい。
【００３０】
図４は、図２に示すテーブル定義格納部２３に格納されているテーブル情報のデータ構造の一例を示す。
【００３１】
図４に示す例では、テーブルＩＤの値が「Emp」であるテーブル（以下、Empテーブルと表記）の構造を定義するテーブル情報およびテーブルＩＤの値が「Dept」であるテーブル（以下、Deptテーブルと表記）の構造を定義するテーブル情報が示されている。なお、Empテーブルの構造を定義するテーブル情報（以下、Empテーブルのテーブル情報と表記）は図４の１行目〜１０行目であり、Deptテーブルの構造を定義するテーブル情報（以下、Deptテーブルのテーブル情報と表記）は図４の１２行目〜１５行目である。
【００３２】
図４に示すEmpテーブルのテーブル情報においては、最初の行（ここでは、図４の１行目）にテーブルＩＤ（テーブル名）が記述され、次の行以降（ここでは、図４の２〜８行目）に当該Empテーブルを構成するカラムの定義が記述されている。なお、カラムの定義の記述の後（ここでは、図４の９および１０行目）に、外部キーの定義が記述されている。
【００３３】
また、図４に示すDeptテーブルのテーブル情報においては、最初の行（ここでは、図４の１２行目）にテーブルＩＤ（テーブル名）が記述され、次の行以降（ここでは、図４の１３〜１５行目）に当該Deptテーブルを構成するカラムの定義が記述されている。
【００３４】
なお、図４に示すテーブルＩＤおよびカラムＩＤ等は、テーブル情報に含まれるデータ要素である。また、例えばEmpテーブルのテーブル情報に含まれるデータ要素「テーブルＩＤ」の値は、Empである。
【００３５】
図５は、図２に示す変数リスト格納部２４に格納されている変数リストのデータ構造の一例を示す。
【００３６】
図５に示すように、変数リストの左辺には、テンプレート格納部２２に格納されているプログラムテンプレートに含まれる変数（名）が記述されている。一方、変数リストの右辺には、左辺の変数に対して置換される置換情報（値）が記述されている。
【００３７】
具体的には、図５に示す変数リストの１行目は、例えば「class.Action クラス名」がプログラムテンプレートに含まれている場合には、当該プログラムテンプレート中の「class.Action クラス名」が$[テーブルＩＤ]Actionで置換されることを示している。
【００３８】
なお、図５に示すように、変数リストの右辺の置換情報には、$[テーブルＩＤ]のように図４に示すテーブル情報に含まれるデータ要素が含まれている。つまり、この$[テーブルＩＤ]は、テーブル情報から取得できる値を示している。
【００３９】
つまり、上記したようにプログラムテンプレート中の「class.Action クラス名」が$[テーブルＩＤ]Actionで置換された場合、当該プログラムテンプレート中の$[テーブルＩＤ]は、テーブル情報に含まれるデータ要素「テーブルＩＤ」の値（例えば、Emp）で更に置換される。
【００４０】
次に、図６のフローチャートを参照して、本実施形態に係るプログラムテンプレート自動生成装置３０の処理手順について説明する。
【００４１】
ここでは、テーブル定義格納部２３に格納されているテーブル情報の各々について以下のステップＳ１〜Ｓ６の処理が実行される。
【００４２】
まず、プログラム自動生成部３１は、テーブル定義格納部２３に格納されているテーブル情報を１つ取得する（ステップＳ１）。つまり、プログラム自動生成部３１は、テーブル定義格納部２３から、１テーブル分のテーブル情報を取得する。
【００４３】
次に、プログラム自動生成部３１は、変数リスト格納部２４に格納されている変数リストを取得する（ステップＳ２）。
【００４４】
以下、テンプレート格納部２２に格納されているプログラムテンプレートの各々についてステップＳ３〜Ｓ５の処理が実行される。
【００４５】
プログラム自動生成部３１は、テンプレート格納部２２に格納されているプログラムテンプレート（第１のプログラムテンプレート）を１つ取得する（ステップＳ３）。
【００４６】
プログラム自動生成部３１は、ステップＳ３において取得されたプログラムテンプレートに含まれる変数を、ステップＳ２において取得された変数リストの値で置換する（ステップＳ４）。具体的には、プログラム自動生成部３１は、プログラムテンプレートに含まれる変数を、当該変数に対応づけて変数リストに保持されている値（置換情報）で置換する。
【００４７】
ここで、ステップＳ４の置換処理について具体的に説明する。ここでは、上記したステップＳ２において、上述した図５に示す変数リストが取得されたものとする。また、上記したステップＳ３において、上述した図３に示すプログラムテンプレートが取得されたものとする。
【００４８】
まず、図３に示すプログラムテンプレートの１行目の「${class.Dataset クラス名}」の｛｝の内容は、図５に示す変数リストの３行目の左辺と一致する。この場合、図３に示すプログラムテンプレートの１行目の「${class.Dataset クラス名}」は、図５に示す変数リストの３行目の右辺の値「$[テーブルＩＤ]DS」で置換される。
【００４９】
また、図３に示すプログラムテンプレートの３行目の「${class.Action クラス名}」の｛｝の内容は、図５に示す変数リストの１行目の左辺と一致する。このため、図３に示すプログラムテンプレートの３行目の「${class.Action クラス名}」は、図５に示す変数リストの１行目の右辺の値「$[テーブルＩＤ]Action」で置換される。
【００５０】
更に、図３に示すプログラムテンプレートの４行目の「${attribute.自テーブルの属性名}」の｛｝の内容は、図５に示す変数リストの４行目の左辺と一致する。このため、図３に示すプログラムテンプレートの４行目の「${attribute.自テーブルの属性名}」は、図５に示す変数リストの４行目の右辺の値「$[カラムＩＤ]」で置換される。
【００５１】
このようにステップＳ４の置換処理が実行されることによって、プログラムテンプレートに含まれる変数が変数リストの値で置換されたプログラムテンプレート（第２のプログラムテンプレート）が生成される。
【００５２】
なお、図７は、上記したようにステップＳ４の置換処理が実行されることによって生成されたプログラムテンプレートの一例を示す。図７に示す例では、ステップＳ４の置換処理が実行されることによって生成されたプログラムテンプレートには、テーブルＩＤおよびカラムＩＤ等のテーブル情報に含まれるデータ要素が含まれている。
【００５３】
再び図６に戻ると、プログラム自動生成部３１は、ステップＳ４で置換処理が実行されることによって生成されたプログラムテンプレートに含まれるデータ要素を、ステップＳ１において取得されたテーブル情報（に含まれる当該データの要素の値）で置換する（ステップＳ５）。
【００５４】
ここで、ステップＳ５の置換処理について具体的に説明する。ここでは、上記したステップＳ１において、上述した図４に示すEmpテーブル（テーブルＩＤがEmpであるテーブル）のテーブル情報（つまり、図４の１行目〜１０行目）が取得されたものとする。また、上記したステップＳ４の置換処理が実行されることによって、図７に示すプログラムテンプレートが得られたものとする。
【００５５】
まず、図７に示すプログラムテンプレートの１行目の「$[テーブルＩＤ]」の［］の内容は、図１に示すEmpテーブルのテーブル情報の１行目に存在する。この場合、図７に示すプログラムテンプレートの１行目の「$[テーブルＩＤ]」は、図４に示すEmpテーブルを示すテーブル情報の１行目のテーブルＩＤ（データ要素）の値「Emp」で置換される。
【００５６】
また、図７に示すプログラムテンプレートの３行目の「$[テーブルＩＤ]」の［］の内容は、図１に示すEmpテーブルのテーブル情報の１行目に存在する。この場合、図７に示すプログラムテンプレートの３行目の「$[テーブルＩＤ]」は、図４に示すEmpテーブルのテーブル情報の１行目のテーブルＩＤ（データ要素）の値「Emp」で置換される。
【００５７】
更に、図７に示すプログラムテンプレートの４行目の「$[カラムＩＤ]」の［］の内容は、図１に示すEmpテーブルのテーブル情報の２行目〜８行目に存在する。この場合、図７に示すプログラムテンプレートの４行目の「$[カラムＩＤ]」は、図４に示すEmpテーブルのテーブル情報の２行目〜８行目のカラムＩＤ（データ要素）の値「empno」、［ename］、［job］、［mgr］、［hiredate］、［sal］、［deptno］でそれぞれ置換される。
【００５８】
このようにステップＳ５の置換処理が実行されることによって、命名規則を反映したプログラムが自動生成される。
【００５９】
なお、図８は、上記したようにステップＳ５の置換処理が実行されることによって生成されたプログラムの一例を示す。上記したようにステップＳ４およびＳ５の置換処理が実行されることによって、この図８に示すプログラムは、予め定められた命名規則を反映したプログラムとなる。
【００６０】
再び図６に戻ると、テンプレート格納部２２に格納されている全てのプログラムテンプレートについて上記したステップＳ３〜Ｓ５の処理が実行されたか否かが判定される。
【００６１】
全てのプログラムテンプレートについて処理が実行されていないと判定された場合（ステップＳ６のＮＯ）、上記したステップＳ３に戻って処理が繰り返される。
【００６２】
一方、全てのプログラムテンプレートについて処理が実行されたと判定された場合（ステップＳ６のＹＥＳ）、テーブル定義格納部２３に格納されている全てのテーブル情報について上記したステップＳ１〜Ｓ６の処理が実行されたか否かが判定される（ステップＳ７）。
【００６３】
全てのテーブル情報について処理が実行されていないと判定された場合（ステップＳ７のＮＯ）、上記したステップＳ１に戻って処理が繰り返される。
【００６４】
一方、全てのテーブル情報について処理が実行されたと判定された場合（ステップＳ７のＹＥＳ）、本実施形態に係るプログラムテンプレート自動生成装置３０の処理は終了される。
【００６５】
上記したように、プログラムテンプレート自動生成装置３０に含まれるプログラム自動生成部３１は、テンプレート格納部２２に格納されているプログラムテンプレートおよび変数リスト格納部２４に格納されている変数リストに基づいて命名規則を反映したプログラムテンプレートを生成し、当該プログラムテンプレートを用いてプログラムを自動生成することができる。
【００６６】
なお、図６においては、命名規則を反映したプログラムテンプレートの生成処理及びプログラムの生成処理が一連の処理として実行されるものとして説明したが、例えばプログラムテンプレートの生成処理（つまり、図６に示すステップＳ５以外の処理）のみが実行され、プログラムの生成処理は後で行われるような構成としても構わない。
【００６７】
上記したように本実施形態においては、テンプレート格納部２２に格納されているプログラムテンプレート（第１のプログラムテンプレート）に含まれる変数を、当該変数に対応づけて変数リストに保持されている値（置換情報）で置換することによって当該置換情報を含むプログラムテンプレート（第２のプログラムテンプレート）を生成する構成により、予め定められた（例えばプロジェクト等で決まっている）命名規則を反映したプログラムを自動生成するためのプログラムテンプレートを生成することが可能となる。
【００６８】
つまり、本実施形態においては、例えばクラス名または属性名等の単位で定義されている変数リストを利用することにより、例えばプログラムテンプレートに反映された命名規則を変更する場合であっても、当該変数リストを変更した上でプログラムテンプレートを再生成することで容易に当該変更をプログラムテンプレートに反映することができる。
【００６９】
また、本実施形態においては、上記したように生成されたプログラムテンプレートに含まれる置換情報に含まれるデータ要素を、テーブル定義格納部２３に格納されているテーブル情報に含まれる当該データ要素の値で置換することによってプログラムを生成する構成により、予め定められた命名規則を反映したプログラム（アプリケーション）を自動生成することができ、ユーザのプログラム開発の効率を向上させることが可能となる。
【００７０】
（第２の実施形態）
次に、第２の実施形態について説明する。図９は、本実施形態に係るプログラムテンプレート自動生成装置の主として機能構成を示すブロック図である。なお、前述した図２と同様の部分には同一参照符号を付してその詳しい説明を省略する。ここでは、図２と異なる部分について主に述べる。
【００７１】
また、本実施形態に係るプログラムテンプレート自動生成装置のハードウェア構成は、前述した第１の実施形態と同様であるため、適宜、図１を用いて説明する。
【００７２】
本実施形態においては、ユーザによって定義された命名規則（以下、命名規則ユーザ定義と表記）を前述した第１の実施形態において用いられる変数リストに自動的に反映させる点および当該命名規則ユーザ定義が予め定められている形式で定義されているか否かを検証する点が、前述した第１の実施形態とは異なる。
【００７３】
図９に示すように、本実施形態に係るプログラムテンプレート自動生成装置３０は、変数リスト生成部５１および命名規則検証部５２を含む。本実施形態において、変数リスト生成部５１および命名規則検証部５２は、図１に示すコンピュータ１０が外部記憶装置２０に格納されているプログラム（プログラムテンプレート自動生成プログラム）２１を実行することにより実現されるものとする。このプログラム２１は、コンピュータ読み取り可能な記憶媒体に予め格納して頒布可能である。また、このプログラム２１が、例えばネットワークを介してコンピュータ１０にダウンロードされても構わない。
【００７４】
また、プログラムテンプレート自動生成装置３０は、命名規則格納部２５、変数生成ルール格納部２６および検証結果格納部２７を含む。本実施形態において、命名規則格納部２５、変数生成ルール格納部２６および検証結果格納部２７は、例えば外部記憶装置２０に格納される。
【００７５】
命名規則格納部２５には、命名規則ユーザ定義（ユーザによって定義された命名規則）が予め格納されている。この命名規則ユーザ定義は、前述した第１の実施形態において説明したようにプログラムに対して反映されるべきものである。
【００７６】
変数生成ルール格納部２６には、変数に対応づけて当該変数が変換される値を含む変数生成ルールが予め格納されている。この変数生成ルール格納部２６に格納されている変数生成ルールは、前述した第１の実施形態における変数リストを生成するために用いられる。
【００７７】
なお、命名規則格納部２５に格納されている命名規則ユーザ定義および変数生成ルール格納部２６に格納されている変数生成ルールの具体的なデータ構造については、後述する。
【００７８】
変数リスト生成部５１は、命名規則格納部２５に格納されている命名規則ユーザ定義を変数生成ルール格納部２６に格納されている変数生成ルール（に含まれる値）に適用することによって、変数に対応づけて置換情報を保持する変数リストを生成する。なお、変数リスト生成部５１によって生成された変数リストは、変数リスト格納部２４に格納される。
【００７９】
命名規則検証部５２は、命名規則格納部２５に格納されている命名規則ユーザ定義が予め定められている形式で定義されているか否かを検証する。命名規則検証部５２による検証結果は、検証結果格納部２７に出力される（格納される）。なお、検証結果格納部２７に格納された検証結果は、例えばユーザに対して提示される。
【００８０】
図１０は、図９に示す命名規則格納部２５に格納されている命名規則ユーザ定義のデータ構造の一例を示す。なお、命名規則ユーザ定義は、ユーザによって設定される。
【００８１】
図１０に示す例において、命名規則ユーザ定義の１行目は、クラス名の先頭に“Stv”をつけるという命名規則を表している。具体的には、この命名規則ユーザ定義の左辺は、後述する変数生成ルール（の左辺）のドットより前がclassであるもの全てに当該命名規則ユーザ定義が適用されることを表す。一方、この命名規則ユーザ定義の右辺は、[this]の箇所に該当する変数生成ルールの右辺が挿入されることを表す。
【００８２】
命名規則ユーザ定義の２行目は、変数生成ルール（の右辺）の末尾に“Logic”をつけることによってServiceクラス名とすることを表している。なお、この命名規則ユーザ定義の右辺の[class.Serviceクラス名]は、変数生成ルールの左辺が同名のものと対応する。
【００８３】
命名規則ユーザ定義の３行目は、変数生成ルールを利用することなく、当該命名規則ユーザ定義において記述されている$[テーブルＩＤ]DataSetを利用することを表している。なお、$[テーブルＩＤ]は、テーブル定義格納部２３に格納されているテーブル情報に含まれているデータ要素を表す。
【００８４】
命名規則ユーザ定義の４行目は、変数生成ルールのものをそのまま利用することを表している。なお、後述するように対応する命名規則ユーザ定義が命名規則格納部２５に格納されていない場合には、変数生成ルールが利用される。つまり、命名規則ユーザ定義の４行目が定義されていない場合であっても、同様の結果を得ることは可能である。命名規則ユーザ定義は、全ての変数生成ルールに対応して作成される必要はない。
【００８５】
上記したような命名規則ユーザ定義の左辺に定義できるものは、変数生成ルールの左辺のドットより前と一致するもの（class、attribute等）および変数生成ルールの左辺のドットより後ろと一致するもの（図１０の例では、Serviceクラス名、DataSetクラス名、自テーブルの属性名等）である。
【００８６】
また、命名規則ユーザ定義の［］に定義できるものは、命名規則ユーザ定義の左辺に一致するもの（図１０に示す例では、Serviceクラス名、DataSetクラス名、自テーブルの属性名等）、変数生成ルールの左辺と一致するもの（図１０に示す例では、class.Serviceクラス名、attribute.自テーブルの属性名等）およびthisである。
【００８７】
図１１は、図９に示す変数生成ルール格納部２６に格納されている変数生成ルールのデータ構造の一例を示す。
【００８８】
図１１に示すように、変数生成ルールの左辺は、前述したプログラムテンプレートの変数（名）と対応している。一方、変数生成ルールの右辺は、対応する変数が変換される値を表す。
【００８９】
図１１に示す例では、変数生成ルールの１行目は、プログラムテンプレートにclass.Actionクラス名という変数が含まれている場合に、当該class.Actionクラス名という変数を$[テーブルＩＤ]Actionに変換することを表している。
【００９０】
また、変数生成ルールの２行目は、プログラムテンプレートにclass.Serviceクラス名という変数が含まれている場合に、当該class.Serviceクラス名という変数を$[テーブルＩＤ]Serviceに変換することを表している。
【００９１】
変数生成ルールの３行目は、プログラムテンプレートにclass.Datasetクラス名という変数が含まれている場合に、当該class.Datasetクラス名という変数を$[テーブルＩＤ]DSに変換することを表している。
【００９２】
変数生成ルールの４行目は、プログラムテンプレートにattribute.自テーブルの属性名という変数が含まれている場合に、当該attribute.自テーブルの属性名という変数を$[カラムＩＤ]に変換することを表している。
【００９３】
更に、変数生成ルールの５行目は、プログラムテンプレートにattribute.親テーブルの属性名という変数が含まれている場合に、当該attribute.親テーブルの属性名という変数を$[テーブルID]_$[カラムＩＤ]に変換することを表している。
【００９４】
また、変数生成ルールの６行目は、プログラムテンプレートにattribute.参照先のテーブルの属性名という変数が含まれている場合に、当該attribute.参照先のテーブルの属性名という変数を$[カラムＩＤ]_$[参照先カラムＩＤ]に変換することを表している。
【００９５】
上記した変数生成ルールに含まれる$[テーブルＩＤ]、$[カラムＩＤ]および$[参照先カラムＩＤ]は、テーブル定義格納部２３に格納されているテーブル情報に含まれているデータ要素を表す。
【００９６】
なお、図１１に示すように、変数生成ルール格納部２６に格納されている変数生成ルールは、前述した第１の実施形態における変数リストと同様の形式である。
【００９７】
以下、本実施形態に係るプログラムテンプレート自動生成装置５０の動作について説明する。本実施形態に係るプログラムテンプレート自動生成装置５０は、後述するように変数リスト生成処理および命名規則検証処理を実行する。
【００９８】
まず、図１２および図１３のフローチャートを参照して、本実施形態に係るプログラムテンプレート自動生成装置５０によって実行される変数リスト生成処理の処理手順について説明する。
【００９９】
なお、変数リスト生成処理においては、命名規則格納部２５に格納されている命名規則ユーザ定義を変数生成ルール格納部２６に格納されている変数生成ルールに適用することによって変数リストが生成される。この変数リスト生成処理において生成された変数リストは、前述した第１の実施形態において説明したようにプログラムテンプレートの自動生成に用いられる。
【０１００】
変数リスト生成処理においては、まず、変数生成ルール格納部２６に格納されている変数生成ルールの各々について以下のステップＳ１１〜Ｓ１６の処理が実行される。なお、以下の説明においては、上述した図１１に示す各行がそれぞれ１つの変数生成ルールであるものとして説明する。
【０１０１】
変数リスト生成部５１は、変数生成ルール格納部２６に格納されている変数生成ルールを１つ取得する（ステップＳ１１）。
【０１０２】
次に、変数リスト生成部５１は、命名規則格納部２５に格納されている命名規則ユーザ定義を１つ取得する（ステップＳ１２）。なお、上述した図１０に示す各行がそれぞれ１つの命名規則ユーザ定義であるものとする。
【０１０３】
変数リスト生成部５１は、ステップＳ１１において取得された変数生成ルールおよびステップＳ１２において取得された命名規則ユーザ定義を比較することによって、該当箇所が一致するか否かを判定する（ステップＳ１３）。なお、ステップＳ１３における該当箇所とは、ステップＳ１１において取得された変数生成ルールの左辺のドットより後ろおよびステップＳ１２において取得された命名規則ユーザ定義の左辺を指す。つまり、ステップＳ１３においては、変数生成ルールの左辺のドットより後ろと命名規則ユーザ定義の左辺とが一致するか否かが判定される。
【０１０４】
該当箇所が一致しない（つまり、変数生成ルールの左辺のドットより後ろと命名規則ユーザ定義の左辺とが一致しない）と判定された場合（ステップＳ１３のＮＯ）、変数リスト生成部５１は、命名規則格納部２５に他の命名規則ユーザ定義があるか否かを判定する（ステップＳ１４）。
【０１０５】
命名規則格納部２５に他の命名規則ユーザ定義があると判定された場合（ステップＳ１４のＹＥＳ）、上記したステップＳ１２に戻って処理が繰り返される。
【０１０６】
一方、命名規則格納部２５に他の命名規則ユーザ定義がないと判定された場合、後述するステップＳ１６の処理が実行される。
【０１０７】
また、上記したステップＳ１３において、該当箇所が一致する（つまり、変数生成ルールの左辺のドットより後ろと命名規則ユーザ定義の左辺とが一致する）と判定された場合、変数リスト生成部５１は、第１の文字列置換処理を実行する（ステップＳ１５）。この第１の文字列置換処理では、変数生成ルール格納部２６に格納されている変数生成ルールにステップＳ１２において取得された命名規則ユーザ定義を適用することによって当該命名規則ユーザ定義（または変数生成ルール）の文字列を置換（変換）し、新たな変数生成ルールが取得される。なお、第１の文字列置換処理の詳細については後述する。
【０１０８】
変数リスト生成部５１は、第１の文字列置換処理が実行されることによって取得された新たな変数生成ルールを変数リストＡに追加する（ステップＳ１６）。
【０１０９】
なお、上記したようにステップＳ１４において命名規則格納部２５に他の命名規則ユーザ定義がないと判定された場合にはステップＳ１６の処理が実行されるが、この場合、ステップＳ１１において取得された変数生成ルールがそのまま新たな変数生成ルールとして変数リストＡに追加される。
【０１１０】
ステップＳ１６の処理が実行されると、変数リスト生成部５１は、変数生成ルール格納部２６に他の変数生成ルールがあるか否かを判定する（ステップＳ１７）。
【０１１１】
変数生成ルール格納部２６に他の変数生成ルールがあると判定された場合（ステップＳ１７のＹＥＳ）、上記したステップＳ１１に戻って処理が繰り返される。
【０１１２】
一方、変数生成ルール格納部２６に他の変数生成ルールがないと判定された場合（ステップＳ１７のＮＯ）、変数生成ルール格納部２６に格納されている変数生成ルールの各々について以下のステップＳ１８〜Ｓ２３の処理が実行される。
【０１１３】
変数リスト生成部５１は、上記した変数リストＡに追加された変数生成ルール（新たな変数生成ルール）を１つ取得する（ステップＳ１８）。
【０１１４】
次に、変数リスト生成部５１は、命名規則格納部２５に格納されている命名規則ユーザ定義を１つ取得する（ステップＳ１９）。
【０１１５】
変数リスト生成部５１は、ステップＳ１８において取得された変数生成ルールおよびステップＳ１９において取得された命名規則ユーザ定義を比較することによって、該当箇所が一致するか否かを判定する（ステップＳ２０）。なお、ステップＳ２０における該当箇所とは、ステップＳ１８において取得された変数生成ルールの左辺のドットより前およびステップＳ１９において取得された命名規則ユーザ定義の左辺を指す。つまり、ステップＳ２０においては、変数生成ルールの左辺のドットより前と命名規則ユーザ定義の左辺とが一致するか否かが判定される。
【０１１６】
該当箇所が一致しない（つまり、変数生成ルールの左辺のドットより前と命名規則ユーザ定義の左辺とが一致しない）と判定された場合（ステップＳ２０のＮＯ）、変数リスト生成部５１は、命名規則格納部２５に他の命名規則ユーザ定義があるか否かを判定する（ステップＳ２１）。
【０１１７】
命名規則格納部２５に他の命名規則ユーザ定義があると判定された場合（ステップＳ２１のＹＥＳ）、上記したステップＳ１９に戻って処理が繰り返される。
【０１１８】
一方、命名規則格納部２５に他の命名規則ユーザ定義がないと判定された場合（ステップＳ２１のＮＯ）、後述するステップＳ２３の処理が実行される。
【０１１９】
また、上記したステップＳ２０において、該当箇所が一致する（つまり、変数生成ルールの左辺のドットより前と命名規則ユーザ定義の左辺とが一致する）と判定された場合、変数リスト生成部５１は、第２の文字列置換処理を実行する（ステップＳ２２）。この第２の文字列置換処理では、上述した変数リストＡに追加された変数生成ルールにステップＳ１９において取得された命名規則ユーザ定義を適用することによって当該命名規則ユーザ定義（または変数生成ルール）の文字列を置換（変換）し、新たな変数生成ルールが取得される。なお、第２の文字列置換処理の詳細については後述する。
【０１２０】
変数リスト生成部５１は、第２の文字列置換処理が実行されることによって取得された新たな変数生成ルールを変数リストＢに追加する（ステップＳ２３）。
【０１２１】
なお、上記したようにステップＳ２１において命名規則格納部２５に他の命名規則ユーザ定義がないと判定された場合にはステップＳ２３の処理が実行されるが、この場合、ステップＳ１８において取得された変数生成ルールがそのまま新たな変数生成ルールとして変数リストＢに追加される。
【０１２２】
ステップＳ２３の処理が実行されると、変数リスト生成部５１は、変数リストＡに他の変数生成ルールがあるか否かを判定する（ステップＳ２４）。
【０１２３】
変数リストＡに他の変数生成ルールがあると判定された場合（ステップＳ２４のＹＥＳ）、上記したステップＳ１８に戻って処理が繰り返される。
【０１２４】
一方、変数リストＡに他の変数生成ルールがないと判定された場合（ステップＳ２４のＮＯ）、変数リスト生成処理は終了される。
【０１２５】
なお、変数リスト生成処理が終了されると、変数リストＢ（の内容）が変数リストとして変数リスト格納部２４に格納される。
【０１２６】
次に、図１４のフローチャートを参照して、前述した第１の文字列置換処理（図１２に示すステップＳ１５の処理）の処理手順について説明する。この第１の文字列置換処理によれば、上述したように新たな変数生成ルールが取得される。
【０１２７】
ここでは、図１２に示すステップＳ１１において取得された変数生成ルール（つまり、図１２に示すステップＳ１３において該当箇所が一致すると判定された変数生成ルール）を対象変数生成ルール、図１２に示すステップＳ１２において取得された命名規則ユーザ定義（つまり、図１２に示すステップＳ１３において該当箇所が一致すると判定された命名規則ユーザ定義）を対象命名規則ユーザ定義と称する。
【０１２８】
まず、変数リスト生成部５１は、対象命名規則ユーザ定義の右辺の大括弧に囲まれた文字列がthisであるか否かを判定する（ステップＳ３１）。
【０１２９】
対象命名規則ユーザ定義の右辺の大括弧に囲まれた文字列がthisでないと判定された場合（ステップＳ３１のＮＯ）、変数リスト生成部５１は、対象変数生成ルールおよび対象命名規則ユーザ定義を比較することによって、該当箇所が一致するか否かを判定する（ステップＳ３２）。なお、ステップＳ３２における該当箇所とは、対象変数生成ルールの左辺および対象命名規則ユーザ定義の右辺の大括弧に囲まれた文字列を指す。つまり、ステップＳ３２においては、対象変数生成ルールの左辺と対象命名規則ユーザ定義の右辺の大括弧に囲まれた文字列とが一致するか否かが判定される。
【０１３０】
該当箇所が一致する（つまり、対象変数生成ルールの左辺と対象命名規則ユーザ定義の右辺の大括弧に囲まれた文字列とが一致する）と判定された場合（ステップＳ３２のＹＥＳ）、変数リスト生成部５１は、新たな変数生成ルールの左辺を、対象変数生成ルールの左辺とする（ステップＳ３３）。
【０１３１】
次に、変数リスト生成部５１は、対象命名規則ユーザ定義の右辺の大括弧および当該大括弧に囲まれた文字列（大括弧の文字列）を対象変数生成ルールの右辺で置換する（ステップＳ３４）。この場合、変数リスト生成部５１は、大括弧および当該大括弧に囲まれた文字列が対象変数生成ルールの右辺で置換された後の対象命名規則ユーザ定義の右辺を、新たな変数生成ルールの右辺とする。
【０１３２】
なお、対象命名規則ユーザ定義の右辺の大括弧に囲まれた文字列がthisであると判定された場合（ステップＳ３１のＹＥＳ）、変数リスト生成部５１は、ステップＳ３３およびＳ３４の処理を実行する。具体的には、変数リスト生成部５１は、新たな変数生成ルールの左辺を対象変数生成ルールの左辺とし、対象命名規則ユーザ定義の右辺の大括弧および当該大括弧に囲まれた文字列（ここでは、this）を対象変数生成ルールの右辺で置換して新たな変数生成ルールの右辺とする。
【０１３３】
これにより、対象命名規則ユーザ定義の右辺の大括弧に囲まれた文字列がthisであると判定された場合、および対象命名規則ユーザ定義の右辺の大括弧に囲まれた文字列がthisでないと判定され、かつ、該当箇所が一致すると判定された場合には、対象変数生成ルールの左辺を左辺とし、大括弧および当該大括弧に囲まれた文字列が対象変数生成ルールの右辺で置換された後の対象命名規則ユーザ定義の右辺を右辺とする、新たな変数生成ルールが取得される。
【０１３４】
一方、該当箇所が一致しない（つまり、対象変数生成ルールの左辺と対象命名規則ユーザ定義の右辺の大括弧に囲まれた文字列とが一致しない）と判定された場合（ステップＳ３２のＮＯ）、変数リスト生成部５１は、新たな変数生成ルールの左辺を、対象変数生成ルールの左辺とする（ステップＳ３５）。
【０１３５】
次に、変数生成リスト生成部５１は、新たな変数生成ルールの右辺を、対象命名規則ユーザ定義の右辺とする（ステップＳ３６）。
【０１３６】
これにより、該当箇所が一致すると判定された場合には、対象変数生成ルールの左辺を左辺とし、対象命名規則ユーザ定義の右辺を右辺とする、新たな変数生成ルールが取得される。
【０１３７】
ここでは、第１の文字列置換処理について説明したが、前述した第２の文字列置換処理（図１３に示すステップＳ２２の処理）においても上述した図１４に示す処理と同様の処理が実行される。なお、第２の文字列置換処理においては、図１３に示すステップＳ１８において取得された変数生成ルール（つまり、図１３に示すステップＳ２０において該当箇所が一致すると判定された変数生成ルール）を対象変数生成ルール、図１３に示すステップＳ１９に示すステップＳ１９において取得された命名規則ユーザ定義（つまり、図１３に示すステップＳ２０において該当箇所が一致すると判定された命名規則ユーザ定義）を対象命名規則ユーザ定義として、図１４に示す処理が実行される。
【０１３８】
ここで、上述した変数リスト生成処理について具体的に説明する。ここでは、便宜的に、図１０（に示す命名規則ユーザ定義）および図１１（に示す変数生成ルール）を用いて説明する。
【０１３９】
まず、上述した図１２に示す変数リスト生成処理におけるステップＳ１１〜Ｓ１７の処理について具体的に説明する。
【０１４０】
この場合、変数リスト生成部５１は、変数生成ルールを１つ取得する。ここでは、変数生成ルールとして、図１１の１行目（class.Actionクラス名=$[テーブルＩＤ]Action）が取得されたものとする。
【０１４１】
また、変数リスト生成部５１は、命名規則ユーザ定義を１つ取得する。ここでは、命名規則ユーザ定義として、図１０の１行目（class=Stv[this]）が取得されたものとする。
【０１４２】
この場合、変数リスト生成部５１は、取得された変数生成ルール「class.Actionクラス名=$[テーブルＩＤ]Action」の左辺のドットより後ろと取得された命名規則ユーザ定義「class=Stv[this]」の左辺とが一致するか否かを判定する。
【０１４３】
ここで、変数リスト生成部５１によって取得された変数生成ルールの左辺のドットより後ろはActionクラス名であり、変数リスト生成部５１によって取得された命名規則ユーザ定義の左辺はclassであるため、変数リスト生成部５１は、該当箇所（つまり、変数生成ルールの左辺のドットより後ろおよび命名規則ユーザ定義の左辺）が一致しないと判定する。
【０１４４】
このように該当箇所が一致しないと判定された場合、上述したように他の命名規則ユーザ定義についても同様の処理が実行されるが、変数生成ルール「class.Actionクラス名=$[テーブルＩＤ]Action」の左辺のドットより後ろは、図１０に示す全ての命名規則ユーザ定義の左辺と一致しない。このため、この変数生成ルール「class.Actionクラス名=$[テーブルＩＤ]Action」は、そのまま新たな変数生成ルールとして変数リストＡに追加されることになる。
【０１４５】
同様に、変数リスト生成部５１は、次の変数生成ルールを１つ取得する。ここでは、変数生成ルールとして、図１１の２行目（class.Serviceクラス名=$[テーブルＩＤ]Service）が取得されたものとする。
【０１４６】
また、変数リスト生成部５１は、命名規則ユーザ定義を１つ取得する。ここでは、命名規則ユーザ定義として、図１０の１行目（class=Stv[this]）が取得されたものとする。
【０１４７】
この場合、変数リスト生成部５１は、取得された変数生成ルール「class.Serviceクラス名=$[テーブルＩＤ]Service」の左辺のドットより後ろと取得された命名規則ユーザ定義「class=Stv[this]」の左辺とが一致するか否かを判定する。
【０１４８】
ここで、変数リスト生成部５１によって取得された変数生成ルールの左辺のドットより後ろはServiceクラス名であり、変数リスト生成部５１によって取得された命名規則ユーザ定義の左辺はclassであるため、変数リスト生成部５１は、該当箇所が一致しないと判定する。
【０１４９】
この場合、変数リスト生成部５１は、次の命名規則ユーザ定義を１つ取得する。ここでは、命名規則ユーザ定義として、図１０の２行目（Serviceクラス名=[class.Serviceクラス名]Logic）が取得されたものとする。
【０１５０】
次に、変数リスト生成部５１は、取得された変数生成ルール「class.Serviceクラス名=$[テーブルＩＤ]Service」の左辺のドットより後ろと取得された命名規則ユーザ定義「Serviceクラス名=[class.Serviceクラス名]Logic」の左辺とが一致するか否かを判定する。
【０１５１】
ここで、変数リスト生成部５１によって取得された変数生成ルールの左辺のドットより後ろはServiceクラス名であり、変数リスト生成部５１によって取得された命名規則ユーザ定義の左辺はServiceクラス名であるため、変数リスト生成部５１は、該当箇所が一致すると判定する。
【０１５２】
このように該当箇所が一致すると判定された場合、上述したように第１の文字列置換処理が実行される。
【０１５３】
第１の文字列置換処理においては、変数リスト生成部５１は、命名規則ユーザ定義「Serviceクラス名=[class.Serviceクラス名]Logic」の右辺の大括弧（つまり、［］）に囲まれた文字列がthisであるか否かを判定する。ここでは、命名規則ユーザ定義の右辺の大括弧に囲まれた文字列は、class.Serviceクラス名である。したがって、変数リスト生成部５１は、命名規則ユーザ定義の右辺の大括弧に囲まれた文字列がthisでないと判定する。
【０１５４】
この場合、変数リスト生成部５１は、変数生成ルール「class.Serviceクラス名=$[テーブルＩＤ]Service」の左辺と命名規則ユーザ定義「Serviceクラス名=[class.Serviceクラス名]Logic」の右辺の大括弧に囲まれた文字列とが一致するか否かを判定する。
【０１５５】
ここで、変数生成ルールの左辺はclass.Serviceクラス名であり、命名規則ユーザ定義の右辺の大括弧に囲まれた文字列はclass.Serviceクラス名であるため、変数リスト生成部５１は、該当箇所（つまり、変数生成ルールの左辺および命名規則ユーザ定義の右辺の大括弧に囲まれた文字列）が一致すると判定する。
【０１５６】
この場合、変数リスト生成部５１は、変数生成ルール「class.Serviceクラス名=$[テーブルＩＤ]Service」の左辺を新たな変数生成ルールの左辺とする。
【０１５７】
また、変数リスト生成部５１は、命名規則ユーザ定義の右辺の大括弧および当該大括弧に囲まれた文字列（ここでは、[class.Serviceクラス名]）を、変数生成ルールの右辺（ここでは、$[テーブルＩＤ]Service）で置換する。変数リスト生成部５１は、置換処理後の命名規則ユーザ定義の右辺（ここでは、$[テーブルＩＤ]ServiceLogic）を新たな変数生成ルールの右辺とする。
【０１５８】
これにより、変数リスト生成部５１は、新たな変数生成ルールとして「class.Serviceクラス名=$[テーブルＩＤ]ServiceLogic」を取得し、当該新たな変数生成ルールを変数リストＡに追加する。
【０１５９】
ここでは、図１１に示す変数生成ルールのうち、１行目（class.Actionクラス名=$[テーブルＩＤ]Action）および２行目（class.Serviceクラス名=$[テーブルＩＤ]Service）について主に説明したが、他の変数生成ルールについても同様の処理が実行される。
【０１６０】
なお、図１５は、図１２に示すステップＳ１１〜Ｓ１７の処理が実行されることによって生成された変数リストＡを示す。図１５に示す例では、変数リストＡには、新たな変数生成ルールとして、「class.Actionクラス名=$[テーブルＩＤ]Action」、「class.Serviceクラス名=$[テーブルＩＤ]ServiceLogic」、「class.Datasetクラス名=$[テーブルＩＤ]Dataset」、「attribute.自テーブルの属性名=$[カラムＩＤ]」、「attribute.親テーブルの属性名=$[テーブルＩＤ]_$[カラムＩＤ]」および「attribute.参照先テーブルの属性名=$[カラムＩＤ]_$[参照先カラムＩＤ]」が追加されている。
【０１６１】
次に、上述した図１３に示す変数リスト生成処理におけるステップＳ１８〜Ｓ２４の処理について具体的に説明する。
【０１６２】
この場合、変数リスト生成部５１は、変数リストＡから変数生成ルール（新たな変数生成ルール）を１つ取得する。ここでは、変数生成ルールとして、図１５の１行目（class.Actionクラス名=$[テーブルＩＤ]Action）が取得されたものとする。
【０１６３】
また、変数リスト生成部５１は、命名規則ユーザ定義を１つ取得する。ここでは、命名規則ユーザ定義として、図１０の１行目（class=Stv[this]）が取得されたものとする。
【０１６４】
この場合、変数リスト生成部５１は、取得された変数生成ルール「class.Actionクラス名=$[テーブルＩＤ]Action」の左辺のドットより前と取得された命名規則ユーザ定義「class=Stv[this]」の左辺とが一致するか否かを判定する。
【０１６５】
ここで、変数リスト生成部５１によって取得された変数生成ルールの左辺のドットより前はclassであり、変数リスト生成部５１によって取得された命名規則ユーザ定義の左辺はclassであるため、変数リスト生成部５１は、該当箇所（つまり、変数生成ルールの左辺のドットより前および命名規則ユーザ定義の左辺）が一致すると判定する。
【０１６６】
このように該当箇所が一致すると判定された場合、上述したように第２の文字列置換処理が実行される。
【０１６７】
第２の文字列置換処理においては、変数リスト生成部５１は、命名規則ユーザ定義「class=Stv[this]」の右辺の大括弧に囲まれた文字列がthisであるか否かを判定する。ここでは、命名規則ユーザ定義の右辺の大括弧に囲まれた文字列は、thisである。したがって、変数リスト生成部５１は、命名規則ユーザ定義の右辺の大括弧に囲まれた文字列がthisであると判定する。
【０１６８】
この場合、変数リスト生成部５１は、変数生成ルール「class.Actionクラス名=$[テーブルＩＤ]Action」の左辺を新たな変数生成ルールの左辺とする。
【０１６９】
また、変数リスト生成部５１は、命名規則ユーザ定義の右辺の大括弧および当該大括弧に囲まれた文字列（ここでは、[this]）を、変数生成ルールの右辺（ここでは、$[テーブルＩＤ]Action）で置換する。変数リスト生成部５１は、置換処理後の命名規則ユーザ定義の右辺（ここでは、Stv$[テーブルＩＤ]Action）を新たな変数生成ルールの右辺とする。
【０１７０】
これにより、変数リスト生成部５１は、新たな変数生成ルールとして「class.Actionクラス名=Stv$[テーブルＩＤ]Action」を取得し、当該新たな変数生成ルールを変数リストＢに追加する。
【０１７１】
なお、図１５に示す変数リストＡの「class.Serviceクラス名=$[テーブルＩＤ]ServiceLogic」および「class.Datasetクラス名=$[テーブルＩＤ]Dataset」についても、上記した「class.Actionクラス名=$[テーブルＩＤ]Action」と同様な処理が実行されることにより、「class.Serviceクラス名=Stv$[テーブルＩＤ]ServiceLogic」および「class.Datasetクラス名=Stv$[テーブルＩＤ]Dataset」が変数リストＢに追加される。
【０１７２】
上述したように命名規則ユーザ定義「class=Stv[this]」は、クラス名の先頭に“Stv”をつけるという命名規則である。このため、変数リストＡに追加された「class.Actionクラス名=$[テーブルＩＤ]Action」、「class.Serviceクラス名=$[テーブルＩＤ]ServiceLogic」および「class.Datasetクラス名=$[テーブルＩＤ]Dataset」に命名規則ユーザ定義「class=Stv[this]」が適用されると、「class.Actionクラス名=Stv$[テーブルＩＤ]Action」、「class.Serviceクラス名=Stv$[テーブルＩＤ]ServiceLogic」および「class.Datasetクラス名=Stv$[テーブルＩＤ]Dataset」となる。
【０１７３】
同様に、変数リスト生成部５１は、次の変数生成ルールを１つ取得する。ここでは、変数生成ルールとして、図１５の４行目（attribute.自テーブルの属性名=$[カラムＩＤ]）が取得されたものとする。
【０１７４】
また、変数リスト生成部５１は、命名規則ユーザ定義を１つ取得する。ここでは、命名規則ユーザ定義として、図１０の１行目（class=Stv[this]）が取得されたものとする。
【０１７５】
この場合、変数リスト生成部５１は、取得された変数生成ルール「attribute.自テーブルの属性名=$[カラムＩＤ]」の左辺のドットより前と取得された命名規則ユーザ定義「class=Stv[this]」の左辺とが一致するか否かを判定する。
【０１７６】
ここで、変数リスト生成部５１によって取得された変数生成ルールの左辺のドットより前はattributeであり、変数リスト生成部５１によって取得された命名規則ユーザ定義の左辺はclassであるため、変数リスト生成部５１は、該当箇所が一致しないと判定する。
【０１７７】
このように該当箇所が一致しないと判定された場合、上述したように他の命名規則ユーザ定義についても同様の処理が実行されるが、変数生成ルール「attribute.自テーブルの属性名=$[カラムＩＤ]」の左辺のドットより前は、図１０に示す全ての命名規則ユーザ定義の左辺と一致しない。このため、この変数生成ルール「attribute.自テーブルの属性名=$[カラムＩＤ]」は、そのまま新たな変数生成ルールとして変数リストＢに追加されることになる。
【０１７８】
なお、図１５に示す変数リストＡの「attribute.親テーブルの属性名=$[テーブルＩＤ]_$[カラムＩＤ]」および「attribute.参照先テーブルの属性名=$[カラムＩＤ]_$[参照先カラムＩＤ]」についても、上記した「attribute.自テーブルの属性名=$[カラムＩＤ]」と同様な処理が実行されることにより、「attribute.親テーブルの属性名=$[テーブルＩＤ]_$[カラムＩＤ]」および「attribute.参照先テーブルの属性名=$[カラムＩＤ]_$[参照先カラムＩＤ]」が変数リストＢに追加される。
【０１７９】
なお、図１６は、図１５に示す全ての変数生成ルールに対して前述した図１３に示すステップＳ１９〜Ｓ２３の処理が実行されることによって生成された変数リストＢを示す。図１６に示す例では、変数リストＢには、新たな変数生成ルールとして、上記したように「class.Actionクラス名=Stv$[テーブルＩＤ]Action」、「class.Serviceクラス名=Stv$[テーブルＩＤ]ServiceLogic」、「class.Datasetクラス名=Stv$[テーブルＩＤ]Dataset」、「attribute.自テーブルの属性名=$[カラムＩＤ]」、「attribute.親テーブルの属性名=$[テーブルＩＤ]_$[カラムＩＤ]」および「attribute.参照先テーブルの属性名=$[カラムＩＤ]_$[参照先カラムＩＤ]」が追加されている。
【０１８０】
このように変数リスト生成処理が実行されることによって生成された図１６に示すような変数リストＢは、変数リストとして用いられることができる。この場合、変数リストＢは、変数リストとして変数リスト格納部２４に格納される。
【０１８１】
なお、図１０に示す命名規則ユーザ定義の例では、図１４に示すステップＳ３１において右辺の大括弧に囲まれた文字列がthisでないと判定されるものはないが、例えば「class=Stv[class.Serviceクラス名]」のような命名規則ユーザ定義が定義されている場合には、当該右辺の大括弧に囲まれた文字列がthisでないと判定される。
【０１８２】
次に、本実施形態に係るプログラムテンプレート自動生成装置５０によって実行される命名規則検証処理について説明する。命名規則検証処理は、上述した変数リスト生成処理において用いられる命名規則ユーザ定義に問題があるか否かを検証するために実行される処理である。なお、命名規則検証処理は、命名規則ユーザ定義がユーザによって定義された後、命名規則検証部５２によって実行される。
【０１８３】
この命名規則検証処理は、第１〜第３の命名規則検証処理を含む。以下、この第１〜第３の命名規則検証処理の各々について説明する。
【０１８４】
まず、図１７のフローチャートを参照して、第１の命名規則検証処理の処理手順について説明する。第１の命名規則検証処理は、命名規則ユーザ定義において左辺に定義できないものが定義されていないかを検証するための処理である。なお、上述したように命名規則ユーザ定義の左辺に定義できるものは、変数生成ルールの左辺のドットより前または後ろと一致するものである。
【０１８５】
第１の命名規則検証処理においては、命名規則格納部２５に格納されている命名規則ユーザ定義の各々について以下のステップＳ４１〜Ｓ４６の処理が実行される。
【０１８６】
命名規則検証部５２は、命名規則格納部２５に格納されている命名規則ユーザ定義を１つ取得する（ステップＳ４１）。
【０１８７】
次に、命名規則検証部５２は、変数生成ルール格納部２６に格納されている変数生成ルールを１つ取得する（ステップＳ４２）。
【０１８８】
命名規則検証部５２は、ステップＳ４１において取得された命名規則ユーザ定義の左辺がステップＳ４２において取得された変数生成ルールの左辺のドットより後ろと一致するか否かを判定する（ステップＳ４３）。
【０１８９】
命名規則ユーザ定義の左辺が変数生成ルールの左辺のドットより後ろと一致しないと判定された場合（ステップＳ４３のＮＯ）、命名規則検証部５２は、ステップＳ４１において取得された命名規則ユーザ定義の左辺がステップＳ４２において取得された変数生成ルールの左辺のドットより前と一致するか否かを判定する（ステップＳ４４）。
【０１９０】
命名規則ユーザ定義の左辺が変数生成ルールの左辺のドットより前と一致しないと判定された場合（ステップＳ４４のＮＯ）、命名規則検証部５２は、変数生成ルール格納部２６に他の変数生成ルールがあるか否かを判定する（ステップＳ４５）。
【０１９１】
変数生成ルール格納部２６に他の変数生成ルールがあると判定された場合（ステップＳ４５のＹＥＳ）、上記したステップＳ４２に戻って処理が繰り返される。
【０１９２】
一方、変数生成ルール格納部２６に他の変数生成ルールがないと判定された場合（ステップＳ４５のＮＯ）、命名規則検証部５２は、検証結果としてエラーメッセージを検証結果格納部２７に出力する（ステップＳ４６）。このステップＳ４６において出力されるエラーメッセージは、命名規則ユーザ定義の左辺に定義できないものが定義されていることを警告するメッセージである。なお、このエラーメッセージは、例えばユーザに対して提示されることができる。
【０１９３】
ステップＳ４６の処理が実行されると、命名規則検証部５２は、命名規則格納部２５に他の命名規則ユーザ定義があるか否かを判定する（ステップＳ４７）。
【０１９４】
命名規則格納部２５に他の命名規則ユーザ定義があると判定された場合（ステップＳ４７のＹＥＳ）、上記したステップＳ４１に戻って処理が繰り返される。
【０１９５】
一方、命名規則格納部２５に他の命名規則ユーザ定義がないと判定された場合（ステップＳ４７のＮＯ）、第１の命名規則検証処理は終了される。
【０１９６】
上記したように第１の命名規則検証処理が実行されることによって、命名規則格納部２５に格納されている命名規則ユーザ定義の各々が当該命名規則ユーザ定義の左辺に定義できないものを定義している場合に、その旨を警告するエラーメッセージを出力することができる。
【０１９７】
次に、図１８のフローチャートを参照して、第２の命名規則検証処理の処理手順について説明する。第２の命名規則検証処理は、命名規則ユーザ定義においてクラス名が重複していないかを検証するための処理である。
【０１９８】
なお、命名規則ユーザ定義においてクラス名が重複している場合、当該命名規則ユーザ定義に基づいて生成されたプログラムテンプレートを用いて生成されたプログラムをコンパイルした際にエラーが発生してしまう。このため、第２の命名規則検証処理によってクラス名の重複が検証される。
【０１９９】
まず、命名規則検証部５２は、変数生成ルール格納部２６に格納されている変数生成ルールのうち、左辺のドットより前がclassである変数生成ルールを取得する（ステップＳ５１）。なお、左辺のドットより前がclassである変数生成ルールが変数生成ルール格納部２６内に複数存在する場合には、全ての変数生成ルールが取得される。
【０２００】
次に、命名規則検証部５２は、ステップＳ５１において取得された変数生成ルールの左辺のドットより後ろを左辺とする命名規則ユーザ定義（つまり、当該変数生成ルールの左辺のドットより後ろと左辺が一致する命名規則ユーザ定義）が命名規則格納部２５内にあるか否かを判定する（ステップＳ５２）。
【０２０１】
変数生成ルールの左辺のドットより後ろを左辺とする命名規則ユーザ定義が命名規則格納部２５内にあると判定された場合（ステップＳ５２のＹＥＳ）、命名規則検証部５２は、命名規則格納部２５から当該命名規則ユーザ定義を取得する（ステップＳ５３）。なお、ステップＳ５３においては、複数の命名規則ユーザ定義が取得されても構わない。
【０２０２】
次に、命名規則検証部５２は、ステップＳ５１において取得された変数生成ルールおよびステップＳ５３において取得された命名規則ユーザ定義を用いて、第３の文字列置換処理を実行する（ステップＳ５４）。この第３の文字列置換処理においては、ステップＳ５１において取得された変数生成ルールにステップＳ５３において取得された命名規則ユーザ定義を適用することによって当該命名規則ユーザ定義（または変数生成ルール）の文字列を置換し、当該置換結果を含む変数リストが生成される。この第３の文字列置換処理において生成される変数リストには、変数を左辺とし、当該変数に対して置換される値を右辺とする情報が保持される。なお、この第３の文字列置換処理の詳細については後述する。
【０２０３】
命名規則検証部５２は、第３の文字列置換処理において生成された変数リスト内において右辺が重複したものがあるか否かを判定する（ステップＳ５５）。
【０２０４】
変数リスト内において右辺が重複したものがあると判定された場合（ステップＳ５５のＹＥＳ）、命名規則検証部５２は、検証結果としてエラーメッセージを検証結果格納部２７に出力する（ステップＳ５６）。このステップＳ５６において出力されるエラーメッセージは、命名規則ユーザ定義においてクラス名が重複していることを警告するメッセージである。なお、このエラーメッセージは、例えばユーザに対して提示されることができる。
【０２０５】
一方、ステップＳ５２において変数生成ルールの左辺のドットより後ろを左辺とする命名規則ユーザ定義が命名規則格納部２５内にないと判定された場合および変数リスト内において右辺が重複したものがないと判定された場合、ステップＳ５６の処理は実行されず、第２の命名規則検証処理は終了される。
【０２０６】
ここで、図１９および図２０のフローチャートを参照して、上述した第３の文字列置換処理（図１８に示すステップＳ５４の処理）の処理手順について説明する。ここでは、図１８に示すステップＳ５１において取得された変数生成ルールを対象変数生成ルール、ステップＳ５３において取得された命名規則ユーザ定義を対象命名規則ユーザ定義と称する。
【０２０７】
第３の文字列置換処理においては、まず、対象命名規則ユーザ定義の各々について以下のステップＳ６１〜Ｓ６６の処理が実行される。
【０２０８】
命名規則検証部５２は、対象命名規則ユーザ定義のうちの１つを取得する（ステップＳ６１）。
【０２０９】
次に、命名規則検証部５２は、対象変数生成ルールのうちの１つを取得する（ステップＳ６２）。
【０２１０】
命名規則検証部５２は、ステップＳ６１において取得された対象命名規則ユーザ定義およびステップＳ６２において取得された対象変数生成ルールを比較することによって、該当箇所が一致するか否かを判定する（ステップＳ６３）。なお、ステップＳ６３における該当箇所とは、ステップＳ６１において取得された対象命名規則ユーザ定義の右辺の大括弧に囲まれた文字列およびステップＳ６２において取得された対象変数生成ルールの左辺を指す。つまり、ステップＳ６３においては、対象命名規則ユーザ定義の右辺の大括弧に囲まれた文字列と対象変数生成ルールの左辺とが一致するか否かが判定される。
【０２１１】
該当箇所が一致しない（つまり、対象命名規則ユーザ定義の右辺の大括弧に囲まれた文字列と対象変数生成ルールの左辺とが一致しない）と判定された場合（ステップＳ６３のＮＯ）、命名規則検証部５２は、他の対象変数生成ルールがあるか否かを判定する（ステップＳ６４）。
【０２１２】
他の対象変数生成ルールがあると判定された場合（ステップＳ６４のＹＥＳ）、上記したステップＳ６２に戻って処理が繰り返される。
【０２１３】
一方、他の対象変数生成ルールがないと判定された場合（ステップＳ６４のＮＯ）、後述するステップＳ６６の処理が実行される。
【０２１４】
また、上記したステップＳ６３において、該当箇所が一致する（つまり、対象命名規則ユーザ定義の右辺の大括弧に囲まれた文字列と対象変数生成ルールの左辺とが一致する）と判定された場合、命名規則検証部５２は、当該対象命名規則ユーザ定義の右辺の大括弧および当該大括弧に囲まれた文字列を当該対象変数生成ルールの右辺で置換する（ステップＳ６５）。
【０２１５】
命名規則検証部５２は、置換結果、つまり、右辺の大括弧および当該大括弧に囲まれた文字列が対象変数生成ルールの右辺で置換された対象命名規則ユーザ定義を、変数リストＣに追加する（ステップＳ６６）。
【０２１６】
なお、上記したようにステップＳ６４において他の対象変数生成ルールがないと判定された場合にはステップＳ６６の処理が実行されるが、この場合、ステップＳ６１において取得された対象命名規則ユーザ定義がそのまま変数リストＣに追加される。
【０２１７】
ステップＳ６６の処理が実行されると、命名規則検証部５２は、他の対象命名規則ユーザ定義があるか否かを判定する（ステップＳ６７）。
【０２１８】
他の対象命名規則ユーザ定義があると判定された場合（ステップＳ６７のＹＥＳ）、上記したステップＳ６１に戻って処理が繰り返される。
【０２１９】
一方、他の対象命名規則ユーザ定義がないと判定された場合（ステップＳ６７のＮＯ）、対象変数生成ルールの各々について以下のステップＳ６８〜Ｓ７３の処理が実行される。
【０２２０】
命名規則検証部５２は、対象変数生成ルールのうちの１つを取得する（ステップＳ６８）。
【０２２１】
次に、命名規則検証部５２は、上記した変数リストＣに追加された対象命名規則ユーザ定義を１つ取得する（ステップＳ６９）。
【０２２２】
命名規則検証部５２は、ステップＳ６８において取得された対象変数生成ルールおよびステップＳ６９において取得された対象命名規則ユーザ定義を比較することによって、該当箇所が一致するか否かを判定する（ステップＳ７０）。なお、ステップＳ７０における該当箇所とは、ステップＳ６８において取得された対象変数生成ルールの左辺のドットより後ろおよびステップＳ６９において取得された対象命名規則ユーザ定義の左辺を指す。つまり、ステップＳ７０においては、対象変数生成ルールの左辺のドットより後ろと対象命名規則ユーザ定義の左辺とが一致するか否かが判定される。
【０２２３】
該当箇所が一致しない（つまり、対象変数生成ルールの左辺のドットより後ろと対象命名規則ユーザ定義の左辺とが一致しない）と判定された場合（ステップＳ７０のＮＯ）、命名規則検証部５２は、他の対象命名規則ユーザ定義があるか否かを判定する（ステップＳ７１）。
【０２２４】
他の対象命名規則ユーザ定義があると判定された場合（ステップＳ７１のＹＥＳ）、上記したステップＳ６９の処理が実行される。
【０２２５】
一方、他の対象命名規則ユーザ定義がないと判定された場合（ステップＳ７１のＮＯ）、後述するステップＳ７３の処理が実行される。
【０２２６】
また、上記したステップＳ７０において、該当箇所が一致する（つまり、対象変数生成ルールの左辺のドットより後ろと対象命名規則ユーザ定義の左辺とが一致する）と判定された場合、命名規則検証部５２は、当該対象変数生成ルールの右辺を当該対象命名規則ユーザ定義の右辺で置換する（ステップＳ７２）。
【０２２７】
命名規則検証部５２は、置換結果、つまり、右辺が対象命名規則ユーザ定義の右辺で置換された対象変数生成ルールを、変数リストＤに追加する（ステップＳ７３）。
【０２２８】
なお、上記したようにステップＳ７１において他の対象命名規則ユーザ定義がないと判定された場合にはステップＳ７３の処理が実行されるが、この場合、ステップＳ６８において取得された対象変数生成ルールがそのまま変数リストＤに追加される。
【０２２９】
ステップＳ７３の処理が実行されると、命名規則検証部５２は、他の対象変数生成ルールがあるか否かを判定する（ステップＳ７４）。
【０２３０】
他の対象変数生成ルールがあると判定された場合（ステップＳ７４のＹＥＳ）、上記したステップＳ６８に戻って処理が繰り返される。
【０２３１】
一方、他の対象変数生成ルールがないと判定された場合（ステップＳ７４のＮＯ）、第３の文字列置換処理は終了される。
【０２３２】
なお、上述した図１８に示すステップＳ５４において生成される変数リストとは上記した変数リストＤであり、上述したステップＳ５５の処理は、当該変数リストＤを用いて実行される。
【０２３３】
ここで、上述した第２の命名規則検証処理について具体的に説明する。ここでは、変数生成ルール格納部２６には、前述した図１１に示す変数生成ルールが格納されているものとする。また、命名規則格納部２５には、図２１に示す命名規則ユーザ定義が格納されているものとする。
【０２３４】
まず、命名規則検証部５２は、変数生成ルール格納部２６に格納されている変数生成ルールのうち、左辺のドットより前がclassである変数生成ルールを取得する。ここでは、図１１に示す変数生成ルールのうち、図２２に示す変数生成ルール「class.Actionクラス名=$[テーブル名]Action」、「class.Serviceクラス名=$[テーブルＩＤ]Service」および「class.Datasetクラス名=$[テーブルＩＤ]DS」が取得される。
【０２３５】
次に、命名規則検証部５２は、取得された変数生成ルールの左辺のドットより後ろを左辺とする命名規則ユーザ定義が命名規則格納部２５内にあるか否かを判定する。図２１を参照すると、取得された変数生成ルール「class.Actionクラス名=$[テーブル名]Action」の左辺のドットより後ろ（つまり、「Actionクラス名」）を左辺とする命名規則ユーザ定義「Actionクラス名=[class.Actionクラス名]Service」および取得された変数生成ルール「class.Serviceクラス名=$[テーブルＩＤ]Service」の左辺のドットより後ろ（つまり、「Serviceクラス名」）を左辺とする命名規則ユーザ定義「Serviceクラス名=$[テーブルＩＤ]ActionService」が命名規則格納部２５内に存在する。
【０２３６】
この場合、命名規則検証部５２は、取得された変数生成ルールの左辺のドットより後ろを左辺とする命名規則ユーザ定義が命名規則格納部２５内にあると判定し、図２３に示す命名規則ユーザ定義「Actionクラス名=[class.Actionクラス名]Service」および「Serviceクラス名=$[テーブルＩＤ]ActionService」を取得する。
【０２３７】
次に、命名規則検証部５２は、図２２に示す変数生成ルール「class.Actionクラス名=$[テーブル名]Action」、「class.Serviceクラス名=$[テーブルＩＤ]Service」および「class.Datasetクラス名=$[テーブルＩＤ]DS」と図２３に示す命名規則ユーザ定義「Actionクラス名=[class.Actionクラス名]Service」および「Serviceクラス名=$[テーブルＩＤ]ActionService」とを用いて、第３の文字列置換処理を実行する。
【０２３８】
まず、上述した図１９に示す第３の文字列置換処理におけるステップＳ６１〜Ｓ６７の処理について具体的に説明する。
【０２３９】
この場合、命名規則検証部５２は、図２３に示す命名規則ユーザ定義のうちの１つを取得する。ここでは、図２３に示す命名規則ユーザ定義のうち、命名規則ユーザ定義「Actionクラス名=[class.Actionクラス名]Service」が取得されたものとする。
【０２４０】
また、命名規則検証部５２は、図２２に示す変数生成ルールのうちの１つを取得する。ここでは、図２２に示す変数生成ルールのうち、変数生成ルール「class.Actionクラス名=$[テーブルＩＤ]Action」が取得されたものとする。
【０２４１】
命名規則検証部５２は、取得された命名規則ユーザ定義「Actionクラス名=[class.Actionクラス名]Service」の右辺の大括弧に囲まれた文字列と取得された変数生成ルール「class.Actionクラス名=$[テーブルＩＤ]Action」の左辺とが一致するか否かを判定する。
【０２４２】
ここで、命名規則ユーザ定義「Actionクラス名=[class.Actionクラス名]Service」の右辺の大括弧に囲まれた文字列は「class.Actionクラス名」であり、変数生成ルール「class.Actionクラス名=$[テーブルＩＤ]Action」の左辺は「class.Actionクラス名」である。このため、命名規則検証部５２は、命名規則ユーザ定義の右辺の大括弧に囲まれた文字列と変数生成ルールの左辺とが一致すると判定する。
【０２４３】
この場合、命名規則検証部５２は、命名規則ユーザ定義「Actionクラス名=[class.Actionクラス名]Service」の右辺の大括弧および当該大括弧に囲まれた文字列（つまり、[class.Actionクラス名]）を、変数生成ルール「class.Actionクラス名=$[テーブルＩＤ]Action」の右辺（つまり、$[テーブルＩＤ]Action）で置換する。
【０２４４】
命名規則検証部５２は、置換後の命名規則ユーザ定義「Actionクラス名=$[テーブルＩＤ]ActionService」を変数リストＣに追加する。
【０２４５】
同様に、命名規則検証部５２は、図２３に示す命名規則ユーザ定義のうちの１つを取得する。ここでは、図２３に示す命名規則ユーザ定義のうち、命名規則ユーザ定義「Serviceクラス名=$[テーブルＩＤ]ActionService」が取得される。
【０２４６】
また、命名規則検証部５２は、図２２に示す変数生成ルールのうちの１つを取得する。ここでは、図２２に示す変数生成ルールのうち、変数生成ルール「class.Actionクラス名=$[テーブルＩＤ]Action」が取得されたものとする。
【０２４７】
命名規則検証部５２は、取得された命名規則ユーザ定義「Serviceクラス名=$[テーブルＩＤ]ActionService」の右辺の大括弧に囲まれた文字列と取得された変数生成ルール「class.Actionクラス名=$[テーブルＩＤ]Action」の左辺とが一致するか否かを判定する。
【０２４８】
ここで、命名規則ユーザ定義「Serviceクラス名=$[テーブルＩＤ]ActionService」の右辺の大括弧に囲まれた文字列は「テーブルＩＤ」であり、変数生成ルール「class.Actionクラス名=$[テーブルＩＤ]Action」の左辺は「class.Actionクラス名」である。このため、命名規則検証部５２は、命名規則検証部５２は、命名規則ユーザ定義の右辺の大括弧に囲まれた文字列と変数生成ルールの左辺とが一致しないと判定する。
【０２４９】
この場合、命名規則検証部５２は、命名規則ユーザ定義「Serviceクラス名=$[テーブルＩＤ]ActionService」を変数リストＣに追加する。
【０２５０】
上記したように図１９に示すステップＳ６１〜Ｓ６７の処理が実行された場合、変数リストＣには、図２４に示す命名規則ユーザ定義「Actionクラス名=$[テーブル名]ActionService」および「Serviceクラス名=$[テーブルＩＤ]ActionService」が追加される。
【０２５１】
次に、上述した図２０に示す第３の文字列置換処理におけるステップＳ６８〜Ｓ７４の処理について具体的に説明する。
【０２５２】
この場合、命名規則検証部５２は、上記した図２２に示す変数生成ルールのうちの１つを取得する。ここでは、図２２に示す変数生成ルールのうち、変数生成ルール「class.Actionクラス名=$[テーブルＩＤ]Action」が取得されたものとする。
【０２５３】
また、命名規則検証部５２は、上記した図２４に示す変数リストＣに追加された命名規則ユーザ定義のうちの１つを取得する。ここでは、図２４に示す変数リストＣに追加された命名規則ユーザ定義のうち、命名規則ユーザ定義「Actionクラス名=$[テーブルＩＤ]ActionService」が取得されたものとする。
【０２５４】
命名規則検証部５２は、取得された変数生成ルール「class.Actionクラス名=$[テーブルＩＤ]Action」の左辺のドットより後ろと取得された命名規則ユーザ定義「Actionクラス名=$[テーブルＩＤ]ActionService」の左辺とが一致するか否かを判定する。
【０２５５】
ここで、変数生成ルール「class.Actionクラス名=$[テーブルＩＤ]Action」の左辺のドットより後ろは「Actionクラス名」であり、命名規則ユーザ定義「Actionクラス名=$[テーブルＩＤ]ActionService」の左辺は「Actionクラス名」である。このため、命名規則検証部５２は、変数生成ルールの左辺のドットより後ろと命名規則ユーザ定義の左辺とが一致すると判定する。
【０２５６】
この場合、命名規則検証部５２は、変数生成ルール「class.Actionクラス名=$[テーブルＩＤ]Action」の右辺を命名規則ユーザ定義「Actionクラス名=$[テーブルＩＤ]ActionService」の右辺で置換する。
【０２５７】
命名規則検証部５２は、置換後の変数生成ルール「class.Actionクラス名=$[テーブルＩＤ]ActionService」を変数リストＤに追加する。
【０２５８】
同様に、命名規則検証部５２は、図２２に示す変数生成ルールのうちの１つを取得する。ここでは、図２２に示す変数生成ルールのうち、変数生成ルール「class.Serviceクラス名=$[テーブルＩＤ]Service」が取得されたものとする。
【０２５９】
また、命名規則検証部５２は、上記した図２４に示す変数リストＣに追加された命名規則ユーザ定義のうちの１つを取得する。ここでは、図２４に示す変数リストＣに追加された命名規則ユーザ定義のうち、命名規則ユーザ定義「Serviceクラス名=$[テーブルＩＤ]ActionService」が取得されたものとする。
【０２６０】
命名規則検証部５２は、取得された変数生成ルール「class.Serviceクラス名=$[テーブルＩＤ]Service」の左辺のドットより後ろと取得された命名規則ユーザ定義「Serviceクラス名=$[テーブルＩＤ]ActionService」の左辺とが一致するか否かを判定する。
【０２６１】
ここで、変数生成ルール「class.Serviceクラス名=$[テーブルＩＤ]Service」の左辺のドットより後ろは「Serviceクラス名」であり、命名規則ユーザ定義「Serviceクラス名=$[テーブルＩＤ]ActionService」の左辺は「Serviceクラス名」である。このため、命名規則検証部５２は、変数生成ルールの左辺のドットより後ろと命名規則ユーザ定義の左辺とが一致すると判定する。
【０２６２】
この場合、命名規則検証部５２は、変数生成ルール「class.Serviceクラス名=$[テーブルＩＤ]Service」の右辺を命名規則ユーザ定義「Serviceクラス名=$[テーブルＩＤ]ActionService」の右辺で置換する。
【０２６３】
命名規則検証部５２は、置換後の変数生成ルール変数生成ルール「class.Serviceクラス名=$[テーブルＩＤ]ActionService」を変数リストＤに追加する。
【０２６４】
なお、図２２に示す変数生成ルールのうちの変数生成ルール「class.Datasetクラス名=$[テーブルＩＤ]DS」についても同様の処理（図２０に示すステップＳ６８〜７３の処理）が実行される。この場合、詳しい説明は省略するが、変数生成ルール「class.Datasetクラス名=$[テーブルＩＤ]DS」の左辺のドットより後ろを左辺とする命名規則ユーザ定義は変数リストＣ内に存在しないため、当該変数生成ルール「class.Datasetクラス名=$[テーブルＩＤ]DS」が変数リストＤに追加される。
【０２６５】
上記したように図２０に示すステップＳ６８〜Ｓ７４の処理が実行された場合、変数リストＤには、図２５に示す変数生成ルール「class.Actionクラス名=$[テーブルＩＤ]ActionService」、「class.Serviceクラス名=$[テーブルＩＤ]ActionService」および「class.Datasetクラス名=$[テーブルＩＤ]DS」が追加される。
【０２６６】
第３の文字列置換処理が実行されることによって変数リストＤが生成されると、命名規則検証部５２は、当該変数リストＤ内において右辺が重複したものがあるか否かを判定する。
【０２６７】
ここで、図２５を参照すると、変数リストＤ内の「class.Actionクラス名=$[テーブルＩＤ]ActionService」および「class.Serviceクラス名=$[テーブルＩＤ]ActionService」は、右辺が一致している。
【０２６８】
この場合、命名規則検証部５２は、変数リストＤ内において右辺が重複したものがあると判定し、命名規則ユーザ定義においてクラス名が重複していることを警告するエラーメッセージを出力する。
【０２６９】
上記したように第２の命名規則検証処理が実行されることによって、命名規則ユーザ定義においてクラス名が重複している場合に、エラーメッセージを出力することができる。
【０２７０】
なお、本実施形態においては、第２の命名規則検証処理が命名規則ユーザ定義においてクラス名が重複していないかを検証するための処理であるものとして説明したが、第２の命名規則検証処理によって例えば命名規則ユーザ定義において属性名が重複していないかを検証することも可能である。この場合、図１８に示すステップＳ５１において左辺のドットより前がattributeである変数生成ルールを取得することによって、命名規則ユーザ定義において属性名が重複していないかを検証することができる。
【０２７１】
更に、第２の命名規則検証処理において、クラス名および属性名の一方のみでなく、両方が重複していないかを検証することも可能である。
【０２７２】
次に、図２６のフローチャートを参照して、第３の命名規則検証処理の処理手順について説明する。第３の命名規則検証処理は、命名規則ユーザ定義が循環していないかを検証するための処理である。命名規則ユーザ定義が循環している場合とは、当該命名規則ユーザ定義が自身の定義を利用している場合および例えば２つの命名規則ユーザ定義が互いに参照している場合等をいう。
【０２７３】
なお、このように命名規則ユーザ定義が循環している場合、適切に変数リストを生成することができない。このため、第３の命名規則検証処理によって命名規則ユーザ定義の循環が検証される。
【０２７４】
第３の命名規則検証処理においては、命名規則格納部２５に格納されている命名規則ユーザ定義の各々について以下のステップＳ８１〜Ｓ８６の処理が実行される。
【０２７５】
命名規則検証部５２は、命名規則格納部２５に格納されている命名規則ユーザ定義を１つ取得する（ステップＳ８１）。以下、ステップＳ８１において取得された命名規則ユーザ定義を、便宜的に第１の命名規則ユーザ定義と称する。
【０２７６】
次に、命名規則検証部５２は、第１の命名規則ユーザ定義の右辺の大括弧に囲まれた文字列がthisであるか否かを判定する（ステップＳ８２）。
【０２７７】
第１の命名規則ユーザ定義の右辺の大括弧に囲まれた文字列がthisでないと判定された場合（ステップＳ８２のＮＯ）、命名規則検証部５２は、対象の命名規則ユーザ定義が命名規則格納部２５内にあるか否かを判定する（ステップＳ８３）。なお、このステップＳ８３における対象の命名規則ユーザ定義は、ここでは、第１の命名規則ユーザ定義の右辺の大括弧に囲まれた文字列を左辺とする命名規則ユーザ定義（つまり、第１の命名規則ユーザ定義の右辺の大括弧に囲まれた文字列と左辺が一致する命名規則ユーザ定義）である。
【０２７８】
対象の命名規則ユーザ定義が命名規則格納部２５内にあると判定された場合（ステップＳ８３のＹＥＳ）、命名規則検証部５２は、命名規則格納部２５から当該対象の命名規則ユーザ定義（つまり、第１の命名規則ユーザ定義の右辺の大括弧に囲まれた文字列を左辺とする命名規則ユーザ定義）を取得する（ステップＳ８４）。以下、ステップＳ８４において取得された命名規則ユーザ定義を、便宜的に第２の命名規則ユーザ定義と称する。
【０２７９】
次に、命名規則検証部５２は、第２の命名規則ユーザ定義が第１の命名規則ユーザ定義（つまり、既に取得されていた命名規則ユーザ定義）と一致するか否かを判定する（ステップＳ８５）。
【０２８０】
第２の命名規則ユーザ定義が第１の命名規則ユーザ定義と一致すると判定された場合（ステップＳ８５のＹＥＳ）、命名規則検証部５２は、検証結果としてエラーメッセージを検証結果格納部２７に出力する（ステップＳ８６）。このステップＳ８６において出力されるエラーメッセージは、命名規則ユーザ定義が循環していることを警告するメッセージである。このエラーメッセージは、例えばユーザに対して提示されることができる。ステップＳ８６の処理が実行されると、第３の命名規則検証処理は終了される。
【０２８１】
一方、第２の命名規則ユーザ定義が第１の命名規則ユーザ定義と一致しないと判定された場合（ステップＳ８５のＮＯ）、ステップＳ８３に戻って処理が繰り返される。
【０２８２】
ここで、第２の命名規則ユーザ定義が第１の命名規則ユーザ定義と一致しないと判定され、ステップＳ８３に戻って処理が繰り返される場合における当該ステップＳ８３以降の処理について説明する。
【０２８３】
この場合、命名規則検証部５２は、上述した第１の命名規則ユーザ定義を第２の命名規則ユーザ定義としてステップＳ８３の処理を実行する。つまり、この場合のステップＳ８３における対象の命名規則ユーザ定義は、第２の命名規則ユーザ定義の右辺の大括弧に囲まれた文字列を左辺とする命名規則ユーザ定義となる。
【０２８４】
ここで、対象の命名規則ユーザ定義が命名規則格納部２５内にあると判定された場合（ステップＳ８３のＹＥＳ）、命名規則検証部５２は、命名規則格納部２５から当該対象の命名規則ユーザ定義（つまり、第２の命名規則ユーザ定義の右辺の大括弧に囲まれた文字列を左辺とする命名規則ユーザ定義）を取得する（ステップＳ８４）。
【０２８５】
このステップＳ８４において取得された命名規則ユーザ定義を便宜的に第３の命名規則ユーザ定義とすると、命名規則検証部５２は、当該第３の命名規則ユーザ定義が第１または第２の命名規則ユーザ定義と一致するか否かを判定する（ステップＳ８５）。
【０２８６】
このステップＳ８５において第３の命名規則ユーザ定義が第１または第２の命名規則ユーザ定義と一致すると判定された場合には、上述したステップＳ８６の処理が実行される。一方、第３の命名規則ユーザ定義が第１または第２の命名規則と一致しないと判定された場合には、再びステップＳ８３に戻って処理が繰り返される。この場合、命名規則検証部５２は、上述した第２の命名規則ユーザ定義を第３の命名規則ユーザ定義としてステップＳ８３の処理を実行する。以下、同様に処理が繰り返される。
【０２８７】
なお、ステップＳ８２において第１の命名規則ユーザ定義の右辺の大括弧に囲まれた文字列がthisであると判定された場合およびステップＳ８３において対象の命名規則ユーザ定義が命名規則格納部２５内にないと判定された場合、命名規則検証部５２は、命名規則格納部２５に他の命名規則ユーザ定義があるか否かを判定する（ステップＳ８７）。
【０２８８】
命名規則格納部２５に他の命名規則ユーザ定義があると判定された場合（ステップＳ８７のＹＥＳ）、上記したステップＳ８１に戻って処理が繰り返される。
【０２８９】
一方、命名規則格納部２５に他の命名規則ユーザ定義がないと判定された場合（ステップＳ８７のＮＯ）、第３の命名規則検証処理は終了される。
【０２９０】
以下、上述した第３の命名規則検証処理について具体的に説明する。ここでは、命名規則格納部２５には、図２７に示す命名規則ユーザ定義が格納されているものとする。
【０２９１】
ここで、図２７を参照して、命名規則ユーザ定義が循環している場合について具体的に説明する。
【０２９２】
まず、図２７の１行目の命名規則ユーザ定義（Actionクラス名=Stv[Actionクラス名]）について説明すると、１行目の命名規則ユーザ定義の右辺の大括弧に囲まれている「Actionクラス名」は、当該１行目の命名規則ユーザ定義の左辺と一致している。この図２７の１行目の命名規則ユーザ定義のように、命名規則ユーザ定義が自身の定義を利用しようとしている場合には循環していると判断される。
【０２９３】
次に、図２７の２行目の命名規則ユーザ定義（Serviceクラス名=Stv1[Datasetクラス名]）および３行目の命名規則ユーザ定義（Datasetクラス名=Stv2[Serviceクラス名]）について説明すると、２行目の命名規則ユーザ定義の右辺の大括弧に囲まれている「Datasetクラス名」は３行目の命名規則ユーザ定義の左辺「Datasetクラス名」と一致しており、かつ、３行目の命名規則ユーザ定義の右辺の大括弧に囲まれている「Serviceクラス名」は２行目の命名規則ユーザ定義の左辺「Serviceクラス名」と一致している。このような場合には、図２７の２行目の命名規則ユーザ定義および図２７の３行目の命名規則ユーザ定義は、参照が循環していると判断される。
【０２９４】
第３の命名規則検証処理においては、命名規則格納部２５に格納されている命名規則ユーザ定義の各々について処理が実行される。
【０２９５】
まず、図２７に示す命名規則ユーザ定義のうち、命名規則ユーザ定義「Actionクラス名=Stv[Actionクラス名]」について説明する。
【０２９６】
この場合、命名規則検証部５２は、命名規則ユーザ定義「Actionクラス名=Stv[Actionクラス名]」を取得する。なお、ここで取得された命名規則ユーザ定義を第１の命名規則ユーザ定義と称する。
【０２９７】
次に、命名規則検証部５２は、第１の命名規則ユーザ定義の右辺の大括弧に囲まれた文字列がthisであるか否かを判定する。ここでは、第１の命名規則ユーザ定義「Actionクラス名=Stv[Actionクラス名]」の右辺の大括弧に囲まれた文字列は「Actionクラス名」であるため、当該第１の命名規則ユーザ定義「Actionクラス名=Stv[Actionクラス名]」の右辺の大括弧に囲まれた文字列はthisでないと判定される。
【０２９８】
この場合、命名規則検証部５２は、第１の命名規則ユーザ定義の右辺の大括弧に囲まれた文字列を左辺とする命名規則ユーザ定義が命名規則格納部２５内にあるか否かを判定する。
【０２９９】
ここで、図２７に示す命名規則ユーザ定義の中には、第１の命名規則ユーザ定義「Actionクラス名=Stv[Actionクラス名]」の右辺の大括弧に囲まれた文字列「Actionクラス名」を左辺とする命名規則ユーザ定義「Actionクラス名=Stv[Actionクラス名]」が存在する。
【０３００】
この場合、命名規則検証部５２は、第１の命名規則ユーザ定義の右辺の大括弧に囲まれた文字列を左辺とする命名規則ユーザ定義が命名規則格納部２５内にあると判定し、命名規則格納部２５から命名規則ユーザ定義「Actionクラス名=Stv[Actionクラス名]」を取得する。なお、ここで取得された命名規則ユーザ定義を第２の命名規則ユーザ定義と称する。
【０３０１】
次に、命名規則検証部５２は、第２の命名規則ユーザ定義が第１の命名規則ユーザ定義と一致するか否かを判定する。
【０３０２】
ここでは、第２の命名規則ユーザ定義が「Actionクラス名=Stv[Actionクラス名]」であり、第１の命名規則ユーザ定義が「Actionクラス名=Stv[Actionクラス名]」であるため、第２の命名規則ユーザ定義が第１の命名規則ユーザ定義と一致すると判定される。
【０３０３】
この場合、命名規則検証部５２は、命名規則ユーザ定義が循環していることを警告するエラーメッセージを出力する。
【０３０４】
このように第３の命名規則検証処理によれば、図２７の１行目の命名規則ユーザ定義が循環していることを検出し、エラーメッセージを出力することができる。
【０３０５】
次に、図２７に示す命名規則ユーザ定義のうち、命名規則ユーザ定義「Serviceクラス名=Stv1[Datasetクラス名]」について説明する。
【０３０６】
この場合、命名規則検証部５２は、命名規則ユーザ定義「Serviceクラス名=Stv1[Datasetクラス名]」を取得する。なお、ここで取得された命名規則ユーザ定義を第１の命名規則ユーザ定義と称する。
【０３０７】
次に、命名規則検証部５２は、第１の命名規則ユーザ定義の右辺の大括弧に囲まれた文字列がthisであるか否かを判定する。ここでは、第１の命名規則ユーザ定義「Serviceクラス名=Stv1[Datasetクラス名]」の右辺の大括弧に囲まれた文字列は「Datasetクラス名」であるため、当該第１の命名規則ユーザ定義「Serviceクラス名=Stv1[Datasetクラス名]」の右辺の大括弧に囲まれた文字列はthisでないと判定される。
【０３０８】
この場合、命名規則検証部５２は、第１の命名規則ユーザ定義の右辺の大括弧に囲まれた文字列を左辺とする命名規則ユーザ定義が命名規則格納部２５内にあるか否かを判定する。
【０３０９】
ここで、図２７に示す命名規則ユーザ定義の中には、第１の命名規則ユーザ定義「Serviceクラス名=Stv1[Datasetクラス名]」の右辺の大括弧に囲まれた文字列「Datasetクラス名」を左辺とする命名規則ユーザ定義「Datasetクラス名=Stv2[Serviceクラス名]」が存在する。
【０３１０】
この場合、命名規則検証部５２は、第１の命名規則ユーザ定義の右辺の大括弧に囲まれた文字列を左辺とする命名規則ユーザ定義が命名規則格納部２５内にあると判定し、命名規則格納部２５から命名規則ユーザ定義「Datasetクラス名=Stv2[Serviceクラス名]」を取得する。なお、ここで取得された命名規則ユーザ定義を第２の命名規則ユーザ定義と称する。
【０３１１】
次に、命名規則検証部５２は、第２の命名規則ユーザ定義が第１の命名規則ユーザ定義と一致するか否かを判定する。
【０３１２】
ここでは、第２の命名規則ユーザ定義が「Datasetクラス名=Stv2[Serviceクラス名]」であり、第１の命名規則ユーザ定義が「Serviceクラス名=Stv1[Datasetクラス名]」であるため、第２の命名規則ユーザ定義が第１の命名規則ユーザ定義と一致しないと判定される。
【０３１３】
この場合、命令規則検証部５２は、第２の命名規則ユーザ定義の右辺の大括弧に囲まれた文字列を左辺とする命名規則ユーザ定義が命名規則格納部２５内にあるか否かを判定する。
【０３１４】
ここで、図２７に示す命名規則ユーザ定義の中には、第２の命名規則ユーザ定義「Datasetクラス名=Stv2[Serviceクラス名]」の右辺の大括弧に囲まれた文字列「Serviceクラス名」を左辺とする命名規則ユーザ定義「Serviceクラス名=Stv1[Datasetクラス名]」が存在する。
【０３１５】
この場合、命名規則検証部５２は、第２の命名規則ユーザ定義の右辺の大括弧に囲まれた文字列を左辺とする命名規則ユーザ定義が命名規則格納部２５内にあると判定し、命名規則格納部２５から命名規則ユーザ定義「Serviceクラス名=Stv1[Datasetクラス名]」を取得する。なお、ここで取得された命名規則ユーザ定義を第３の命名規則ユーザ定義と称する。
【０３１６】
次に、命名規則検証部５２は、第３の命名規則ユーザ定義が第１の命名規則ユーザ定義または第２の命名規則ユーザ定義と一致するか否かを判定する。
【０３１７】
ここでは、第３の命名規則ユーザ定義が「Serviceクラス名=Stv1[Datasetクラス名]」であり、第１の命名規則ユーザ定義が「Serviceクラス名=Stv1[Datasetクラス名]」であり、第２の命名規則ユーザ定義が「Datasetクラス名=Stv2[Serviceクラス名]」であるため、当該第３の命名規則ユーザ定義が当該第１の命名規則ユーザ定義と一致する。したがって、第３の命名規則ユーザ定義が第１の命名規則ユーザ定義または第２の命名規則ユーザ定義と一致すると判定される。
【０３１８】
この場合、命名規則検証部５２は、命名規則ユーザ定義が循環していることを警告するエラーメッセージを出力する。
【０３１９】
このように第３の命名規則検証処理によれば、図２７の２行目および３行目の命名規則ユーザ定義が循環していることを検出し、エラーメッセージを出力することができる。
【０３２０】
ここでは、図２７の１行目の命名規則ユーザ定義（Actionクラス名=Stv[Actionクラス名]）および２行目の命名規則ユーザ定義（Serviceクラス名=Stv1[Datasetクラス名]）について主に述べたが、図２７の３行目の命名規則ユーザ定義（Datasetクラス名=Stv2[Serviceクラス名]）について処理が実行された場合にも同様にエラーメッセージが出力される。
【０３２１】
上記したように第３の命名規則検証処理が実行されることによって、命名規則ユーザ定義が循環している場合に、エラーメッセージを出力することができる。
【０３２２】
なお、本実施形態においては、第１〜第３の命名規則検証処理においてエラーメッセージが出力されるものとして説明したが、命名規則ユーザ定義が予め定められている形式（つまり、問題のない形式）で定義されている場合には、その旨のメッセージが出力される構成であってもよい。
【０３２３】
上記したように本実施形態においては、命名規則格納部２５に格納されている命名規則を変数生成ルール格納部２６に格納されている変数生成ルールに含まれる値に適用することによって変数に対応づけて置換情報を保持する変数リストを生成し、当該生成された変数リストを変数リスト格納部２４に格納する構成により、変数リストをユーザが設定する手間を省くことができ、かつ、例えばプロジェクト等で決まっている命名規則の反映を容易に行うことが可能となる。
【０３２４】
また、本実施形態においては、命名規則格納部２５に格納されている命名規則ユーザ定義が予め定められている形式で定義されているかを検証し、当該検証結果（例えば、エラーメッセージ）を出力する構成により、問題のある形式で定義された命名規則ユーザ定義を用いて変数リストが生成されることを防止することができる。
【０３２５】
なお、本願発明は、上記各実施形態そのままに限定されるものではなく、実施段階ではその要旨を逸脱しない範囲で構成要素を変形して具体化できる。また、上記各実施形態に開示されている複数の構成要素の適宜な組合せにより種々の発明を形成できる。例えば、各実施形態に示される全構成要素から幾つかの構成要素を削除してもよい。更に、異なる実施形態に亘る構成要素を適宜組合せてもよい。  
【符号の説明】
【０３２６】
１０…コンピュータ、２０…外部記憶装置、２２…テンプレート格納部、２３…テーブル定義格納部、２４…変数リスト格納部、２５…命名規則格納部、２６…変数生成ルール格納部、２７…検証結果格納部、３０，５０…プログラムテンプレート自動生成装置、３１…プログラム自動生成部、５１…変数リスト生成部、５２…命名規則検証部。
【図１】
2013148953.tif 000003
【図２】
2013148953.tif 000004
【図３】
2013148953.tif 000005
【図４】
2013148953.tif 000006
【図５】
2013148953.tif 000007
【図６】
2013148953.tif 000008
【図７】
2013148953.tif 000009
【図８】
2013148953.tif 000010
【図９】
2013148953.tif 000011
【図１０】
2013148953.tif 000012
【図１１】
2013148953.tif 000013
【図１２】
2013148953.tif 000014
【図１３】
2013148953.tif 000015
【図１４】
2013148953.tif 000016
【図１５】
2013148953.tif 000017
【図１６】
2013148953.tif 000018
【図１７】
2013148953.tif 000019
【図１８】
2013148953.tif 000020
【図１９】
2013148953.tif 000021
【図２０】
2013148953.tif 000022
【図２１】
2013148953.tif 000023
【図２２】
2013148953.tif 000024
【図２３】
2013148953.tif 000025
【図２４】
2013148953.tif 000026
【図２５】
2013148953.tif 000027
【図２６】
2013148953.tif 000028
【図２７】
2013148953.tif 000029