(57)【特許請求の範囲】
【請求項１】
オブジェクト指向プログラミングにおけるクラスのコードのテンプレートを記憶装置により記憶するテンプレート記憶部と、
前記テンプレート記憶部に記憶されたテンプレートから、特定のクラスのコードである第１コードを処理装置により生成するコード生成部と、
前記コード生成部により生成された第１コードに対する変更の入力を入力装置により受け付ける変更入力部と、
前記変更入力部に入力された変更の内容を示す第１変更情報を処理装置により作成する変更情報作成部と、
前記テンプレート記憶部に記憶されたテンプレートを処理装置により更新し、更新したテンプレートから、前記特定のクラスのコードである第２コードを前記コード生成部に生成させるテンプレート更新部と、
前記コード生成部により生成された第１コードと第２コードとの差異を処理装置により検出する差異検出部と、
前記変更情報作成部により作成された第１変更情報に対し前記差異検出部により検出された第１コードと第２コードとの差異を反映した第２変更情報を処理装置により作成する変更情報更新部と、
前記変更情報更新部により作成された第２変更情報に基づいて、前記コード生成部により生成された第２コードに対し前記変更入力部に入力された変更を反映したコードである第３コードを処理装置により生成するコード更新部と
を備えることを特徴とするコード生成装置。
【請求項２】
前記コード生成装置は、さらに、
データベースを構成する複数のテーブルのそれぞれについて、テーブルの構成を示すデータベース定義を記憶装置により記憶するデータベース定義記憶部
を備え、
前記コード生成部は、前記テンプレート記憶部に記憶されたテンプレートと前記データベース定義記憶部に記憶された特定のテーブルのデータベース定義とから、前記第１コードとして、前記特定のテーブルに対応するクラスのコードを生成し、
前記テンプレート更新部は、前記データベース定義記憶部に記憶された前記特定のテーブルのデータベース定義を処理装置により更新し、更新したテンプレートとデータベース定義とから、前記第２コードを前記コード生成部に生成させることを特徴とする請求項１のコード生成装置。
【請求項３】
前記変更入力部は、前記コード生成部により生成された第１コードに対し入力された変更を反映したコードである第４コードを処理装置により生成し、
前記差異検出部は、前記コード生成部により生成された第１コードと前記変更入力部により生成された第４コードとの差異を処理装置により検出し、
前記変更情報作成部は、前記第１変更情報として、前記差異検出部により検出された第１コードと第４コードとの差異を示す情報を作成することを特徴とする請求項１又は２のコード生成装置。
【請求項４】
オブジェクト指向プログラミングにおけるクラスのコードのテンプレートを記憶装置により記憶するコンピュータを用いて、特定のクラスのコードを生成するコード生成方法であって、
前記コンピュータが、前記テンプレートから、前記特定のクラスのコードである第１コードを処理装置により生成し、
前記コンピュータが、生成した第１コードに対する変更の入力を入力装置により受け付け、
前記コンピュータが、前記変更の内容を示す第１変更情報を処理装置により作成し、
前記コンピュータが、前記テンプレートを処理装置により更新し、更新したテンプレートから、前記特定のクラスのコードである第２コードを生成し、
前記コンピュータが、前記第１コードと前記第２コードとの差異を処理装置により検出し、
前記コンピュータが、前記第１変更情報に対し前記第１コードと前記第２コードとの差異を反映した第２変更情報を処理装置により作成し、
前記コンピュータが、前記第２変更情報に基づいて、前記第２コードに対し前記変更を反映したコードである第３コードを生成することを特徴とするコード生成方法。
【請求項５】
オブジェクト指向プログラミングにおけるクラスのコードのテンプレートを記憶装置により記憶するコンピュータを、
前記テンプレートから、特定のクラスのコードである第１コードを処理装置により生成するコード生成部と、
前記コード生成部により生成された第１コードに対する変更の入力を入力装置により受け付ける変更入力部と、
前記変更入力部に入力された変更の内容を示す第１変更情報を処理装置により作成する変更情報作成部と、
前記テンプレートを処理装置により更新し、更新したテンプレートから、前記特定のクラスのコードである第２コードを前記コード生成部に生成させるテンプレート更新部と、
前記コード生成部により生成された第１コードと第２コードとの差異を処理装置により検出する差異検出部と、
前記変更情報作成部により作成された第１変更情報に対し前記差異検出部により検出された第１コードと第２コードとの差異を反映した第２変更情報を処理装置により作成する変更情報更新部と、
前記変更情報更新部により作成された第２変更情報に基づいて、前記コード生成部により生成された第２コードに対し前記変更入力部に入力された変更を反映したコードである第３コードを生成するコード更新部
として機能させるためのプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、コード生成装置及びコード生成方法及びプログラムに関するものである。本発明は、特に、コード自動生成方式に関するものである。
【背景技術】
【０００２】
テンプレートとデータベース定義からコードを自動生成するコード自動生成ツールがある。開発時には、仕様変更が度々発生するため、データベース定義やテンプレート等を変更することもあり、その度にコードの再生成を行う。一方、テンプレートは汎用的に作成されているため、自動生成されたコードに対して、開発者が修正を行うことがある。このとき、コードを開発者が修正した後にコードの再生成を行うと、開発者の修正箇所が上書きされてしまう。そのため、コードの再生成後に再度開発者が修正を行う必要があり、自動生成による効率化の妨げとなっていた。
【０００３】
特許文献１では、設計情報に基づいてプログラムを自動生成し、設計情報の変更内容に基づいてプログラムの変更箇所を検索し、開発者により修正されたプログラムに変更箇所を追加又は削除する方式が開示されている。また、特許文献１では、元の設計情報と最新の設計情報とに基づいてプログラムの変更箇所を検索し、開発者により修正されたプログラムに変更箇所を追加又は削除する方式が開示されている。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２０００−２２２１９５号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
従来技術では、テンプレートの変更に対応できないという課題があった。
【０００６】
本発明は、例えば、更新前のテンプレートから生成したコードが開発者等により変更された後、更新前のテンプレートと更新後のテンプレートとを直接比較することなく、開発者等による変更の内容を維持したコードを更新後のテンプレートから生成することを目的とする。
【課題を解決するための手段】
【０００７】
本発明の一の態様に係るコード生成装置は、
オブジェクト指向プログラミングにおけるクラスのコードのテンプレートを記憶装置により記憶するテンプレート記憶部と、
前記テンプレート記憶部に記憶されたテンプレートから、特定のクラスのコードである第１コードを処理装置により生成するコード生成部と、
前記コード生成部により生成された第１コードに対する変更の入力を入力装置により受け付ける変更入力部と、
前記変更入力部に入力された変更の内容を示す第１変更情報を処理装置により作成する変更情報作成部と、
前記テンプレート記憶部に記憶されたテンプレートを処理装置により更新し、更新したテンプレートから、前記特定のクラスのコードである第２コードを前記コード生成部に生成させるテンプレート更新部と、
前記コード生成部により生成された第１コードと第２コードとの差異を処理装置により検出する差異検出部と、
前記変更情報作成部により作成された第１変更情報に対し前記差異検出部により検出された第１コードと第２コードとの差異を反映した第２変更情報を処理装置により作成する変更情報更新部と、
前記変更情報更新部により作成された第２変更情報に基づいて、前記コード生成部により生成された第２コードに対し前記変更入力部に入力された変更を反映したコードである第３コードを処理装置により生成するコード更新部とを備える。
【発明の効果】
【０００８】
本発明の一の態様において、コード生成装置は、テンプレートから生成した第１コードが開発者等により変更されると、開発者等による変更の内容を示す第１変更情報を作成する。コード生成装置は、テンプレートが更新されると、第１コードと更新後のテンプレートから生成した第２コードとの差異を検出し、第１変更情報に対し第１コードと第２コードとの差異を反映した第２変更情報を作成する。そして、コード生成装置は、第２変更情報に基づいて、第２コードに対し開発者等による変更を反映した第３コードを生成する。このため、本発明の一の態様によれば、コード生成装置は、更新前のテンプレートと更新後のテンプレートとを直接比較することなく、開発者等による変更の内容を維持したコードを更新後のテンプレートから生成することができる。
【図面の簡単な説明】
【０００９】
【図１】実施の形態１に係るコード生成装置の構成を示すブロック図。
【図２】実施の形態１に係るコード生成装置のハードウェア構成の一例を示す図。
【図３】実施の形態１に係るコード生成装置の動作の一例を示すフローチャート。
【図４】実施の形態１に係る旧テンプレート（ｖｅｒ．１）の一例を示す図。
【図５】実施の形態１に係る旧データベース定義（ｖｅｒ．Ａ）の一例を示す図。
【図６】実施の形態１に係るテンプレート変数を説明する表。
【図７】実施の形態１に係るテンプレート変数を説明する表。
【図８】実施の形態１に係る旧テンプレート（ｖｅｒ．１）のテンプレート変数へ具体値を割り当てた例を示す図。
【図９】実施の形態１に係る旧コード（ｖｅｒ．１Ａ）の一例を示す図。
【図１０】実施の形態１に係るアノテーションを説明する表。
【図１１】実施の形態１に係る修正済旧コード（ｖｅｒ．１Ａα）の一例を示す図。
【図１２】実施の形態１に係る旧コード（ｖｅｒ．１Ａ）の解析結果を示す図。
【図１３】実施の形態１に係る修正済旧コード（ｖｅｒ．１Ａα）の解析結果を示す図。
【図１４】実施の形態１に係る修正情報（ｖｅｒ．１Ａ−１Ａα）の一例を示す図。
【図１５】実施の形態１に係る新テンプレート（ｖｅｒ．２）の一例を示す図。
【図１６】実施の形態１に係る新データベース定義（ｖｅｒ．Ｂ）の一例を示す図。
【図１７】実施の形態１に係る一時旧コード（ｖｅｒ．１Ｂ）の一例を示す図。
【図１８】実施の形態１に係る一時新コード（ｖｅｒ．２Ｂ）の一例を示す図。
【図１９】実施の形態１に係る一時旧コード（ｖｅｒ．１Ｂ）の解析結果を示す図。
【図２０】実施の形態１に係る一時新コード（ｖｅｒ．２Ｂ）の解析結果を示す図。
【図２１】実施の形態１に係る補正済修正情報（ｖｅｒ．１Ａ−２Ｂα）の一例を示す図。
【図２２】実施の形態１に係る修正済新コード（ｖｅｒ．２Ｂα）の一例を示す図。
【発明を実施するための形態】
【００１０】
以下、本発明の実施の形態について、図を用いて説明する。
【００１１】
実施の形態１．
図１は、本実施の形態に係るコード生成装置１０の構成を示すブロック図である。
【００１２】
図１において、コード生成装置１０は、テンプレート記憶部１１、データベース定義記憶部１２、コード生成部１３、変更入力部１４、差異検出部１５、変更情報作成部１６、テンプレート更新部１７、変更情報更新部１８、コード更新部１９を備える。
【００１３】
また、図示していないが、コード生成装置１０は、処理装置、記憶装置、入力装置、出力装置等のハードウェアを備える。ハードウェアはコード生成装置１０の各部によって利用される。例えば、処理装置は、コード生成装置１０の各部でデータや情報の演算、加工、読み取り、書き込み等を行うために利用される。記憶装置は、そのデータや情報を記憶するために利用される。また、入力装置は、そのデータや情報を入力するために、出力装置は、そのデータや情報を出力するために利用される。
【００１４】
テンプレート記憶部１１は、オブジェクト指向プログラミングにおけるクラスのコードのテンプレートを記憶装置により記憶する。具体的には、テンプレート記憶部１１は、あるデータベースを構成する複数のテーブルのそれぞれに対応するクラスのコードのテンプレートとして、予め旧テンプレート２１（ｖｅｒ．１）を記憶する。後述するように、その後、テンプレート記憶部１１は、旧テンプレート２１（ｖｅｒ．１）が更新された新テンプレート２２（ｖｅｒ．２）を記憶する。このとき、旧テンプレート２１（ｖｅｒ．１）が新テンプレート２２（ｖｅｒ．２）で上書きされてもよいし、旧テンプレート２１（ｖｅｒ．１）と新テンプレート２２（ｖｅｒ．２）とが別々に保存されてもよい。
【００１５】
データベース定義記憶部１２は、前述したデータベースを構成する複数のテーブルのそれぞれについて、テーブルの構成を示すデータベース定義を記憶装置により記憶する。具体的には、データベース定義記憶部１２は、特定のテーブルの構成を示すデータベース定義として、予め旧データベース定義３１（ｖｅｒ．Ａ）を記憶する。後述するように、その後、データベース定義記憶部１２は、旧データベース定義３１（ｖｅｒ．Ａ）が更新された新データベース定義３２（ｖｅｒ．Ｂ）を記憶する。このとき、旧データベース定義３１（ｖｅｒ．Ａ）が新データベース定義３２（ｖｅｒ．Ｂ）で上書きされてもよいし、旧データベース定義３１（ｖｅｒ．Ａ）と新データベース定義３２（ｖｅｒ．Ｂ）とが別々に保存されてもよい。
【００１６】
コード生成部１３は、テンプレート記憶部１１に記憶されたテンプレートとデータベース定義記憶部１２に記憶されたデータベース定義とから、前述した特定のテーブルに対応するクラスのコードを処理装置により生成する。具体的には、まず、コード生成部１３は、旧テンプレート２１（ｖｅｒ．１）と旧データベース定義３１（ｖｅｒ．Ａ）とから、旧コード５１（ｖｅｒ．１Ａ）（第１コードの一例）を生成する。後述するように、その後、コード生成部１３は、旧テンプレート２１（ｖｅｒ．１）と新データベース定義３２（ｖｅｒ．Ｂ）とから、一時旧コード５３（ｖｅｒ．１Ｂ）を生成する。また、コード生成部１３は、新テンプレート２２（ｖｅｒ．２）と新データベース定義３２（ｖｅｒ．Ｂ）とから、一時新コード５４（ｖｅｒ．２Ｂ）（第２コードの一例）を生成する。
【００１７】
変更入力部１４は、コード生成部１３により生成されたコードに対する変更の入力を入力装置により受け付け、当該コードに対し入力された変更を反映したコードを処理装置により生成する。具体的には、変更入力部１４は、旧コード５１（ｖｅｒ．１Ａ）に対する変更の入力を開発者等から受け付け、この変更を反映した修正済旧コード５２（ｖｅｒ．１Ａα）（第４コードの一例）を生成する。
【００１８】
差異検出部１５は、コード生成部１３により生成されたコードと変更入力部１４により生成されたコードとの差異や、コード生成部１３により生成された２つのコードの差異を処理装置により検出する。具体的には、差異検出部１５は、旧コード５１（ｖｅｒ．１Ａ）と修正済旧コード５２（ｖｅｒ．１Ａα）との差異を検出する。また、差異検出部１５は、旧コード５１（ｖｅｒ．１Ａ）と一時新コード５４（ｖｅｒ．２Ｂ）との差異を検出する。あるいは、差異検出部１５は、一時旧コード５３（ｖｅｒ．１Ｂ）と一時新コード５４（ｖｅｒ．２Ｂ）との差異を検出する。差異検出部１５は、旧コード５１（ｖｅｒ．１Ａ）と一時旧コード５３（ｖｅｒ．１Ｂ）との差異を検出してもよい。
【００１９】
変更情報作成部１６は、変更入力部１４に入力された変更の内容を示す修正情報を処理装置により作成する。具体的には、変更情報作成部１６は、差異検出部１５により検出された旧コード５１（ｖｅｒ．１Ａ）と修正済旧コード５２（ｖｅｒ．１Ａα）との差異を示す修正情報４１（ｖｅｒ．１Ａ−１Ａα）（第１変更情報の一例）を作成する。なお、コードを開発するエディタがある場合、変更入力部１４が、エディタで旧コード５１（ｖｅｒ．１Ａ）が編集（変更）された履歴をコード変更箇所として記憶装置により保持し、変更情報作成部１６が、このコード変更箇所を参照して修正情報４１（ｖｅｒ．１Ａ−１Ａα）を生成してもよい。この場合、変更入力部１４が修正済旧コード５２（ｖｅｒ．１Ａα）を生成する処理は不要となる。
【００２０】
テンプレート更新部１７は、テンプレート記憶部１１に記憶されたテンプレートとデータベース定義記憶部１２に記憶されたデータベース定義とのうち、少なくともいずれかを処理装置により更新する。そして、テンプレート更新部１７は、テンプレート記憶部１１に記憶されたテンプレート（更新されていれば、更新後のテンプレート）とデータベース定義記憶部１２に記憶されたデータベース定義（更新されていれば、更新後のデータベース定義）とから、前述した特定のテーブルに対応するクラスのコードをコード生成部１３に生成（再生成）させる。具体的には、テンプレート更新部１７は、旧データベース定義３１（ｖｅｒ．Ａ）を新データベース定義３２（ｖｅｒ．Ｂ）に更新し、旧テンプレート２１（ｖｅｒ．１）と新データベース定義３２（ｖｅｒ．Ｂ）とから、一時旧コード５３（ｖｅｒ．１Ｂ）をコード生成部１３に生成させる。また、テンプレート更新部１７は、旧テンプレート２１（ｖｅｒ．１）を新テンプレート２２（ｖｅｒ．２）に更新し、新テンプレート２２（ｖｅｒ．２）と新データベース定義３２（ｖｅｒ．Ｂ）とから、一時新コード５４（ｖｅｒ．２Ｂ）をコード生成部１３に生成させる。なお、テンプレート更新部１７は、新テンプレート２２（ｖｅｒ．２）と旧データベース定義３１（ｖｅｒ．Ａ）とから、図示していない一時コード（ｖｅｒ．２Ａ）をコード生成部１３に生成させてもよい。この場合、差異検出部１５は、旧コード５１（ｖｅｒ．１Ａ）と、この一時コード（ｖｅｒ．２Ａ）との差異を検出してもよい。
【００２１】
変更情報更新部１８は、変更情報作成部１６により作成された修正情報に対し差異検出部１５により検出された差異を反映した修正情報を処理装置により作成する。具体的には、変更情報更新部１８は、修正情報４１（ｖｅｒ．１Ａ−１Ａα）に対し旧コード５１（ｖｅｒ．１Ａ）と一時新コード５４（ｖｅｒ．２Ｂ）との差異を反映した補正済修正情報４２（ｖｅｒ．１Ａ−２Ｂα）（第２変更情報の一例）を作成する。このとき、変更情報更新部１８は、例えば旧コード５１（ｖｅｒ．１Ａ）と一時新コード５４（ｖｅｒ．２Ｂ）との差異に合わせて修正情報４１（ｖｅｒ．１Ａ−１Ａα）を補正することにより、補正済修正情報４２（ｖｅｒ．１Ａ−２Ｂα）を作成する。あるいは、変更情報更新部１８は、例えば旧コード５１（ｖｅｒ．１Ａ）と一時旧コード５３（ｖｅｒ．１Ｂ）との差異に合わせて修正情報４１（ｖｅｒ．１Ａ−１Ａα）を補正した後、さらに、一時旧コード５３（ｖｅｒ．１Ｂ）と一時新コード５４（ｖｅｒ．２Ｂ）との差異に合わせた補正をすることにより（補正の順序は逆でもよい）、補正済修正情報４２（ｖｅｒ．１Ａ−２Ｂα）を作成する。あるいは、変更情報更新部１８は、例えば一時旧コード５３（ｖｅｒ．１Ｂ）と一時新コード５４（ｖｅｒ．２Ｂ）との差異に合わせて修正情報４１（ｖｅｒ．１Ａ−１Ａα）を補正した後、さらに、旧データベース定義３１（ｖｅｒ．Ａ）と新データベース定義３２（ｖｅｒ．Ｂ）との差異を分析し、その分析結果に合わせた補正をすることにより（補正の順序は逆でもよい）、補正済修正情報４２（ｖｅｒ．１Ａ−２Ｂα）を作成する。あるいは、変更情報更新部１８は、例えば旧コード５１（ｖｅｒ．１Ａ）と、前述した一時コード（ｖｅｒ．２Ａ）との差異に合わせて修正情報４１（ｖｅｒ．１Ａ−１Ａα）を補正した後、さらに、旧データベース定義３１（ｖｅｒ．Ａ）と新データベース定義３２（ｖｅｒ．Ｂ）との差異を分析し、その分析結果に合わせた補正をすることにより（補正の順序は逆でもよい）、補正済修正情報４２（ｖｅｒ．１Ａ−２Ｂα）を作成する。
【００２２】
コード更新部１９は、変更情報更新部１８により作成された修正情報に基づいて、コード生成部１３により更新後のテンプレートと更新後のデータベース定義とから生成されたコードに対し変更入力部１４に入力された変更を反映したコードを処理装置により生成する。具体的には、コード更新部１９は、補正済修正情報４２（ｖｅｒ．１Ａ−２Ｂα）に基づいて、一時新コード５４（ｖｅｒ．２Ｂ）に対し変更入力部１４に入力された変更を反映した修正済新コード５５（ｖｅｒ．２Ｂα）（第３コードの一例）を生成する。このとき、コード更新部１９は、例えば旧コード５１（ｖｅｒ．１Ａ）に補正済修正情報４２（ｖｅｒ．１Ａ−２Ｂα）を適用することにより、修正済新コード５５（ｖｅｒ．２Ｂα）を生成する。あるいは、コード更新部１９は、補正済修正情報４２（ｖｅｒ．１Ａ−２Ｂα）と旧テンプレート２１（ｖｅｒ．１）と新データベース定義３２（ｖｅｒ．Ｂ）とから、修正済新コード５５（ｖｅｒ．２Ｂα）を新たに生成する。
【００２３】
なお、本実施の形態では、コード生成装置１０が、複数のテーブルのそれぞれに対応するクラスのコードを自動生成するが、他の種類のクラスのコードを自動生成してもよい。この場合、テンプレート記憶部１１は、当該種類のクラスのコードを生成するためのテンプレートを記憶する。コード生成部１３は、テンプレート記憶部１１に記憶されたテンプレートから、特定のクラスのコードを処理装置により生成する。データベース定義記憶部１２は不要となる。
【００２４】
図２は、コード生成装置１０のハードウェア構成の一例を示す図である。
【００２５】
図２において、コード生成装置１０は、コンピュータであり、ＬＣＤ７１（Ｌｉｑｕｉｄ・Ｃｒｙｓｔａｌ・Ｄｉｓｐｌａｙ）、キーボード７２（Ｋ／Ｂ）、マウス７３、ＦＤＤ７４（Ｆｌｅｘｉｂｌｅ・Ｄｉｓｋ・Ｄｒｉｖｅ）、ＣＤＤ７５（Ｃｏｍｐａｃｔ・Ｄｉｓｃ・Ｄｒｉｖｅ）、プリンタ７６といったハードウェアデバイスを備えている。これらのハードウェアデバイスはケーブルや信号線で接続されている。ＬＣＤ７１の代わりに、ＣＲＴ（Ｃａｔｈｏｄｅ・Ｒａｙ・Ｔｕｂｅ）、あるいは、その他の表示装置が用いられてもよい。マウス７３の代わりに、タッチパネル、タッチパッド、トラックボール、ペンタブレット、あるいは、その他のポインティングデバイスが用いられてもよい。
【００２６】
コード生成装置１０は、プログラムを実行するＣＰＵ８１（Ｃｅｎｔｒａｌ・Ｐｒｏｃｅｓｓｉｎｇ・Ｕｎｉｔ）を備えている。ＣＰＵ８１は、処理装置の一例である。ＣＰＵ８１は、バス８２を介してＲＯＭ８３（Ｒｅａｄ・Ｏｎｌｙ・Ｍｅｍｏｒｙ）、ＲＡＭ８４（Ｒａｎｄｏｍ・Ａｃｃｅｓｓ・Ｍｅｍｏｒｙ）、通信ボード８５、ＬＣＤ７１、キーボード７２、マウス７３、ＦＤＤ７４、ＣＤＤ７５、プリンタ７６、ＨＤＤ９０（Ｈａｒｄ・Ｄｉｓｋ・Ｄｒｉｖｅ）と接続され、これらのハードウェアデバイスを制御する。ＨＤＤ９０の代わりに、フラッシュメモリ、光ディスク装置、メモリカードリーダライタ、あるいは、その他の記録媒体が用いられてもよい。
【００２７】
ＲＡＭ８４は、揮発性メモリの一例である。ＲＯＭ８３、ＦＤＤ７４、ＣＤＤ７５、ＨＤＤ９０は、不揮発性メモリの一例である。これらは、記憶装置の一例である。通信ボード８５、キーボード７２、マウス７３、ＦＤＤ７４、ＣＤＤ７５は、入力装置の一例である。また、通信ボード８５、ＬＣＤ７１、プリンタ７６は、出力装置の一例である。
【００２８】
通信ボード８５は、ＬＡＮ（Ｌｏｃａｌ・Ａｒｅａ・Ｎｅｔｗｏｒｋ）等に接続されている。通信ボード８５は、ＬＡＮに限らず、ＩＰ−ＶＰＮ（Ｉｎｔｅｒｎｅｔ・Ｐｒｏｔｏｃｏｌ・Ｖｉｒｔｕａｌ・Ｐｒｉｖａｔｅ・Ｎｅｔｗｏｒｋ）、広域ＬＡＮ、ＡＴＭ（Ａｓｙｎｃｈｒｏｎｏｕｓ・Ｔｒａｎｓｆｅｒ・Ｍｏｄｅ）ネットワークといったＷＡＮ（Ｗｉｄｅ・Ａｒｅａ・Ｎｅｔｗｏｒｋ）、あるいは、インターネットに接続されていても構わない。ＬＡＮ、ＷＡＮ、インターネットは、ネットワークの一例である。
【００２９】
ＨＤＤ９０には、オペレーティングシステム９１（ＯＳ）、ウィンドウシステム９２、プログラム群９３、ファイル群９４が記憶されている。プログラム群９３のプログラムは、ＣＰＵ８１、オペレーティングシステム９１、ウィンドウシステム９２により実行される。プログラム群９３には、本実施の形態の説明において「〜部」として説明する機能を実行するプログラムが含まれている。プログラムは、ＣＰＵ８１により読み出され実行される。ファイル群９４には、本実施の形態の説明において、「〜データ」、「〜情報」、「〜ＩＤ（識別子）」、「〜フラグ」、「〜結果」として説明するデータや情報や信号値や変数値やパラメータが、「〜ファイル」や「〜データベース」や「〜テーブル」の各項目として含まれている。「〜ファイル」や「〜データベース」や「〜テーブル」は、ＲＡＭ８４やＨＤＤ９０等の記録媒体に記憶される。ＲＡＭ８４やＨＤＤ９０等の記録媒体に記憶されたデータや情報や信号値や変数値やパラメータは、読み書き回路を介してＣＰＵ８１によりメインメモリやキャッシュメモリに読み出され、抽出、検索、参照、比較、演算、計算、制御、出力、印刷、表示といったＣＰＵ８１の処理（動作）に用いられる。抽出、検索、参照、比較、演算、計算、制御、出力、印刷、表示といったＣＰＵ８１の処理中、データや情報や信号値や変数値やパラメータは、メインメモリやキャッシュメモリやバッファメモリに一時的に記憶される。
【００３０】
本実施の形態の説明において用いるブロック図やフローチャートの矢印の部分は主としてデータや信号の入出力を示す。データや信号は、ＲＡＭ８４等のメモリ、ＦＤＤ７４のフレキシブルディスク（ＦＤ）、ＣＤＤ７５のコンパクトディスク（ＣＤ）、ＨＤＤ９０の磁気ディスク、光ディスク、ＤＶＤ（Ｄｉｇｉｔａｌ・Ｖｅｒｓａｔｉｌｅ・Ｄｉｓｃ）、あるいは、その他の記録媒体に記録される。また、データや信号は、バス８２、信号線、ケーブル、あるいは、その他の伝送媒体により伝送される。
【００３１】
本実施の形態の説明において「〜部」として説明するものは、「〜回路」、「〜装置」、「〜機器」であってもよく、また、「〜ステップ」、「〜工程」、「〜手順」、「〜処理」であってもよい。即ち、「〜部」として説明するものは、ＲＯＭ８３に記憶されたファームウェアで実現されていても構わない。あるいは、「〜部」として説明するものは、ソフトウェアのみ、あるいは、素子、デバイス、基板、配線といったハードウェアのみで実現されていても構わない。あるいは、「〜部」として説明するものは、ソフトウェアとハードウェアとの組み合わせ、あるいは、ソフトウェアとハードウェアとファームウェアとの組み合わせで実現されていても構わない。ファームウェアとソフトウェアは、プログラムとして、フレキシブルディスク、コンパクトディスク、磁気ディスク、光ディスク、ＤＶＤ等の記録媒体に記憶される。プログラムはＣＰＵ８１により読み出され、ＣＰＵ８１により実行される。即ち、プログラムは、本実施の形態の説明で述べる「〜部」としてコンピュータを機能させるものである。あるいは、プログラムは、本実施の形態の説明で述べる「〜部」の手順や方法をコンピュータに実行させるものである。
【００３２】
図３は、コード生成装置１０の動作（本実施の形態に係るコード生成方法、本実施の形態に係るプログラムの処理手順）の一例を示すフローチャートである。
【００３３】
前述したように、コード生成装置１０が旧テンプレート２１（ｖｅｒ．１）、旧データベース定義３１（ｖｅｒ．Ａ）から旧コード５１（ｖｅｒ．１Ａ）を生成した後に、開発者が旧コード５１（ｖｅｒ．１Ａ）を変更し、修正済旧コード５２（ｖｅｒ．１Ａα）を作成する。その後、旧テンプレート２１（ｖｅｒ．１）が新テンプレート２２（ｖｅｒ．２）に、旧データベース定義３１（ｖｅｒ．Ａ）が新データベース定義３２（ｖｅｒ．Ｂ）に変更される。図３は、このときにコード生成装置１０が修正済新コード５５（ｖｅｒ．２Ｂα）を生成する動作（コードを再生成する動作）を示している。
【００３４】
ここでは、テンプレート記憶部１１が、図４に示す旧テンプレート２１（ｖｅｒ．１）を記憶装置により記憶するものとする。また、データベース定義記憶部１２が、図５に示す旧データベース定義３１（ｖｅｒ．Ａ）を記憶装置により記憶するものとする。
【００３５】
テンプレートは、図４のように、テーブル定義によって動的に変化する部分（「＄」から始まるテンプレート変数）と、静的な部分から構成される。データベース定義は、図５のようなテーブル定義や制約である。テンプレート変数にはテーブル定義の情報が割り当てられ、コードが生成される。図４のテンプレートで使用されている変数の説明を図６及び図７に示す。また、図５のＯＲＤＥＲテーブルのテーブル定義から、図４のテンプレートを利用してコードを生成する際にテンプレート変数へ値が割り当てられる様子を図８に示す。このように旧テンプレート２１（ｖｅｒ．１）のテンプレート変数へ割り当てられる値は、予め入力装置を介して入力され、記憶装置に記憶される。
【００３６】
コード生成部１３は、旧テンプレート２１（ｖｅｒ．１）のテンプレート変数へ割り当てられる値を記憶装置から読み出す。そして、コード生成部１３は、読み出した値と旧テンプレート２１（ｖｅｒ．１）と旧データベース定義３１（ｖｅｒ．Ａ）とから、図９に示す旧コード５１（ｖｅｒ．１Ａ）を処理装置により生成する。
【００３７】
コードは、図９のようなテーブルのレコードを格納するためのコードである。図９のコードは、図４のテンプレートと、図５のＯＲＤＥＲテーブルの定義から生成されたものである。コードには、ステートメントとアノテーションが含まれる。ステートメントには、クラス宣言やメンバ変数宣言がある。クラス宣言とメンバ変数宣言には、それぞれアノテーションが付与される。２つのステートメントの間に記述されたアノテーションは、当該２つのステートメントのうち下側のステートメントを修飾する。即ち、アノテーションは、そのすぐ下のステートメントを修飾する。図９のコードで使用されているアノテーションの説明を図１０に示す。図１０のように、各アノテーションはプロパティを持ち、各プロパティにはアノテーションの状態を示す属性値とテーブル定義に対応する識別値がある。テーブル定義に対応する識別値により、アノテーションはクラス名で一意に識別される。例えば、＠Ｃｏｌｕｍｎ（ｎａｍｅ＝“Ｏ＿ＩＤ”）は、Ｏｒｄｅｒクラスには２つ存在しない。ｎａｍｅ属性はカラム名を表しており、同じカラム名は同一テーブルに存在しないというデータベースの制約に基づくからである。＠ＭａｎｙＴｏＯｎｅアノテーションも、ｔａｒｇｅｔＥｎｔｉｔｙ、ｎａｍｅ、ｒｅｆｅｒｅｎｃｅｄＣｏｌｕｍｎＮａｍｅプロパティにより一意に決定する。これも＠ＭａｎｙＴｏＯｎｅアノテーションが対応する外部キー制約の規則に基づくからである。このように、識別値となるプロパティからアノテーションが特定でき、アノテーションが特定されるとそれが付与されるクラス宣言、メンバ変数宣言も特定される。
【００３８】
変更入力部１４は、旧コード５１（ｖｅｒ．１Ａ）に対する変更の入力を開発者から入力装置により受け付け、図１１に示す修正済旧コード５２（ｖｅｒ．１Ａα）を処理装置により生成する。
【００３９】
図１１のコードでは、「ｏ＿ｉ＿ｎｕｍ」が「ｏ＿ｉ＿ｎｕｍｂｅｒ」に修正され、「ＦｅｔｃｈＴｙｐｅ．ＥＡＧＥＲ」が「ＦｅｔｃｈＴｙｐｅ．ＬＡＺＹ」に修正されている。
【００４０】
図３のステップＳ１１（コード変更箇所抽出処理）において、差異検出部１５は、旧コード５１（ｖｅｒ．１Ａ）と修正済旧コード５２（ｖｅｒ．１Ａα）との差異を処理装置により検出する。
【００４１】
このとき、差異検出部１５は、２つのコードの変更箇所を抽出する。具体的には、差異検出部１５は、コードからクラス宣言とメンバ変数宣言、それに付与されるアノテーションとそのプロパティを抽出し、図１２及び図１３に示す解析結果を生成する。図１２は、旧コード５１（ｖｅｒ．１Ａ）を解析した結果を示している。カテゴリは、クラス宣言やメンバ変数宣言といった構文の種類である。図１２では、クラス宣言は「ＣＬＡＳＳ」、メンバ変数宣言は「ＭＥＭＢＥＲ」である。識別子は、クラス名、メンバ変数名である。アノテーション名、アノテーションに含まれるプロパティ、その値も抽出される。図１２で、識別値にマークされているプロパティが識別値カラムである。図１３は、修正済旧コード５２（ｖｅｒ．１Ａα）を解析した結果を示している。差異検出部１５は、旧コード５１（ｖｅｒ．１Ａ）、修正済旧コード５２（ｖｅｒ．１Ａα）を解析し、図１２及び図１３の解析結果を生成し、アノテーションの識別値に基づいて各アノテーションの解析結果を照合し、コードの変更点、アノテーションの属性値の変更点を抽出する。図１２及び図１３の場合では、＠Ｃｏｌｕｍｎアノテーションの識別値「Ｏ＿Ｉ＿ＮＵＭ」が付与されるメンバ変数名「ｏ＿ｉ＿ｎｕｍ」が「ｏ＿ｉ＿ｎｕｍｂｅｒ」に変更されたこと、＠ＭａｎｙＴｏＯｎｅアノテーションの属性値「ｆｅｔｃｈ」が「ＦｅｔｃｈＴｙｐｅ．ＥＡＧＥＲ」から「ＦｅｔｃｈＴｙｐｅ．ＬＡＺＹ」に変更されたことを抽出する。
【００４２】
変更情報作成部１６は、差異検出部１５により検出された旧コード５１（ｖｅｒ．１Ａ）と修正済旧コード５２（ｖｅｒ．１Ａα）との差異から、図１４に示す修正情報４１（ｖｅｒ．１Ａ−１Ａα）を処理装置により作成する。
【００４３】
修正情報は、図１４のように、コードのどの部分が変更されたかを表す情報である。図１４の修正情報４１（ｖｅｒ．１Ａ−１Ａα）は、図１２と図１３の解析結果から旧コード５１（ｖｅｒ．１Ａ）と修正済旧コード５２（ｖｅｒ．１Ａα）の変更箇所を表したものである。この修正情報４１（ｖｅｒ．１Ａ−１Ａα）と、旧テンプレート２１（ｖｅｒ．１）、旧データベース定義３１（ｖｅｒ．Ａ）が与えられると、コード更新部１９は、修正済旧コード５２（ｖｅｒ．１Ａα）を自動生成することができる。
【００４４】
図３のステップＳ１２（比較用コード生成処理）において、テンプレート更新部１７は、旧テンプレート２１（ｖｅｒ．１）を、図１５に示す新テンプレート２２（ｖｅｒ．２）に、旧データベース定義３１（ｖｅｒ．Ａ）を、図１６に示す新データベース定義３２（ｖｅｒ．Ｂ）に処理装置により更新する。そして、テンプレート更新部１７は、旧テンプレート２１（ｖｅｒ．１）と新データベース定義３２（ｖｅｒ．Ｂ）とから、図１７に示す一時旧コード５３（ｖｅｒ．１Ｂ）をコード生成部１３に生成させる。また、テンプレート更新部１７は、新テンプレート２２（ｖｅｒ．２）と新データベース定義３２（ｖｅｒ．Ｂ）とから、図１８に示す一時新コード５４（ｖｅｒ．２Ｂ）をコード生成部１３に生成させる。
【００４５】
図３のステップＳ１３（テンプレート変更箇所抽出処理）において、差異検出部１５は、一時旧コード５３（ｖｅｒ．１Ｂ）と一時新コード５４（ｖｅｒ．２Ｂ）との差異を処理装置により検出する。
【００４６】
このとき、差異検出部１５は、一時旧コード５３（ｖｅｒ．１Ｂ）を解析し、図１９に示す解析結果を作成する。また、差異検出部１５は、一時新コード５４（ｖｅｒ．２Ｂ）を解析し、図２０に示す解析結果を作成する。そして、差異検出部１５は、解析結果を照合し、メンバ変数名「ｉｔｅｍ」が「ｉｔｅｍ  Ｆｒｏｍ  ＯｓＩＩｄＡｎｄＩＩｄ」に変更されていることをテンプレート変更箇所として抽出する。
【００４７】
図３のステップＳ１４（データベース定義変更箇所抽出処理）において、変更情報更新部１８は、旧データベース定義３１（ｖｅｒ．Ａ）と新データベース定義３２（ｖｅｒ．Ｂ）との差異を処理装置により分析する。
【００４８】
このとき、変更情報更新部１８は、旧データベース定義３１（ｖｅｒ．Ａ）、新データベース定義３２（ｖｅｒ．Ｂ）から、図１６のようにテーブル名が「ＯＲＤＥＲ」から「ＯＲＤＥＲＳ」へ変更されていることをデータベース定義変更箇所として抽出する。
【００４９】
図３のステップＳ１５（修正情報補正処理）において、変更情報更新部１８は、差異検出部１５により検出された一時旧コード５３（ｖｅｒ．１Ｂ）と一時新コード５４（ｖｅｒ．２Ｂ）との差異、及び、旧データベース定義３１（ｖｅｒ．Ａ）と新データベース定義３２（ｖｅｒ．Ｂ）との差異を分析した結果から、修正情報４１（ｖｅｒ．１Ａ−１Ａα）を補正して、図２１に示す補正済修正情報４２（ｖｅｒ．１Ａ−２Ｂα）を処理装置により作成する。
【００５０】
このとき、変更情報更新部１８は、修正情報４１（ｖｅｒ．１Ａ−１Ａα）に対して、まずテンプレート変更箇所を反映し、「ｉｔｅｍ」を「ｉｔｅｍＦｒｏｍＯｓＩＩｄＡｎｄＩＩｄ」に補正し、次にデータベース定義変更箇所を反映し、「Ｏｒｄｅｒ」を「Ｏｒｄｅｒｓ」に補正する。これにより、変更情報更新部１８は、「Ｏｒｄｅｒｓ」クラスの「ｉｔｅｍＦｒｏｍＯｓＩＩｄＡｎｄＩＩｄ」に付与しているアノテーションを修正するための補正済修正情報４２（ｖｅｒ．１Ａ−２Ｂα）を作成することができる。
【００５１】
図３のステップＳ１６（コード生成処理）において、コード更新部１９は、補正済修正情報４２（ｖｅｒ．１Ａ−２Ｂα）と旧テンプレート２１（ｖｅｒ．１）と新データベース定義３２（ｖｅｒ．Ｂ）とから、図２２に示す修正済新コード５５（ｖｅｒ．２Ｂα）を処理装置により新たに生成する。
【００５２】
上記のように、本実施の形態によれば、テンプレートとデータベース定義が変更された場合でも、開発者等による修正を保持したコードの再生成が可能となる。このとき、コード生成装置１０は、更新前のテンプレートと更新後のテンプレートとを直接比較することなく、開発者等による変更の内容を維持したコードを更新後のテンプレートから生成することができる。
【００５３】
なお、コード生成装置１０は、コードの生成時にコードをメモリ上に生成することで、処理を高速化してもよい。
【００５４】
以上説明したように、本実施の形態に係るコード生成装置１０は、データベース定義、テンプレートからコードを自動生成する装置である。
【００５５】
コードは以下の特長を持つ。
・コードは、テーブルごとに作成され、テーブルのレコードを格納する。
・コードは、クラス宣言、メンバ変数宣言にアノテーションが付与されている。
・アノテーションは、複数の値を持つ。例えば、アノテーションの動作を決定する値（属性値）や、データベース定義に対応し、アノテーションを一意に決定する値（識別値）である。
・アノテーションが特定されると、クラス宣言、メンバ変数宣言も特定可能である。
【００５６】
コード生成装置１０は以下の特長を持つ。
・新／旧コードからクラス名／メンバ変数名と、それらに付与されているアノテーションの対応表を作成する。
・アノテーションの識別値に基づき、クラス名、メンバ変数名、アノテーションの属性値の変更箇所を抽出する。
・旧テンプレートと旧データベース定義から自動生成された旧コード、旧コードを開発者が修正した修正済旧コードがあり、旧コードと修正済旧コードから修正情報を抽出する。・新データベース定義と旧データベース定義からデータベース定義変更箇所を抽出する。
・新データベース定義を用いて、新テンプレートと旧テンプレートから、それぞれ一時コードを生成し、テンプレート変更箇所を抽出する。
・修正情報をデータベース定義変更箇所とテンプレート変更箇所により補正し、修正情報（補正済）とする。
・新データベース定義、新テンプレート、修正情報（補正済）から修正済の新コードを生成する。
【００５７】
このように、本実施の形態では、コード生成装置１０が、設計情報に基づき、変更前と変更後のテンプレートからコードを生成し、アノテーションの同一性等に基づき、両者を比較し、テンプレートの変更箇所を抽出する。テンプレートの変更からコードの修正情報を補正可能とする。これにより、開発者等が修正を行った後のコードの再生成において、設計情報やテンプレートの変更があっても修正内容を保持したまま、再生成が可能である。
【００５８】
以上、本発明の実施の形態について説明したが、本発明は、この実施の形態に限定されるものではなく、必要に応じて種々の変更が可能である。
【符号の説明】
【００５９】
１０  コード生成装置、１１  テンプレート記憶部、１２  データベース定義記憶部、１３  コード生成部、１４  変更入力部、１５  差異検出部、１６  変更情報作成部、１７  テンプレート更新部、１８  変更情報更新部、１９  コード更新部、２１  旧テンプレート、２２  新テンプレート、３１  旧データベース定義、３２  新データベース定義、４１  修正情報、４２  補正済修正情報、５１  旧コード、５２  修正済旧コード、５３  一時旧コード、５４  一時新コード、５５  修正済新コード、７１  ＬＣＤ、７２  キーボード、７３  マウス、７４  ＦＤＤ、７５  ＣＤＤ、７６  プリンタ、８１  ＣＰＵ、８２  バス、８３  ＲＯＭ、８４  ＲＡＭ、８５  通信ボード、９０  ＨＤＤ、９１  オペレーティングシステム、９２  ウィンドウシステム、９３  プログラム群、９４  ファイル群。
【図１】
0005808264.tif 000002
【図２】
0005808264.tif 000003
【図３】
0005808264.tif 000004
【図４】
0005808264.tif 000005
【図５】
0005808264.tif 000006
【図６】
0005808264.tif 000007
【図７】
0005808264.tif 000008
【図８】
0005808264.tif 000009
【図９】
0005808264.tif 000010
【図１０】
0005808264.tif 000011
【図１１】
0005808264.tif 000012
【図１２】
0005808264.tif 000013
【図１３】
0005808264.tif 000014
【図１４】
0005808264.tif 000015
【図１５】
0005808264.tif 000016
【図１６】
0005808264.tif 000017
【図１７】
0005808264.tif 000018
【図１８】
0005808264.tif 000019
【図１９】
0005808264.tif 000020
【図２０】
0005808264.tif 000021
【図２１】
0005808264.tif 000022
【図２２】
0005808264.tif 000023