(57)【特許請求の範囲】
【請求項１】
ジョブを構成する演算処理が記述された設計情報を取得する設計情報取得部と、
設計情報に記述された演算処理の実装部分の記述箇所を含むソースコードであるロジックソースコードが、前記設計情報取得部が取得した前記設計情報を修正する前の設計情報から生成されているか否かを判断するロジックソースコード確認部と、
前記ロジックソースコード確認部においてロジックソースコードが生成されていないと判断された場合に、前記設計情報取得部が取得した前記設計情報に基づいてロジックソースコードを生成するロジックソースコード生成部と、
前記ロジックソースコードに記述される演算処理の実装部分を利用して前記演算処理を実行するためのソースコードである参照ソースコードを、前記設計情報取得部が取得した前記設計情報に基づいて生成する参照ソースコード生成部と、
を備えるソースコード自動生成装置。
【請求項２】
前記設計情報は、前記ジョブにおける前記演算処理の流れの記述をさらに含み、
前記設計情報に記述された前記演算処理の流れに従って前記ジョブを実行するためのソースコードである分離対象外ソースコードを、前記設計情報取得部が取得した前記設計情報に基づいて生成する分離対象外ソースコード生成部をさらに備える、
請求項１に記載のソースコード自動生成装置。
【請求項３】
前記設計情報取得部が取得した前記設計情報から前記演算処理に関する記述を抽出した分離対象設計情報を生成する処理と、前記設計情報から前記ジョブにおける前記演算処理の流れに関する記述を抽出した分離対象外設計情報を生成する処理とを実行する設計情報振分部をさらに備え、
前記ロジックソースコード生成部は、前記ロジックソースコード確認部においてロジックソースコードが生成済みではないと判断された場合に、前記設計情報振分部が生成した前記分離対象設計情報に基づいて前記ロジックソースコードを生成し、
前記参照ソースコード生成部は、前記設計情報振分部が生成した前記分離対象設計情報に基づいて前記参照ソースコードを生成し、
前記分離対象外ソースコード生成部は、前記設計情報振分部が生成した前記分離対象外設計情報から前記分離対象外ソースコードを生成する、
請求項２に記載のソースコード自動生成装置。
【請求項４】
前記ロジックソースコードと前記参照ソースコードとは、オブジェクト指向における継承関係を有し、
前記参照ソースコードは、前記ロジックソースコードを継承する請求項１から請求項３のいずれか１項に記載のソースコード自動生成装置。
【請求項５】
コンピュータに、
ジョブを構成する演算処理が記述された設計情報を取得する設計情報取得ステップと、
設計情報に記述された演算処理の実装部分の記述箇所を含むソースコードであるロジックソースコードが、前記設計情報取得ステップにおいて取得した前記設計情報を修正する前の設計情報から生成されているか否かを判断する確認ステップと、
前記確認ステップにおいてロジックソースコードが生成されていないと判断された場合に、前記設計情報取得ステップにおいて取得した前記設計情報に基づいてロジックソースコードを生成するロジックソースコード生成ステップと、
前記ロジックソースコードに記述される演算処理の実装部分を利用して前記演算処理を実行するためのソースコードである参照ソースコードを、前記設計情報取得ステップにおいて取得した前記設計情報に基づいて生成する参照ソースコード生成ステップと、
を実行させるプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明の実施形態は、ソースコード自動生成装置、及びプログラムに関する。
【背景技術】
【０００２】
ユーザがＧＵＩ（グラフィック・ユーザ・インタフェース）等を用いて定義したアプリケーションの設計情報からソースコードを自動生成する技術がある。この技術によりプログラムの開発を効率的に行うことができるものの、全てのソースコードを生成できない場合がある。例えば、詳細なビジネスロジックの処理を設計情報に表現することは難しい。そこで、ユーザが、設計情報から自動生成されたソースコードに対して、詳細なビジネスロジック等の処理の追加や変更などの編集を行う。
【０００３】
ソースコードの編集後、設計情報の間違いが判明したときや仕様変更が行われたときには設計情報が見直され、見直された設計情報から再びソースコードが自動生成される。この新たに自動生成されたソースコードに、前回自動生成されたソースコードに対して行った編集内容を反映したい場合があった。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２００３−２７１３８２号公報
【特許文献２】特開平１０−２１０６６号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
本発明が解決しようとする課題は、設計情報から生成されたソースコードに対する編集の内容を、編集後の設計情報から生成されたソースコードに引き継いで利用することができるソースコード自動生成装置、及びプログラムを提供することである。
【課題を解決するための手段】
【０００６】
実施形態のソースコード自動生成装置は、設計情報取得部と、ロジックソースコード確認部と、ロジックソースコード生成部と、参照ソースコード生成部とを持つ。設計情報取得部は、ジョブを構成する演算処理が記述された設計情報を取得する。ロジックソースコード確認部は、設計情報に記述された演算処理の実装部分の記述箇所を含むソースコードであるロジックソースコードが、設計情報取得部が取得した設計情報を修正する前の設計情報から生成されているか否かを判断する。ロジックソースコード生成部は、ロジックソースコード確認部においてロジックソースコードが生成されていないと判断された場合に、設計情報取得部が取得した設計情報に基づいてロジックソースコードを生成する。参照ソースコード生成部は、ロジックソースコードに記述される演算処理の実装部分を利用して演算処理を実行するためのソースコードである参照ソースコードを、設計情報取得部が取得した設計情報に基づいて生成する。
【図面の簡単な説明】
【０００７】
【図１】実施形態のソースコード自動生成装置の構成を示す機能ブロック図。
【図２】実施形態のソースコード自動生成装置の動作を示すフロー図。
【図３】実施形態の設計情報の取得処理におけるシーケンス図。
【図４】実施形態の設計情報を示す図。
【図５】実施形態の変換処理のソースコードの例を示す図。
【図６】実施形態の設計情報を便宜的に表現した図。
【図７】実施形態の設計情報の振分処理におけるシーケンス図。
【図８】実施形態の分離対象設計情報を示す図。
【図９】実施形態の分離対象外設計情報を示す図。
【図１０】実施形態のロジックソースコードの存在確認処理におけるシーケンス図。
【図１１】実施形態のロジックソースコードの生成処理におけるシーケンス図。
【図１２】実施形態のロジックソースコード生成用のテンプレートを示す図。
【図１３】実施形態のロジックソースコードを示す図。
【図１４】実施形態の参照ソースコードの生成処理におけるシーケンス図。
【図１５】実施形態の参照ソースコード生成用のテンプレートを示す図。
【図１６】実施形態の参照ソースコードを示す図。
【図１７】実施形態の分離対象外ソースコードの生成処理におけるシーケンス図。
【図１８】実施形態の分離対象外ソースコード生成用のテンプレートを示す図。
【図１９】実施形態の生成された分離対象外ソースコードを示す図。
【発明を実施するための形態】
【０００８】
以下、実施形態のソースコード自動生成装置、及びプログラムを、図面を参照して説明する。
【０００９】
実施形態のソースコード自動生成装置は、ユーザが定義したアプリケーションの設計情報からロジックソースコード、参照ソースコード、及び分離対象外ソースコードの３種類のソースコードを生成する。以下では、オブジェクト指向プログラミング言語によりソースコードが記述される場合を例に説明する。
【００１０】
設計情報は、ジョブを構成する演算処理と、ジョブにおける演算処理の流れを定義したジョブフローとを定義した情報である。ジョブフローは、演算処理間の入力パラメータと出力パラメータの関係により流れが定義される。例えば、演算処理Ａの出力パラメータを演算処理Ｂの入力パラメータに用いる場合、演算処理Ａ→演算処理Ｂという流れになる。
【００１１】
ロジックソースコードは、ジョブを構成する各演算処理のクラスを記述したソースコードである。実施形態のソースコード自動生成装置が生成したロジックソースコードの各演算処理のクラスは、演算処理の実装部分の記述箇所を含むが、具体的な実装部分のソースコードは記述されない。演算処理の実装部分とは、その演算処理が実行する具体的なデータ処理やそれらデータ処理の流れなどのロジックの記述である。各演算処理のロジックは、ユーザが生成されたロジックソースコードに記述する。つまり、実施形態のソースコード自動生成装置が生成するロジックソースコードは、各演算処理を記述するための雛形となる。
【００１２】
参照ソースコードは、ロジックソースコードの子クラス（「サブクラス」ともいう。）である。参照ソースコードは、分離対象外ソースコードに記述される各演算処理のメソッドを記述したソースコードである。各メソッドは、親クラス（「スーパークラス」ともいう。）であるロジックソースコードのクラスを継承する。つまり、参照ソースコードは、ロジックソースコードに記述された演算処理の実装部分であるロジックを利用して、演算処理を実行する。
【００１３】
分離対象外ソースコードは、ジョブフローにより定義された流れに従って演算処理を実行するためのソースコードである。
【００１４】
ユーザは、ソースコード自動生成装置が設計情報から生成したソースコードのうち、ビジネスロジックの追加や修正などのため、ロジックソースコードに対してのみ編集を行う。ロジックソースコードの編集後、ユーザは、設計情報を修正する場合がある。ソースコード自動生成装置は、修正された設計情報から再度ソースコード生成する。このソースコードの再生成の際、ソースコード自動生成装置は、参照ソースコード及び分離対象外ソースコードを生成するが、ロジックソースコードは生成しない。このように、ソースコード自動生成装置は、ロジックソースコードを初回のソースコード生成時にのみ生成し、次回以降にソースコードを生成するときには生成しないため、ユーザにより編集されたロジックソースコードが上書きされることがない。これにより、ユーザが設計情報の修正前にソースコードに編集した内容をそのまま利用可能とし、開発コストを抑える。
ロジックソースコード、参照ソースコード、及び分離対象外ソースコードは、既存のコード生成装置によって、コンピュータ装置が実行可能な処理実行コードに変換される。
【００１５】
従来のように設計情報からソースコードを分離せずに生成した場合、ソースコードから利用者が編集した部分を抽出し、変更後の設計情報から再生成されたソースコードに挿入する方法が考えられる。しかし、この方法では、変更前の設計情報に基づいて生成したソースコードから、ユーザが行った編集内容を抽出するために、以下の２つの機能が必要となる。
１つは、ソースコード全体を検索して、編集前のソースコードと編集後のソースコードの差分を抽出する機能である。もう１つは、変更後の設計情報から再生成されたソースコードに、抽出した差分を挿入する機能である。これらの機能の開発には、開発者の負荷を要する。
また、編集内容抽出のために、変更前の設計情報から生成したソースコードに対して、ユーザが編集箇所を特定する制御コードを付加することも考えられる。しかし、ユーザが意図せずに不要な識別コードを記述してしまう可能性や、必要な識別コードを付加し忘れる可能性がある。識別コードを自動的に付加する機能と、不要な識別コードを記述させない機能とを実現することも考えられるが、やはり開発者の負荷を要する。
【００１６】
本実施形態では、最初の設計情報からソースコードを生成する際に、各演算処理のロジックの記述箇所を含んだロジックソースコードを分離して生成する。各演算処理のロジックは、通常、設計情報に詳細が定義されないために、ユーザが編集を行う対象である。そして、変更後の設計情報からはロジックソースコードを生成しない。これにより、生成済みのソースコードに対してユーザが編集を行った箇所を抽出する必要なく、編集内容をそのまま新しいバージョンのソースコードに利用可能とする。
【００１７】
図１は、実施形態のソースコード自動生成装置１００の構成を示す機能ブロック図であり、本実施形態と関係する機能ブロックのみを抽出して示してある。ソースコード自動生成装置１００は、コンピュータ装置により実現することができる。ソースコード自動生成装置１００は、設計情報取得部１０１と、設計情報振分部１０２と、ソースコードテンプレート記憶部１０３と、ロジックソースコード確認部１０４と、ロジックソースコード生成部１０５と、参照ソースコード生成部１０６と、分離対象外ソースコード生成部１０７とを備えて構成される。
【００１８】
設計情報取得部１０１は、設計情報を取得する。本実施形態では、設計情報取得部１０１は、設計情報記憶部２００に格納されている設計情報を読み取る。設計情報記憶部２００は、例えば、データベース装置であるが、ソースコード自動生成装置１００が備えるハードディスク装置や半導体メモリでもよい。設計情報取得部１０１は、ネットワークを介して接続されるコンピュータ端末から設計情報を受信してもよい。設計情報振分部１０２は、設計情報取得部１０１が読み取った設計情報を振り分け、ロジックソースコード生成部１０５、参照ソースコード生成部１０６、及び、分離対象外ソースコード生成部１０７に出力する。
【００１９】
ソースコードテンプレート記憶部１０３は、ロジックソースコード生成用のテンプレート、参照ソースコード生成用のテンプレート、及び分離対象外ソースコード生成用のテンプレートを格納する。テンプレートには、設計情報からソースコードを生成する際の変換ルールが記述される。
【００２０】
ロジックソースコード確認部１０４は、設計情報取得部１０１が取得した設計情報の修正前の設計情報から生成されたロジックソースコードの存在を確認する。
ロジックソースコード生成部１０５は、ロジックソースコード確認部１０４においてロジックソースコードが存在しないことが確認された場合に、設計情報振分部１０２により振り分けられた設計情報からロジックソースコードを生成する。ロジックソースコード生成部１０５は、ロジックソースコード生成の際、ソースコードテンプレート記憶部１０３に記憶されているテンプレートを用いる。ロジックソースコード生成部１０５は、生成したロジックソースコードをソースコード記憶部３００に格納する。
【００２１】
参照ソースコード生成部１０６は、設計情報振分部１０２により振り分けられた設計情報から参照ソースコードを生成する。参照ソースコード生成部１０６は、参照ソースコード生成の際、ソースコードテンプレート記憶部１０３に記憶されているテンプレートを用いる。参照ソースコード生成部１０６は、生成したロジックソースコードをソースコード記憶部３００に格納する。
【００２２】
分離対象外ソースコード生成部１０７は、設計情報振分部１０２により振り分けられた設計情報から分離対象外ソースコードを生成する。分離対象外ソースコード生成部１０７は、分離対象外ソースコード生成の際、ソースコードテンプレート記憶部１０３に記憶されているテンプレートを用いる。分離対象外ソースコード生成部１０７は、生成した分離対象外ソースコードをソースコード記憶部３００に格納する。
【００２３】
ソースコード記憶部３００は、例えば、データベース装置であるが、ソースコード自動生成装置１００が備えるハードディスク装置や半導体メモリでもよい。ソースコード記憶部３００に記憶されているロジックソースコード３０１、３０２は、設計情報から生成されたパッケージ毎のソースコードである。ロジックソースコード３０１、３０２は、ユーザ４００による編集が許可される。ユーザ４００による編集が許可される箇所は、ジョブを構成する各演算処理のロジック（具体的なビジネスロジックの処理）を記述する箇所である。参照ソースコード３０３は、ロジックソースコード３０１を参照し、参照ソースコード３０４は、ロジックソースコード３０２を参照する。参照ソースコード３０３、３０４にはロジックが記述されず、参照先のロジックソースコードに記述されているロジックを利用して演算処理を実行する。参照ソースコード３０３、３０４は、ユーザによる編集が想定されないソースコードである。分離対象外ソースコード３０５には、設計情報を元にジョブフローが具体的に記述される。分離対象外ソースコード３０５は、ユーザによる編集が想定されないソースコードである。
【００２４】
図２は、ソースコード自動生成装置１００の動作を示すフロー図である。設計情報記憶部２００は、事前に作成された設計情報を格納している。
まず、設計情報取得部１０１は、ユーザ４００の要求を受けて、設計情報記憶部２００から設計情報を読み取る（ステップＳ１）。設計情報は、表計算ソフトで作成した設計情報のデータや、ＧＵＩ（グラフィック・ユーザ・インタフェース）ツールで描画した処理フロー図から作成したデータ等が考えられるが、特にその形態は制限しない。
【００２５】
設計情報振分部１０２は、設計情報取得部１０１から設計情報を受信する。設計情報振分部１０２は、設計情報を解析し、設計情報をその後の処理で利用できる形式に変換する。例えば、ソースコード自動生成装置１００をＪａｖａ（登録商標）により実装する場合、表計算ソフト等で作成した設計情報のデータを、Ｊａｖａ（登録商標）のデータモデルの形式に変換し、ＰＣ（パーソナルコンピュータ）のメモリ上で保持する方法が一般的である。
【００２６】
設計情報振分部１０２は、形式変換した設計情報から分離対象設計情報と分離対象外設計情報を生成する（ステップＳ２）。分離対象設計情報は、ロジックソースコードと参照ソースコードに分離して演算処理のソースコードを生成するために用いる設計情報である。分離対象設計情報は、ジョブを構成する各演算処理に関する記述を設計情報から抽出して生成される。分離対象外設計情報は、ジョブフローのソースコードを分離せずに生成するために用いる設計情報である。分離対象外設計情報は、ジョブフローの部分の記述を設計情報から抽出して生成される。ユーザの理解等のため、分離対象設計情報がロジックソースコードや参照ソースコードの生成に使用されない情報を含むようにしてもよく、分離対象設計情報が分離対象外ソースコードの生成に使用されない情報を含むようにしてもよい。設計情報振分部１０２は、分離対象設計情報をロジックソースコード生成部１０５及び参照ソースコード生成部１０６に出力し、分離対象外設計情報を分離対象外ソースコード生成部１０７に出力する。
【００２７】
ロジックソースコード生成部１０５は、設計情報振分部１０２から分離対象設計情報を受信すると、受信した分離対象設計情報により生成が指示されているロジックソースコードの存在確認をロジックソースコード確認部１０４に要求する。要求を受けたロジックソースコード確認部１０４は、ソースコード記憶部３００を参照し、生成が指示されているロジックソースコードが既に生成されているか否かを確認する。ロジックソースコード確認部１０４は、確認結果をロジックソースコード生成部１０５に通知する（ステップＳ３）。
【００２８】
ロジックソースコード生成部１０５は、ロジックソースコード確認部１０４によりロジックソースコードが生成されていないことが確認された場合に限り、設計情報で生成が指示されているロジックソースコードを生成する（ステップＳ４）。ロジックソースコード生成部１０５は、ソースコードテンプレート記憶部１０３からロジックソースコード生成用のテンプレートを読み出す。ロジックソースコード生成部１０５は、読み出したテンプレートの特定箇所を、そのテンプレートで指定された分離対象設計情報内の記述に置き換えてロジックソースコードを生成する。
【００２９】
参照ソースコード生成部１０６は、ロジックソースコード確認部１０４による確認結果に依らず、参照ソースコードを生成する（ステップＳ５）。参照ソースコード生成部１０６は、ソースコードテンプレート記憶部１０３から参照ソースコード生成用のテンプレートを読み出す。参照ソースコード生成部１０６は、読み出したテンプレートの特定箇所を、そのテンプレートで指定された分離対象設計情報内の記述に置き換えて参照ソースコードを生成する。
【００３０】
分離対象外ソースコード生成部１０７は、設計情報振分部１０２から受信した分離対象外設計情報を用いて、分離対象外ソースコードを生成する（ステップＳ６）。分離対象外ソースコード生成部１０７は、ソースコードテンプレート記憶部１０３から分離対象外ソースコード生成用のテンプレートを読み出す。分離対象外ソースコード生成部１０７は、読み出したテンプレートの特定箇所を、そのテンプレートで指定された分離対象外設計情報内の記述に置き換えて分離対象外ソースコードを生成する。
【００３１】
上記のように、ソースコード自動生成装置１００は、設計情報からロジックソースコード、参照ソースコード、及び、分離対象外ソースコードに分離してソースコードを生成する。ソースコード自動生成装置１００は、修正された設計情報からソースコードを生成する時には、ロジックソースコードを生成せず、上書きを禁止する。
【００３２】
例えば、ソースコード自動生成装置１００が最初の設計情報からソースコードを生成する。ユーザ４００は、生成されたソースコードのうちロジックソースコードに、Ｅｃｌｉｐｓｅ（オープンソースソフトウェアの一種）等のソースコードの編集用の既存のエディタを用いて、演算処理のロジックを記述する。その後、ジョブフローに新たな演算処理Ｘが追加されたとする。ソースコード自動生成装置１００は、演算処理Ｘが追加された設計情報から、参照ソースコード、及び、分離対象外ソースコードを生成し、ロジックソースコードは生成しない。エディタは、参照ソースコードが参照している演算処理Ｘのメソッドがロジックソースコードに定義されていない旨のエラーを出力する。ユーザ４００は、最初の設計情報から生成された後に、演算処理のロジックを記述したロジックソースコードに対して、エディタのコード補完機能等を用いて、演算処理Ｘのメソッド及びロジックを追加し、必要に応じて他の演算処理のロジックを修正するなどの編集を行う。そしてさらに、ジョブフローに他の新たな演算処理Ｙが追加されたとする。ソースコード自動生成装置１００は、演算処理Ｙが追加された設計情報から、参照ソースコード、及び、分離対象外ソースコードを生成し、ロジックソースコードは生成しない。エディタは、参照ソースコードが参照している演算処理Ｙのメソッドがロジックソースコードに定義されていない旨のエラーを出力する。ユーザ４００は、演算処理Ｘのメソッド及びロジックの追加等の編集が行われた現在のロジックソースコードに対して、エディタのコード補完機能等を用いて、演算処理Ｙのメソッド及びロジックを追加し、必要に応じて他の演算処理のロジックを修正する。
【００３３】
上記のように、ソースコード自動生成装置１００は、ユーザが旧バージョンのソースコードに対して行った編集内容を、新バージョンのソースコード生成時に上書きして消してしまうことなく、そのままソースコードに利用可能とする。
【００３４】
続いて、ソースコード自動生成装置１００がＪａｖａ（登録商標）のソースコードを生成し、ソースコード記憶部３００に保存する場合を例にして、図２に示す各ステップの詳細な処理を説明する。生成される各ソースコード（ファイル）は、Ｊａｖａ（登録商標）のクラスまたはインタフェースを定義する。また、ロジックソースコードと参照ソースコードはペアであり、ロジックソースコードが親クラス、参照ソースコードが子クラスであるというように、オブジェクト指向の継承関係を有している。
【００３５】
図３は、図２のステップＳ１の設計情報の取得処理におけるシーケンス図である。
ユーザ４００は、ソースコード自動生成装置１００にソースコード生成の要求を入力する（ステップＳ１−１）。例えば、ユーザ４００は、ソースコード自動生成装置１００が備える図示しない入力装置により要求を入力してもよく、ユーザ４００の保有するコンピュータ装置からソースコード自動生成装置１００にソースコード生成の要求を送信してもよい。ソースコード自動生成装置１００は、ユーザ４００が入力した要求をトリガとして、以降の処理を実行する。なお、ソースコード自動生成装置１００が、ソースコード生成の全体をハンドリングする機能部を有し、この機能部の制御によって以降の処理を行ってもよい。
【００３６】
設計情報取得部１０１は、ユーザからの要求を受けて、設計情報記憶部２００に設計情報を要求する。設計情報記憶部２００は、要求された設計情報をソースコード自動生成装置１００に返送する（ステップＳ１−２）。
【００３７】
図４は、設計情報記憶部２００から読み出された設計情報の例を示す図である。同図に示す設計情報は、ＸＭＬ（extensible markup language）により記述した例を示している。同図に示す設計情報には、ジョブフロー（jobflow）の完全クラス名（jobflowCompleteClass）と、ジョブフロー名（name）と、入力パラメータ（input）のリストと、出力パラメータ（output）のリストと、演算処理（operation）のリストとが記述される。各入力パラメータ（input）には、入力パラメータの型名（modelName）が記述される。各出力パラメータ（output）には、出力パラメータの型名（modelName）及び出力変数名（opeOutput）が記述される。各演算処理（operation）には、演算処理のメソッド名（methodName）、変数名（opeVariableName）、アノテーション名（annotationName）、入力パラメータの定義（inputDefine）のリスト、出力パラメータの定義（outputDefine）のリストが含まれる。演算処理の各入力パラメータの定義（inputDefine）には、入力パラメータの変数名（opeInput）、型名（modelName）、及び演算変数名（variableName）が含まれる。演算処理の各出力パラメータの定義（outputDefine）には、出力パラメータの型名（modelName）、及び演算変数名（variableName）が含まれる。アノテーション名は、コード生成装置により予め決められた演算名であり、ソースコードから処理実行コードへの変換時に用いられる。
【００３８】
図３において、設計情報取得部１０１は、設計情報記憶部２００から読み出した設計情報を、Ｊａｖａ（登録商標）のデータモデルの形式に変換する（ステップＳ１−３）。例えば、ＪＡＸＢ（Java（登録商標） Architecture for XML Binding）の機能を用いて、ＸＭＬからＪａｖａ（登録商標）のデータモデルへ変換する。設計情報取得部１０１は、変換処理後の設計情報を、設計情報振分部１０２に出力する（ステップＳ１−４）。
【００３９】
図５は、ＪＡＸＢを用いた変換処理のソースコードの例を示す図である。同図に示す変換処理のソースコードは、ステップＳ１−３における変換処理に用いられる。ステップＳ１−３における設計情報の変換処理は、その後の処理で設計情報を扱いやすくするための一般的な処理である。しかし、設計情報の変換処理は必須の処理ではなく、設計情報の変換が不要な場合は、ステップＳ１−３の処理は行わない。変換処理により記述形式が変更された場合も、変換前後で設計情報が表す内容に変化はない。
【００４０】
図６は、図４に示す設計情報を便宜的に表現した図である。以下では、同図に示す記述形式で設計情報を表現する。
【００４１】
図７は、図２のステップＳ２の設計情報の振分処理におけるシーケンス図である。
ステップＳ２において、設計情報振分部１０２は、設計情報取得部１０１が取得した設計情報を受信し、ロジックソースコード生成部１０５、参照ソースコード生成部１０６、及び分離対象外ソースコード生成部１０７に出力する。
【００４２】
設計情報振分部１０２は、設計情報取得部１０１が取得した設計情報から、分離対象設計情報を生成する（ステップＳ２−１）。後のステップで、この分離対象設計情報を元に、ロジックソースコードと参照ソースコードが作成される。設計情報振分部１０２は、生成した分離対象設計情報を、ロジックソースコード生成部１０５と参照ソースコード生成部１０６のそれぞれに出力する（ステップＳ２−２）。
【００４３】
図８は、図６に示す設計情報から生成された分離対象設計情報を示す図である。
分離対象設計情報の「演算クラス名」は、設計情報の「ジョブクラス名」の最後の「.」より後方部分に“Operator”を付加して生成される。分離対象設計情報の「演算子パッケージ名」は、設計情報の「ジョブクラス名」の最後の「.」より前方部分に「.operator」を付加して生成される。
【００４４】
分離対象設計情報「演算処理のリスト」には、設計情報の「演算処理のリスト」に含まれる各演算処理が設定される。リストの各要素である演算処理には以下の（１）または（２）の変換がなされる。
【００４５】
（１）設計情報の「演算名」が”Stop”の演算処理については、分離対象設計情報の「演算処理のリスト」に設定されない。
（２）設計情報の「演算名」が”Stop”以外の演算処理については、以下に示す（ａ）〜（ｄ）の変換がなされて、分離対象設計情報の「演算処理のリスト」の演算処理として設定される。
【００４６】
（ａ）分離対象設計情報の演算処理の「メソッド名」、「演算名」には、設計情報の対応する演算処理の「メソッド名」、「演算名」が設定される。
（ｂ）分離対象設計情報の演算処理の「入力のリスト」には、設計情報の対応する演算処理の全ての「入力」をリスト形式で記述する。例えば、設計情報の演算処理の「入力：｛ｐ１｝」，「入力：｛ｐ２｝」，「入力：｛ｐ３｝」は、分離対象設計情報の演算処理では、「入力リスト：｛｛ｐ１｝，｛ｐ２｝，｛ｐ３｝｝」の形式となる。さらに、設計情報の演算処理の「入力」にはそれぞれ、以下に示す変換がなされて分離対象設計情報の演算処理の「入力のリスト」の要素となる。すなわち、分離対象設計情報の「モデル名」には、設計情報の「入力」の「型名」の頭文字を大文字にし、さらに、「_」の次の文字を大文字にして「_」を削除した名前が設定される。また、分離対象設計情報の入力の「演算変数名」には、設計情報の「入力」の「演算変数名」が設定される。
【００４７】
（ｃ）分離対象設計情報の演算処理の「出力のリスト」には、設計情報の対応する演算処理の全ての「出力」を、（ｂ）と同様にリスト形式で記述する。さらに、設計情報の演算処理の「出力」にはそれぞれ、以下に示す変換がなされて分離対象設計情報の「出力のリスト」の要素となる。すなわち、分離対象設計情報の「モデル名」には、設計情報の「出力」の「型名」の頭文字を大文字にし、さらに、「_」の次の文字を大文字にして「_」を削除した名前が設定される。また、分離対象設計情報の出力の「演算変数名」には、設計情報の「出力」の「演算変数名」が設定される。
【００４８】
（ｄ）設計情報の「演算名」が”Update”の場合、分離対象設計情報の「戻り値の型」は、設定されない。設計情報の「演算名」が”Convert”の場合、演算処理の最初の「出力」の「型名」の頭文字を大文字にし、さらに、「_」の次の文字を大文字にして「_」を削除した名前とする。
【００４９】
なお、設計情報の演算処理の「変数名」は、分離対象設計情報には設定されない。
【００５０】
図７において、設計情報振分部１０２は、設計情報取得部１０１から受信した設計情報から、分離対象外設計情報を作成する（ステップＳ２−３）。後のステップで、この分離対象外設計情報を元に、分離対象外ソースコードが作成される。設計情報振分部１０２は、作成した分離対象外設計情報を、分離対象外ソースコード生成部１０７に出力する（ステップＳ２−４）。
【００５１】
図９は、図６に示す設計情報から生成された分離対象外設計情報を示す図である。
分離対象外設計情報の「ジョブクラス名」には、設計情報の「ジョブクラス名」の最後の「.」よりの後方部分が設定され、分離対象外設計情報の「ジョブパッケージ名」には、設計情報の「ジョブクラス名」の最後の「.」より前方部分が設定される。分離対象外設計情報の「ジョブフロー名」には、設計情報の「ジョブフロー名」が設定される。
【００５２】
分離対象外設計情報の「入力のリスト」には、設計情報のジョブフローの全「入力」をリスト形式で記述する。例えば、設計情報のジョブフローの「入力：｛ｐ１｝」，「入力：｛ｐ２｝」，「入力：｛ｐ３｝」は、分離対象設計情報では、「入力リスト｛｛ｐ１｝，｛ｐ２｝，｛ｐ３｝｝」の形式となる。さらに、設計情報のジョブフローの「入力」にはそれぞれ、以下に示す変換がなされて分離対象外設計情報の「入力のリスト」の要素となる。すなわち、分離対象外設計情報の「モデル名」には、設計情報のジョブフローの「入力」の「型名」の頭文字を大文字にし、さらに、「_」の次の文字を大文字にして「_」を削除した名前が設定される。
【００５３】
また、分離対象外設計情報の「出力のリスト」には、設計情報のジョブフローの全「出力」を、入力のリストと同様にリスト形式で記述する。さらに、設計情報のジョブフローの「出力」には、それぞれ、以下に示す変換がなされて分離対象外設計情報の「出力のリスト」の要素となる。すなわち、分離対象外設計情報の「出力のリスト」の要素である出力の「モデル名」には、設計情報のジョブフローの「出力」の「型名」の頭文字を大文字にし、さらに、「_」の次の文字を大文字にして「_」を削除した名前が設定される。また、分離対象外設計情報の「出力のリスト」の各要素である出力の「出力変数名」には、設計情報ジョブフローの「出力」の「出力変数名」が設定される。
【００５４】
分離対象外設計情報の「演算処理のリスト」には、設計情報の「演算処理のリスト」に含まれる各演算処理が設定される。リストの各要素である「演算処理」は以下に示す変換がなされる。
（ａ）分離対象外設計情報の「メソッド名」には、設計情報の「メソッド名」が設定される。
（ｂ）分離対象外設計情報の「メソッドクラス名」には、設計情報の「メソッド名」の頭文字が大文字に変換されて設定される。
（ｃ）分離対象外設計情報の「変数名」には、設計情報の「変数名」が設定される。
（ｄ）分離対象外設計情報の演算処理の「入力のリスト」には、設計情報の対応する演算処理の全ての「入力」をリスト形式で記述する。さらに、設計情報の演算処理の「入力」にはそれぞれ、以下に示す変換がなされて分離対象設計情報の対応する演算処理の「入力のリスト」の要素となる。すなわち、分離対象外設計情報の入力の「変数名」には、設計情報の「入力」の「変数名」が設定される。また、分離対象外設計情報の入力の「モデル名」には、設計情報の「入力」の「型名」の頭文字を大文字にし、さらに、「_」の次の文字を大文字にして「_」を削除した名前が設定される。分離対象外設計情報の入力の「演算変数名」には、設計情報の「入力」の「演算変数名」が設定される。設計情報の「入力」に「演算変数名」の設定がない場合、分離対象外設計情報の入力の「演算変数名」も設定されない。
設計情報の演算処理の「演算名」と「出力」は、分離対象外設計情報への変換では利用しない。
【００５５】
図１０は、図２のステップＳ３のロジックソースコードの存在確認処理におけるシーケンス図である。ステップＳ３において、ロジックソースコード生成部１０５が設計情報振分部１０２から設計情報を受信した後に、ロジックソースコード確認部１０４がロジックソースコードの有無を確認する。
【００５６】
ロジックソースコード生成部１０５は、設計情報振分部１０２から受信した分離対象設計情報を元にして、生成対象のロジックソースコードを特定し、生成対象のロジックソースコードの一覧をロジックソースコード確認部１０４に出力する（ステップＳ３−１）。ロジックソースコード確認部１０４は、ソースコード記憶部３００を検索し、生成対象のロジックソースコードが存在するか否かを判断する（ステップＳ３−２）。例えば、図８に示す分離対象設計情報を受信した場合、生成対象のロジックソースコードのファイル名を、分離対象設計情報の「演算クラス名」の末尾に所定の拡張子を含む決められた名前「Logic.java」を付加した「CategorySummaryJobOperatorLogic.java」とする。ロジックソースコード確認部１０４は、このファイル名のロジックソースコードがすでにソースコード記憶部３００に記憶されているかを問い合わせる。そこで、ロジックソースコード確認部１０４は、生成対象のロジックソースコードの検索要求をソースコード記憶部３００に送信し、ソースコード記憶部３００は、検索結果を返送する。ロジックソースコード確認部１０４は、生成対象のロジックソースコードの存在確認の結果を受信すると、ロジックソースコード生成部１０５に出力する（ステップＳ３−３）。
【００５７】
図１１は、図２のステップＳ４のロジックソースコードの生成処理におけるシーケンス図である。ステップＳ３において、ロジックソースコード生成部１０５は、ロジックソースコード確認部１０４からロジックソースコードの存在確認の確認結果を受信する。ステップＳ４において、ロジックソースコード生成部１０５は、ロジックソースコード確認部１０４から受信した確認結果が、生成対象のロジックソースコードが存在しないことを示している場合に、以下のステップＳ４−１からステップＳ４−３の処理を実行する。ロジックソースコード確認部１０４から受信した確認結果が、生成対象のロジックソースコードがすでに存在することを示している場合は、ステップＳ４−１からステップＳ４−３の処理を実行せず、図２に示すステップＳ５の参照ソースコードの生成処理を行う。
【００５８】
ロジックソースコード確認部１０４が、生成対象のロジックソースコードがソースコード記憶部３００に存在しないことを確認した場合、ソースコードテンプレート記憶部１０３からロジックソースコード生成用のテンプレートを取得する（ステップＳ４−１）。ロジックソースコード生成部１０５は、分離対象設計情報とロジックソースコード生成用のテンプレートをマージし、ロジックソースコードを生成する（ステップＳ４−２）。ロジックソースコード生成部１０５は、生成したロジックソースコードをソースコード記憶部３００に保存する（ステップＳ４−３）。
【００５９】
図１２は、ロジックソースコード生成用のテンプレートを示す図であり、図１３は、ロジックソースコードの例を示す図である。図１３に示すロジックソースコードは、図１２に示すロジックソースコード生成用のテンプレートの対応する箇所を、図８に示す分離対象設計情報で置き換えて生成される。
図１２に示すテンプレートには、分離対象設計情報の「演算子パッケージ名」からパッケージ名を生成すること、分離対象設計情報の「演算クラス名」からパブリック抽象クラスのクラス名を生成することが記述されている。
また、図１２に示すテンプレートには、分離対象設計情報の「演算処理のリスト」内の各演算処理について、ロジックソースコードのロジックの実装箇所を生成することが記述されている。「演算名」が"Update"であれば、「メソッド名」と「入力のリスト」内の各入力パラメータとを用いて、「演算名」が"Convert"であれば、「メソッド名」と「出力のリスト」内の各出力パラメータとを用いて、各演算処理のロジックの実装箇所が生成される。
【００６０】
図１４は、図２のステップＳ５の参照ソースコードの生成処理におけるシーケンス図である。
参照ソースコード生成部１０６は、ソースコードテンプレート記憶部１０３から参照ソースコード生成用のテンプレートを取得する（ステップＳ５−１）。参照ソースコード生成部１０６は、分離対象設計情報と参照ソースコード生成用のテンプレートをマージし、参照ソースコードを生成する（ステップＳ５−２）。参照ソースコード生成部１０６は、生成した参照ソースコードをソースコード記憶部３００に保存する（ステップＳ５−３）。
【００６１】
図１５は、参照ソースコード生成用のテンプレートを示す図であり、図１６は、参照ソースコードの例を示す図である。図１６に示す参照ソースコードは、図１５に示す参照ソースコード生成用のテンプレートの対応する箇所を、図８に示す分離対象設計情報で置き換えて生成される。
【００６２】
図１５に示すテンプレートには、分離対象設計情報の「演算子パッケージ名」からパッケージ名を生成すること、分離対象設計情報の「演算クラス名」からロジックソースコードの子クラスであることの定義を生成することが記述されている。
また、図１５に示すテンプレートには、分離対象設計情報の「演算処理のリスト」に含まれる各演算処理のアノテーションとメソッドを生成することが記述されている。アノテーション名は、分離対象設計情報の演算処理の「演算名」であり、コード生成装置がソースコードから処理実行コードを生成する際に使用される。また、図１５に示すテンプレートには、分離対象設計情報の各演算処理の「メソッド名」と「入力のリスト」内の各入力パラメータから、ロジックソースコード内の演算処理を継承したメソッドを生成することが記述されている。
【００６３】
図１７は、図２のステップＳ６の分離対象外ソースコードの生成処理におけるシーケンス図である。
分離対象外ソースコード生成部１０７は、ソースコードテンプレート記憶部１０３から分離対象外ソースコード生成用のテンプレートを取得する（ステップＳ６−１）。分離対象外ソースコード生成部１０７は、分離対象外設計情報と分離対象外ソースコード生成用のテンプレートをマージし、分離対象外ソースコードを生成する（ステップＳ６−２）。分離対象外ソースコード生成部１０７は、生成した分離対象外ソースコードをソースコード記憶部３００に保存する（ステップＳ６−３）。
【００６４】
図１８は、分離対象外ソースコード生成用のテンプレートを示す図であり、図１９は、分離対象外ソースコードの例を示す図である。図１９に分離対象外ソースコードは、図１８に示す分離対象外ソースコード生成用のテンプレートの対応する箇所を、図９に示す分離対象外設計情報で置き換えて生成したソースコードを示している。
【００６５】
図１８に示すテンプレートには、分離対象外設計情報のジョブパッケージ名に基づいて分離対象外ソースコードのパッケージ名を生成することが記述されている。また、図１８に示すテンプレートには、分離対象外設計情報のジョブフロー名、及びジョブクラス名に基づいて、分離対象外ソースコードがジョブフローを継承するサブクラスであることの定義を生成することが記述されている。
また、図１８に示すテンプレートには、分離対象外設計情報のジョブフローの「入力のリスト」に含まれる各入力パラメータから分離対象外ソースコードの入力パラメータのデータ型と変数名を生成することが記述されている。また、図１８に示すテンプレートには、分離対象外設計情報のジョブフローの「出力のリスト」に含まれる各出力パラメータから、分離対象外ソースコードの出力パラメータのデータ型と変数名を生成することが記述されている。
さらに、図１８に示すテンプレートには、分離対象外設計情報の「演算処理のリスト」に含まれる各演算処理の変数名と入力のリストに基づいて、各演算処理間の入力パラメータと出力パラメータとの関係を記述したソースコードを生成することが記述されている。
【００６６】
上述した実施形態によれば、ソースコード自動生成装置は、設計情報に基づいて、ロジックソースコード、参照ソースコード、及び分離対象外ソースコードを生成し、設計情報の変更後は、参照ソースコードと分離対象外ソースコードのみを生成する。よって、ユーザがロジックソースコードを編集した後に設計情報が変更された場合も、ユーザにより編集内容をそのまま利用可能したソースコードを生成することができる。
【００６７】
なお、上記実施形態では、設計情報を分離対象設計情報と分離対象外設計情報とに分離しているが、設計情報を分離せずにロジックソースコード、参照ソースコード、及び分離対象外ソースコードを生成してもよい。
【００６８】
以上説明した少なくともひとつの実施形態によれば、ロジックソースコード確認部と、ロジックソースコード生成部と、参照ソースコード生成部を持つことにより、修正前の設計情報から生成したソースコードに対してユーザが行った追加や変更などの編集の内容を、設計情報変更後のソースコードに引き継いで利用することができる。
【００６９】
上述した実施形態におけるソースコード自動生成装置１００の機能をコンピュータで実現するようにしてもよい。その場合、この機能を実現するためのプログラムをコンピュータ読み取り可能な記録媒体に記録して、この記録媒体に記録されたプログラムをコンピュータシステムに読み込ませ、実行することによって実現してもよい。なお、ここでいう「コンピュータシステム」とは、ＯＳや周辺機器等のハードウェアを含むものとする。また、「コンピュータ読み取り可能な記録媒体」とは、フレキシブルディスク、光磁気ディスク、ＲＯＭ、ＣＤ−ＲＯＭ等の可搬媒体、コンピュータシステムに内蔵されるハードディスク等の記憶装置のことをいう。さらに「コンピュータ読み取り可能な記録媒体」とは、インターネット等のネットワークや電話回線等の通信回線を介してプログラムを送信する場合の通信線のように、短時間の間、動的にプログラムを保持するもの、その場合のサーバやクライアントとなるコンピュータシステム内部の揮発性メモリのように、一定時間プログラムを保持しているものも含んでもよい。また上記プログラムは、前述した機能の一部を実現するためのものであってもよく、さらに前述した機能をコンピュータシステムにすでに記録されているプログラムとの組み合わせで実現できるものであってもよい。
【００７０】
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれると同様に、特許請求の範囲に記載された発明とその均等の範囲に含まれるものである。
【符号の説明】
【００７１】
１００…ソースコード自動生成装置、１０１…設計情報取得部、１０２…設計情報振分部、１０３…ソースコードテンプレート記憶部、１０４…ロジックソースコード確認部、１０５…ロジックソースコード生成部、１０６…参照ソースコード生成部、１０７…分離対象外ソースコード生成部、２００…設計情報記憶部、３００…ソースコード記憶部、４００…ユーザ
【図１】
0006301783.tif 000002
【図２】
0006301783.tif 000003
【図３】
0006301783.tif 000004
【図４】
0006301783.tif 000005
【図５】
0006301783.tif 000006
【図６】
0006301783.tif 000007
【図７】
0006301783.tif 000008
【図８】
0006301783.tif 000009
【図９】
0006301783.tif 000010
【図１０】
0006301783.tif 000011
【図１１】
0006301783.tif 000012
【図１２】
0006301783.tif 000013
【図１３】
0006301783.tif 000014
【図１４】
0006301783.tif 000015
【図１５】
0006301783.tif 000016
【図１６】
0006301783.tif 000017
【図１７】
0006301783.tif 000018
【図１８】
0006301783.tif 000019
【図１９】
0006301783.tif 000020