(57)【要約】【課題】依存性の注入を行うためにＤＩコンテナにより参照される設定ファイルの自動生成を行う。【解決手段】ソースコード生成部１０３は、データアクセスクラスを呼び出すビジネスロジッククラスのソースコードを生成する。このソースコードは、呼び出し先のデータアクセスクラスを特定するコードを含まない。即ち、依存性が排除されている。設定ファイル生成部１０４は、クラス間の関連を定義する関連定義情報１１３に基づいてインジェクション設定ファイル１２３を生成する。インジェクション設定ファイル１２３には、どのビジネスロジッククラスから、どのデータアクセスクラスを呼び出すのかが記述される。ビジネスロジッククラスのプログラム実行時には、ＤＩコンテナによってインジェクション設定ファイル１２３が参照され、ビジネスロジッククラスに対しデータアクセスクラスが与えられる。即ち、依存性が注入される。【選択図】図１
2011022906.tif 000002
【特許請求の範囲】
【請求項１】
複数のコンポーネントからなるプログラムの開発を支援する開発支援装置において、
前記複数のコンポーネントのうち、他のコンポーネントを呼び出すコンポーネントを呼び出し元コンポーネントとして定義するコンポーネント定義情報と、呼び出し元コンポーネントと呼び出し元コンポーネントによって呼び出される呼び出し先コンポーネントとの間の関係を定義する関係定義情報とを予め記憶装置に記憶する定義情報記憶部と、
前記定義情報記憶部により記憶されたコンポーネント定義情報で定義された呼び出し元コンポーネントのソースコードであって、呼び出し先コンポーネントを特定するコードを含まないソースコードを処理装置により生成するソースコード生成部と、
前記ソースコード生成部により生成された呼び出し元コンポーネントのソースコードをコンパイルしたプログラムの実行時に動作するＤＩ（Ｄｅｐｅｎｄｅｎｃｙ・Ｉｎｊｅｃｔｉｏｎ）コンテナによって参照される設定ファイルであって、前記ＤＩコンテナによって当該呼び出し元コンポーネントに与えられる呼び出し先コンポーネントを設定する設定ファイルを、前記定義情報記憶部により記憶された関係定義情報に基づいて処理装置により生成する設定ファイル生成部とを備えることを特徴とする開発支援装置。
【請求項２】
前記複数のコンポーネントのうち、呼び出し元コンポーネントは、データを用いて所定の処理を実行するビジネスロジッククラスであり、呼び出し先コンポーネントは、対応するビジネスロジッククラスにより用いられるデータの読み書きを実行するデータアクセスクラスであることを特徴とする請求項１に記載の開発支援装置。
【請求項３】
前記開発支援装置は、さらに、
前記定義情報記憶部により記憶されるコンポーネント定義情報と関係定義情報とを、ＵＭＬ（Ｕｎｉｆｉｅｄ・Ｍｏｄｅｌｉｎｇ・Ｌａｎｇｕａｇｅ）のクラス図として入力装置により入力する定義情報入力部を備えることを特徴とする請求項１又は２に記載の開発支援装置。
【請求項４】
複数のコンポーネントからなるプログラムの開発を支援する開発支援方法において、
記憶装置が、前記複数のコンポーネントのうち、他のコンポーネントを呼び出すコンポーネントを呼び出し元コンポーネントとして定義するコンポーネント定義情報と、呼び出し元コンポーネントと呼び出し元コンポーネントによって呼び出される呼び出し先コンポーネントとの間の関係を定義する関係定義情報とを記憶するステップと、
処理装置が、記憶装置により記憶されたコンポーネント定義情報で定義された呼び出し元コンポーネントのソースコードであって、呼び出し先コンポーネントを特定するコードを含まないソースコードを生成するステップと、
処理装置が、生成した呼び出し元コンポーネントのソースコードをコンパイルしたプログラムの実行時に動作するＤＩ（Ｄｅｐｅｎｄｅｎｃｙ・Ｉｎｊｅｃｔｉｏｎ）コンテナによって参照される設定ファイルであって、前記ＤＩコンテナによって当該呼び出し元コンポーネントに与えられる呼び出し先コンポーネントを設定する設定ファイルを、前記定義情報記憶部により記憶された関係定義情報に基づいて生成するステップとを備えることを特徴とする開発支援方法。
【請求項５】
複数のコンポーネントからなるプログラムの開発を支援する開発支援プログラムにおいて、
前記複数のコンポーネントのうち、他のコンポーネントを呼び出すコンポーネントを呼び出し元コンポーネントとして定義するコンポーネント定義情報と、呼び出し元コンポーネントと呼び出し元コンポーネントによって呼び出される呼び出し先コンポーネントとの間の関係を定義する関係定義情報とを予め記憶装置に記憶する定義情報記憶処理と、
前記定義情報記憶処理により記憶されたコンポーネント定義情報で定義された呼び出し元コンポーネントのソースコードであって、呼び出し先コンポーネントを特定するコードを含まないソースコードを処理装置により生成するソースコード生成処理と、
前記ソースコード生成処理により生成された呼び出し元コンポーネントのソースコードをコンパイルしたプログラムの実行時に動作するＤＩ（Ｄｅｐｅｎｄｅｎｃｙ・Ｉｎｊｅｃｔｉｏｎ）コンテナによって参照される設定ファイルであって、前記ＤＩコンテナによって当該呼び出し元コンポーネントに与えられる呼び出し先コンポーネントを設定する設定ファイルを、前記定義情報記憶処理により記憶された関係定義情報に基づいて処理装置により生成する設定ファイル生成処理とをコンピュータに実行させることを特徴とする開発支援プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、開発支援装置及び開発支援方法及び開発支援プログラムに関するものである。本発明は、特に、ウェブアプリケーション開発における設定ファイルの自動生成を行うウェブアプリケーション開発支援装置に関するものである。
【背景技術】
【０００２】
従来、ウェブアプリケーション等の開発において、データベース定義やテンプレートを入力とすることによって、ビジネスロジッククラスやデータアクセスクラス（ＤＡＯ：Ｄａｔａ・Ａｃｃｅｓｓ・Ｏｂｊｅｃｔ）のソースコード、トランザクション管理ファイル等の自動生成を行う技術がある（例えば、特許文献１〜３参照）。
【０００３】
近年、ウェブアプリケーション等の開発において、ＤＩ（Ｄｅｐｅｎｄｅｎｃｙ・Ｉｎｊｅｃｔｉｏｎ）コンテナが使用されることがある。ＤＩコンテナとは、コンポーネント（クラス）間の依存性をソースコード内部から排除し、外部の設定ファイルによって注入するプログラムである（例えば、特許文献４参照）。例えば、あるクラスＡが他のクラスＢを利用する場合、Ａのソースコード内部ではＢそのものではなく、Ｂを抽象化したインタフェースＩを利用することを定義しておく。そして、外部の設定ファイルにて、Ａが、Ｉを実装したクラスとしてＢを利用するように設定する。ＤＩコンテナは、この設定ファイルを参照してＡにＢを利用させる。ＤＩコンテナの代表例としては、Ｓｐｒｉｎｇ・Ｆｒａｍｅｗｏｒｋがある（例えば、非特許文献１参照）。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２００６−２６８１２４号公報
【特許文献２】特開２００４−３１０２７９号公報
【特許文献３】特開平１１−１０２２９３号公報
【特許文献４】特開２００６−２９３７４０号公報
【非特許文献】
【０００５】
【非特許文献１】ＳｐｒｉｎｇＳｏｕｒｃｅ.ｏｒｇ（インターネットＵＲＬ：ｈｔｔｐ：／／ｗｗｗ．ｓｐｒｉｎｇｓｏｕｒｃｅ．ｏｒｇ／）
【発明の概要】
【発明が解決しようとする課題】
【０００６】
従来技術では、依存性の注入を行うためにＤＩコンテナにより参照される設定ファイルの自動生成ができないという課題があった。
【０００７】
本発明は、例えば、依存性の注入を行うためにＤＩコンテナにより参照される設定ファイルの自動生成を行うことを目的とする。
【課題を解決するための手段】
【０００８】
本発明の一の態様に係る開発支援装置は、
複数のコンポーネントからなるプログラムの開発を支援する開発支援装置であり、
前記複数のコンポーネントのうち、他のコンポーネントを呼び出すコンポーネントを呼び出し元コンポーネントとして定義するコンポーネント定義情報と、呼び出し元コンポーネントと呼び出し元コンポーネントによって呼び出される呼び出し先コンポーネントとの間の関係を定義する関係定義情報とを予め記憶装置に記憶する定義情報記憶部と、
前記定義情報記憶部により記憶されたコンポーネント定義情報で定義された呼び出し元コンポーネントのソースコードであって、呼び出し先コンポーネントを特定するコードを含まないソースコードを処理装置により生成するソースコード生成部と、
前記ソースコード生成部により生成された呼び出し元コンポーネントのソースコードをコンパイルしたプログラムの実行時に動作するＤＩ（Ｄｅｐｅｎｄｅｎｃｙ・Ｉｎｊｅｃｔｉｏｎ）コンテナによって参照される設定ファイルであって、前記ＤＩコンテナによって当該呼び出し元コンポーネントに与えられる呼び出し先コンポーネントを設定する設定ファイルを、前記定義情報記憶部により記憶された関係定義情報に基づいて処理装置により生成する設定ファイル生成部とを備えることを特徴とする。
【発明の効果】
【０００９】
本発明の一の態様によれば、開発支援装置の設定ファイル生成部が、ＤＩコンテナによって参照される設定ファイルであって、ＤＩコンテナによって呼び出し元コンポーネントに与えられる呼び出し先コンポーネントを設定する設定ファイルを、呼び出し元コンポーネントと呼び出し先コンポーネントとの間の関係を定義する関係定義情報に基づいて生成することにより、例えば、開発者が設定ファイルを記述する場合と比較して、間違いや表記のブレが混入する可能性を排除できるため、設定ファイルの信頼性が向上する。また、設定ファイルのフォーマットが統一されるため、設定ファイルの保守性が向上する。
【図面の簡単な説明】
【００１０】
【図１】実施の形態１に係るウェブアプリケーション開発支援装置の構成を示すブロック図である。
【図２】実施の形態１に係るウェブアプリケーション開発支援装置のハードウェア構成の一例を示す図である。
【図３】実施の形態１に係る設計モデルをＵＭＬのクラス図で表した例を示す図である。
【図４】実施の形態１に係るビジネスロジッククラス定義情報の内容の一例を示す図である。
【図５】実施の形態１に係るデータアクセスクラス定義情報の内容の一例を示す図である。
【図６】実施の形態１に係る関連定義情報の内容の一例を示す図である。
【図７】実施の形態１に係る設定ファイル生成部の処理手順を示すフローチャートである。
【図８】実施の形態１に係るインジェクション設定ファイルの内容の一例を示す図である。
【図９】実施の形態１に係るインジェクション設定ファイルの内容の一例を示す図である。
【発明を実施するための形態】
【００１１】
以下、本発明の実施の形態について、図を用いて説明する。
【００１２】
実施の形態１．
図１は、本実施の形態に係るウェブアプリケーション開発支援装置１００の構成を示すブロック図である。
【００１３】
図１において、ウェブアプリケーション開発支援装置１００は、複数のコンポーネントからなるプログラムの開発を支援する開発支援装置の一例である。ここで、コンポーネントとは、特定の機能をもつプログラムの部品のことをいう。コンポーネントは、他のコンポーネントを呼び出して当該他のコンポーネントの機能を利用することで自己のもつ機能を発揮する。本実施の形態では、コンポーネントの一例としてオブジェクト指向プログラミングにおけるクラスを用いるものとするが、他の種類のコンポーネントを用いることも可能である。また、本実施の形態では、プログラムの一例としてウェブアプリケーションを対象としているが、他の種類のプログラムにも適用可能である。
【００１４】
ウェブアプリケーション開発支援装置１００は、定義情報記憶部１０１、定義情報入力部１０２、ソースコード生成部１０３、設定ファイル生成部１０４を備える。また、ウェブアプリケーション開発支援装置１００は、処理装置１５１、記憶装置１５２、入力装置１５３、出力装置１５４等のハードウェアを備える。ハードウェアはウェブアプリケーション開発支援装置１００の各部によって利用される。例えば、処理装置１５１は、ウェブアプリケーション開発支援装置１００の各部でデータや情報の演算、加工、読み取り、書き込み等を行うために利用される。記憶装置１５２は、そのデータや情報を記憶するために利用される。また、入力装置１５３は、そのデータや情報を入力するために、出力装置１５４は、そのデータや情報を出力するために利用される。
【００１５】
定義情報記憶部１０１は、ウェブアプリケーションの設計モデル１１０を記憶装置１５２に記憶する。
【００１６】
設計モデル１１０は、ビジネスロジッククラス定義情報１１１（コンポーネント定義情報の一例）、データアクセスクラス定義情報１１２等のクラス定義情報、及び、クラス間の関連定義情報１１３（関係定義情報の一例）によって構成される。
【００１７】
ビジネスロジッククラス定義情報１１１、データアクセスクラス定義情報１１２等のクラス定義情報には、各クラスのソースコードの雛形を生成するために必要な情報が含まれる。クラス定義情報は、例えばＵＭＬ（Ｕｎｉｆｉｅｄ・Ｍｏｄｅｌｉｎｇ・Ｌａｎｇｕａｇｅ）のクラス図で記述されており、パッケージ名、クラス名、ステレオタイプ、属性情報、操作情報、クラス間の関連、クラスの継承・インタフェースの実装等を含む。例えば、ビジネスロジッククラス定義情報１１１には、データを用いて所定の処理（ビジネスロジック）を実行するビジネスロジッククラスのソースコードの雛形を生成するために必要な情報が含まれる。また、データアクセスクラス定義情報１１２には、対応するビジネスロジッククラスにより用いられるデータの読み書きを実行するデータアクセスクラス（ＤＡＯ：Ｄａｔａ・Ａｃｃｅｓｓ・Ｏｂｊｅｃｔ）のソースコードの雛形を生成するために必要な情報が含まれる。本実施の形態において、ウェブアプリケーションを構成する複数のクラスのうち、ビジネスロジッククラスは、他のクラスを呼び出すクラスである呼び出し元クラス（呼び出し元コンポーネントの一例）であり、データアクセスクラスは、呼び出し元クラスであるビジネスロジッククラスによって呼び出される呼び出し先クラス（呼び出し先コンポーネントの一例）である。
【００１８】
関連定義情報１１３には、呼び出し元クラスと呼び出し先クラスとの間の関連（関係の一例）を特定するために必要な情報が含まれる。クラス間の関連とは、例えばソースコードにおいて一方のクラスから他方のクラスのメソッドを呼び出すことを意味する。
【００１９】
定義情報入力部１０２は、定義情報記憶部１０１により記憶される設計モデル１１０を、ＵＭＬのクラス図として入力装置１５３により入力する。例えば、定義情報入力部１０２は、入力装置１５３を介してウェブアプリケーションの開発者であるユーザからＵＭＬのクラス図の入力を受け付ける。
【００２０】
ソースコード生成部１０３及び設定ファイル生成部１０４は、自動生成装置１２０を構成する。
【００２１】
ソースコード生成部１０３は、定義情報記憶部１０１により記憶されたビジネスロジッククラス定義情報１１１やデータアクセスクラス定義情報１１２からソースコードの雛形を生成するために必要な情報を読み取り、ビジネスロジッククラスプログラム１２１やデータアクセスクラスプログラム１２２を生成する。ビジネスロジッククラスプログラム１２１は、ビジネスロジッククラスのソースコードの雛形である。データアクセスクラスプログラム１２２は、データアクセスクラスのソースコードの雛形である。
【００２２】
具体的には、ソースコード生成部１０３は、定義情報記憶部１０１により記憶されたビジネスロジッククラス定義情報１１１を記憶装置１５２から読み取り、読み取ったビジネスロジッククラス定義情報１１１で定義されたビジネスロジッククラスのソースコードを処理装置１５１により自動的に生成する。このソースコードは、呼び出し先クラスを特定するコードを含まないものとする。即ち、このソースコードには、当該ビジネスロジッククラスに対応するデータアクセスクラスのメソッドを呼び出すコードが含まれず、その代わりに、例えば、当該データアクセスクラスを抽象化したインタフェースのメソッドを呼び出すコード等が含まれる。これにより、ビジネスロジッククラスのソースコードから依存性が排除される。ソースコード生成部１０３は、このソースコードをビジネスロジッククラスプログラム１２１として記憶装置１５２に記憶する。
【００２３】
ソースコード生成部１０３は、定義情報記憶部１０１により記憶された他のクラス定義情報も記憶装置１５２から読み取る。そして、ソースコード生成部１０３は、読み取ったクラス定義情報で定義されたクラスのソースコードを処理装置１５１により自動的に生成する。例えば、ソースコード生成部１０３は、定義情報記憶部１０１により記憶されたデータアクセスクラス定義情報１１２で定義されたデータアクセスクラスのソースコードを処理装置１５１により生成する。そして、ソースコード生成部１０３は、このソースコードをデータアクセスクラスプログラム１２２として記憶装置１５２に記憶する。
【００２４】
設定ファイル生成部１０４は、定義情報記憶部１０１により記憶された関連定義情報１１３に基づいてインジェクション設定ファイル１２３を処理装置１５１により自動的に生成する。インジェクション設定ファイル１２３は、ＤＩ（Ｄｅｐｅｎｄｅｎｃｙ・Ｉｎｊｅｃｔｉｏｎ）コンテナによって参照される設定ファイルの一例である。ここで、ＤＩコンテナは、クラス間の依存性をソースコード内部から排除し、インジェクション設定ファイル１２３によって注入するプログラムである。本実施の形態において、ＤＩコンテナは、ソースコード生成部１０３により生成されたビジネスロジッククラスのソースコードをコンパイルしたプログラムの実行時、即ち、ビジネスロジッククラスプログラム１２１の実行時に動作し、当該ビジネスロジッククラスに対してインジェクション設定ファイル１２３で設定されたデータアクセスクラスを与える。つまり、ＤＩコンテナは、ビジネスロジッククラスに対して、どのデータアクセスクラスのメソッドを呼び出すのかを通知する。そのため、インジェクション設定ファイル１２３には、どのビジネスロジッククラスから、どのデータアクセスクラスを呼び出すのかが記述される。ＤＩコンテナとしてＳｐｒｉｎｇ・Ｆｒａｍｅｗｏｒｋを採用した場合、ＸＭＬ（ｅＸｔｅｎｓｉｂｌｅ・Ｍａｒｋｕｐ・Ｌａｎｇｕａｇｅ）で記述されるＢｅａｎ定義ファイルがインジェクション設定ファイル１２３となる。
【００２５】
図２は、ウェブアプリケーション開発支援装置１００のハードウェア構成の一例を示す図である。
【００２６】
図２において、ウェブアプリケーション開発支援装置１００は、コンピュータであり、ＬＣＤ９０１（Ｌｉｑｕｉｄ・Ｃｒｙｓｔａｌ・Ｄｉｓｐｌａｙ）、キーボード９０２（Ｋ／Ｂ）、マウス９０３、ＦＤＤ９０４（Ｆｌｅｘｉｂｌｅ・Ｄｉｓｋ・Ｄｒｉｖｅ）、ＣＤＤ９０５（Ｃｏｍｐａｃｔ・Ｄｉｓｃ・Ｄｒｉｖｅ）、プリンタ９０６といったハードウェアデバイスを備えている。これらのハードウェアデバイスはケーブルや信号線で接続されている。ＬＣＤ９０１の代わりに、ＣＲＴ（Ｃａｔｈｏｄｅ・Ｒａｙ・Ｔｕｂｅ）、あるいは、その他の表示装置が用いられてもよい。マウス９０３の代わりに、タッチパネル、タッチパッド、トラックボール、ペンタブレット、あるいは、その他のポインティングデバイスが用いられてもよい。
【００２７】
ウェブアプリケーション開発支援装置１００は、プログラムを実行するＣＰＵ９１１（Ｃｅｎｔｒａｌ・Ｐｒｏｃｅｓｓｉｎｇ・Ｕｎｉｔ）を備えている。ＣＰＵ９１１は、処理装置１５１の一例である。ＣＰＵ９１１は、バス９１２を介してＲＯＭ９１３（Ｒｅａｄ・Ｏｎｌｙ・Ｍｅｍｏｒｙ）、ＲＡＭ９１４（Ｒａｎｄｏｍ・Ａｃｃｅｓｓ・Ｍｅｍｏｒｙ）、通信ボード９１５、ＬＣＤ９０１、キーボード９０２、マウス９０３、ＦＤＤ９０４、ＣＤＤ９０５、プリンタ９０６、ＨＤＤ９２０（Ｈａｒｄ・Ｄｉｓｋ・Ｄｒｉｖｅ）と接続され、これらのハードウェアデバイスを制御する。ＨＤＤ９２０の代わりに、フラッシュメモリ、光ディスク装置、メモリカードリーダライタ又はその他の記憶媒体が用いられてもよい。
【００２８】
ＲＡＭ９１４は、揮発性メモリの一例である。ＲＯＭ９１３、ＦＤＤ９０４、ＣＤＤ９０５、ＨＤＤ９２０は、不揮発性メモリの一例である。これらは、記憶装置１５２の一例である。通信ボード９１５、キーボード９０２、マウス９０３、ＦＤＤ９０４、ＣＤＤ９０５は、入力装置１５３の一例である。また、通信ボード９１５、ＬＣＤ９０１、プリンタ９０６は、出力装置１５４の一例である。
【００２９】
通信ボード９１５は、ＬＡＮ（Ｌｏｃａｌ・Ａｒｅａ・Ｎｅｔｗｏｒｋ）等に接続されている。通信ボード９１５は、ＬＡＮに限らず、ＩＰ−ＶＰＮ（Ｉｎｔｅｒｎｅｔ・Ｐｒｏｔｏｃｏｌ・Ｖｉｒｔｕａｌ・Ｐｒｉｖａｔｅ・Ｎｅｔｗｏｒｋ）、広域ＬＡＮ、ＡＴＭ（Ａｓｙｎｃｈｒｏｎｏｕｓ・Ｔｒａｎｓｆｅｒ・Ｍｏｄｅ）ネットワークといったＷＡＮ（Ｗｉｄｅ・Ａｒｅａ・Ｎｅｔｗｏｒｋ）、あるいは、インターネットに接続されていても構わない。ＬＡＮ、ＷＡＮ、インターネットは、ネットワークの一例である。
【００３０】
ＨＤＤ９２０には、オペレーティングシステム９２１（ＯＳ）、ウィンドウシステム９２２、プログラム群９２３、ファイル群９２４が記憶されている。プログラム群９２３のプログラムは、ＣＰＵ９１１、オペレーティングシステム９２１、ウィンドウシステム９２２により実行される。プログラム群９２３には、本実施の形態の説明において「〜部」として説明する機能を実行するプログラムが含まれている。プログラムは、ＣＰＵ９１１により読み出され実行される。ファイル群９２４には、本実施の形態の説明において、「〜データ」、「〜情報」、「〜ＩＤ（識別子）」、「〜フラグ」、「〜結果」として説明するデータや情報や信号値や変数値やパラメータが、「〜ファイル」や「〜データベース」や「〜テーブル」の各項目として含まれている。「〜ファイル」や「〜データベース」や「〜テーブル」は、ＲＡＭ９１４やＨＤＤ９２０等の記憶媒体に記憶される。ＲＡＭ９１４やＨＤＤ９２０等の記憶媒体に記憶されたデータや情報や信号値や変数値やパラメータは、読み書き回路を介してＣＰＵ９１１によりメインメモリやキャッシュメモリに読み出され、抽出、検索、参照、比較、演算、計算、制御、出力、印刷、表示といったＣＰＵ９１１の処理（動作）に用いられる。抽出、検索、参照、比較、演算、計算、制御、出力、印刷、表示といったＣＰＵ９１１の処理中、データや情報や信号値や変数値やパラメータは、メインメモリやキャッシュメモリやバッファメモリに一時的に記憶される。
【００３１】
本実施の形態の説明において用いるブロック図やフローチャートの矢印の部分は主としてデータや信号の入出力を示す。データや信号は、ＲＡＭ９１４等のメモリ、ＦＤＤ９０４のフレキシブルディスク（ＦＤ）、ＣＤＤ９０５のコンパクトディスク（ＣＤ）、ＨＤＤ９２０の磁気ディスク、光ディスク、ＤＶＤ（Ｄｉｇｉｔａｌ・Ｖｅｒｓａｔｉｌｅ・Ｄｉｓｃ）、あるいは、その他の記録媒体に記録される。また、データや信号は、バス９１２、信号線、ケーブル、あるいは、その他の伝送媒体により伝送される。
【００３２】
本実施の形態の説明において「〜部」として説明するものは、「〜回路」、「〜装置」、「〜機器」であってもよく、また、「〜ステップ」、「〜工程」、「〜手順」、「〜処理」であってもよい。即ち、「〜部」として説明するものは、ＲＯＭ９１３に記憶されたファームウェアで実現されていても構わない。あるいは、「〜部」として説明するものは、ソフトウェアのみ、あるいは、素子、デバイス、基板、配線といったハードウェアのみで実現されていても構わない。あるいは、「〜部」として説明するものは、ソフトウェアとハードウェアとの組み合わせ、あるいは、ソフトウェアとハードウェアとファームウェアとの組み合わせで実現されていても構わない。ファームウェアとソフトウェアは、プログラムとして、フレキシブルディスク、コンパクトディスク、磁気ディスク、光ディスク、ＤＶＤ等の記録媒体に記憶される。プログラムはＣＰＵ９１１により読み出され、ＣＰＵ９１１により実行される。即ち、プログラムは、本実施の形態の説明で述べる「〜部」としてコンピュータを機能させるものである。あるいは、プログラムは、本実施の形態の説明で述べる「〜部」の手順や方法をコンピュータに実行させるものである。
【００３３】
図３は、設計モデル１１０をＵＭＬのクラス図で表した例を示す図である。
【００３４】
図３の例において、設計モデル１１０には、前述したように、ビジネスロジッククラス定義情報１１１、データアクセスクラス定義情報１１２、その他のクラス定義情報、クラス間の関連定義情報１１３が含まれる。
【００３５】
本例のクラス図では、ビジネスロジッククラスが１つ（ＯｒｄｅｒＬｏｇｉｃクラス）定義されている。ビジネスロジッククラス定義情報１１１であるＯｒｄｅｒＬｏｇｉｃクラスの定義情報の内容を図４に示す。ＯｒｄｅｒＬｏｇｉｃクラスは、各種データを用いて商品の注文に係る処理（ビジネスロジック）を実行するクラスであり、ｏｒｄｅｒ、ｇｅｔＳｔｏｃｋ、ｐｒｏｃＯｒｄｅｒｌｉｎｅ、ｒｅｇｉｓｔＯｒｄｅｒｌｉｎｅ、ｕｐｄａｔｅＳｔｏｃｋ、ｕｐｄａｔｅＩｔｅｍｋｅｅｐの６つのメソッド（操作）を有する。各メソッドは、必要に応じてデータクラスのメソッドを呼び出してデータの参照及び操作を行うものである。
【００３６】
また、本例のクラス図では、データアクセスクラスが５つ（ＳｔｏｃｋｓＤａｏクラス、ＩｔｅｍｋｅｅｐＤａｏクラス、ＳｈｉｐｐｉｎｇＤａｏクラス、ＯｒｄｅｒｓＤａｏクラス、ＯｒｄｅｒｌｉｎｅｓＤａｏクラス）定義されている。データアクセスクラス定義情報１１２であるＳｔｏｃｋｓＤａｏクラスの定義情報の内容を図５に示す。ＳｔｏｃｋｓＤａｏクラスは、在庫データの読み書きを実行するクラスであり、ｆｉｎｄ、ｍｅｒｇｅの２つのメソッド（操作）を有する。
【００３７】
また、本例のクラス図では、ビジネスロジッククラスからデータアクセスクラスへの関連が５つ定義されている。それぞれの関連における関連元ビジネスロジッククラス及び関連先データアクセスクラスを定義する関連定義情報１１３の内容を図６に示す。本例では、ビジネスロジッククラスであるＯｒｄｅｒＬｏｇｉｃクラスは、５つのデータアクセスクラスのそれぞれを少なくとも１つのメソッド内で呼び出すような設定がなされている。
【００３８】
以下、設定ファイル生成部１０４の動作について説明する。以下の説明では、インジェクション設定ファイル１２３がＳｐｒｉｎｇ・ＦｒａｍｅｗｏｒｋのＢｅａｎ定義ファイルであるものとする。なお、本実施の形態においてインジェクション設定ファイル１２３を他の種類の設定ファイルとしても構わない。
【００３９】
図７は、設定ファイル生成部１０４の処理手順を示すフローチャートである。
【００４０】
図７のステップＳ１０１において、設定ファイル生成部１０４は、設計モデル１１０のもつ全てのクラスの中から、クラスを１つ取得する。既に全てのクラスを取得済であれば、処理を終了する。ステップＳ１０２において、設定ファイル生成部１０４は、ステップＳ１０１で取得したクラスのもつ全ての関連の中から、関連を１つ取得する。既に全ての関連を取得済であれば、ステップＳ１０１へ戻って別のクラスを取得する。ステップＳ１０３において、設定ファイル生成部１０４は、ステップＳ１０２で取得した関連における関連元のクラスがビジネスロジッククラスであり、かつ、関連先のクラスがデータアクセスクラスであるかどうかを処理装置１５１により判定する。このとき、設定ファイル生成部１０４は、設計モデル１１０がＵＭＬのクラス図で記述されている場合、クラスに付加されたステレオタイプの情報を利用することでビジネスロジッククラスかデータアクセスクラスかの判定を行う。ステップＳ１０２で取得した関連がビジネスロジッククラスからデータアクセスクラスへの関連でなければ、ステップＳ１０２へ戻って別の関連を取得する。一方、ビジネスロジッククラスからデータアクセスクラスへの関連であれば、ステップＳ１０４へ進む。
【００４１】
ステップＳ１０４において、設定ファイル生成部１０４は、ステップＳ１０２で取得した関連からビジネスロジッククラスを特定し、そのビジネスロジッククラスのパッケージ名、クラス名を取得する。そして、これらを利用してインジェクション設定ファイル１２３へ出力するｂｅａｎタグのｉｄ属性、ｃｌａｓｓ属性、即ち、ビジネスロジッククラスのｂｅａｎ定義を処理装置１５１により生成する。ステップＳ１０５において、設定ファイル生成部１０４は、ステップＳ１０２で取得した関連からデータアクセスクラスを特定し、そのデータアクセスクラスのパッケージ名、クラス名を取得する。そして、これらを利用してインジェクション設定ファイル１２３へ出力するｂｅａｎタグのｉｄ属性、ｃｌａｓｓ属性、即ち、データアクセスクラスのｂｅａｎ定義を処理装置１５１により生成する。ステップＳ１０６において、設定ファイル生成部１０４は、さらに、データアクセスクラスのクラス名を利用してインジェクション設定ファイル１２３へ出力するｐｒｏｐｅｒｔｙタグのｎａｍｅ属性、ｒｅｆ属性、即ち、ビジネスロジッククラスからの参照先定義を処理装置１５１により生成する。
【００４２】
このように、設定ファイル生成部１０４は、ビジネスロジッククラスとデータアクセスクラスの間に存在するクラス間関連を取得する。設定ファイル生成部１０４は、取得したクラス間関連から両クラスのパッケージ名、クラス名を取得する。設定ファイル生成部１０４は、これらを利用してインジェクション設定ファイル１２３へ出力するｂｅａｎタグのｉｄ属性、ｃｌａｓｓ属性を生成する。また、設定ファイル生成部１０４は、取得したクラス間関連から関連端名を取得し、ｐｒｏｐｅｒｔｙタグのｎａｍｅ属性、ｒｅｆ属性を生成する。これらを生成した後、設定ファイル生成部１０４は、ｂｅａｎタグとｐｒｏｐｅｒｔｙタグを組み合わせ、インジェクション設定ファイル１２３として出力する。
【００４３】
図８は、インジェクション設定ファイル１２３の内容の一例を示す図である。図９は、図８のインジェクション設定ファイル１２３の内容をまとめたものである。
【００４４】
図８の例は、図３の例において生成されるインジェクション設定ファイル１２３をＳｐｒｉｎｇ・ＦｒａｍｅｗｏｒｋのＢｅａｎ定義ファイルで表したものである。前述したように、インジェクション設定ファイル１２３には、どのビジネスロジック層のクラスから、どのデータアクセス層のクラスを呼び出すのかを記述する。タグと属性がもつ意味を以下に示す。
（１）ｂｅａｎタグ：１つのクラスを１つのｂｅａｎとして定義する。
・ｉｄ：Ｂｅａｎ定義ファイル内で一意な名称を付ける。
・ｃｌａｓｓ：実体となるクラス名を完全修飾名で記述する。
（２）ｐｒｏｐｅｒｔｙタグ：クラスがもつ属性の情報を定義する。
・ｎａｍｅ：属性の名前である。
・ｒｅｆ：どのｂｅａｎを参照するか定義する。本実施の形態では、どのデータアクセスクラスを利用するか定義する。
【００４５】
本例のインジェクション設定ファイル１２３には、呼び出し元クラスの設定２０１として、ビジネスロジッククラスのｂｅａｎ定義が１つ（ＯｒｄｅｒＬｏｇｉｃクラスのｂｅａｎ定義）含まれる。呼び出し元クラスの設定２０１であるＯｒｄｅｒＬｏｇｉｃクラスのｂｅａｎ定義の内容を図９（ａ）に示す。この呼び出し元クラスの設定２０１は、図３のビジネスロジッククラス定義情報１１１であるＯｒｄｅｒＬｏｇｉｃクラスの定義情報に対応している。例えば、ｂｅａｎタグのｉｄ属性には、クラス名の先頭１文字を小文字にした文字列を、ｃｌａｓｓ属性には、パッケージ名とクラス名を「．」でつないだ文字列を指定する。ｂｅａｎタグに囲まれるｐｒｏｐｅｒｔｙタグについては後述する。
【００４６】
また、本例のインジェクション設定ファイル１２３には、呼び出し先クラスの設定２０２として、データアクセスクラスのｂｅａｎ定義が５つ（ＳｔｏｃｋｓＤａｏクラスのｂｅａｎ定義等）含まれる。呼び出し先クラスの設定２０２の例としてＳｔｏｃｋｓＤａｏクラスのｂｅａｎ定義の内容を図９（ｂ）に示す。この呼び出し先クラスの設定２０２は、図３のデータアクセスクラス定義情報１１２であるＳｔｏｃｋｓＤａｏクラスの定義情報に対応している。例えば、ｂｅａｎタグのｉｄ属性には、クラス名の先頭１文字を小文字にした文字列を、ｃｌａｓｓ属性には、パッケージ名とクラス名を「．」でつないだ文字列を指定する。
【００４７】
また、本例のインジェクション設定ファイル１２３では、呼び出し関係の設定２０３として、ビジネスロジッククラスからデータアクセスクラスへの関連が定義される。ビジネスロジッククラスであるＯｒｄｅｒＬｏｇｉｃクラスは５つのデータアクセスクラスへの関連をもっている。呼び出し関係の設定２０３の内容を図９（ｃ）に示す。この呼び出し関係の設定２０３は、図３の関連定義情報１１３に対応している。例えば、ＯｒｄｅｒＬｏｇｉｃクラスのｐｒｏｐｅｒｔｙタグのｎａｍｅ属性には、関連端名もしくはクラス名の先頭１文字を小文字にした文字列を、ｒｅｆ属性には、クラス名の先頭１文字を小文字にした文字列を指定する。
【００４８】
以上説明したように、本実施の形態に係るウェブアプリケーション開発支援装置１００は、ビジネスロジッククラス定義情報１１１とデータアクセスクラス定義情報１１２とクラス間の関連定義情報１１３から、呼び出し元のビジネスロジッククラスの情報と呼び出し先のデータアクセスクラスの情報を読み取り、インジェクション設定ファイル１２３を自動生成することを特徴とする。
【００４９】
このウェブアプリケーション開発支援装置１００は、
ビジネスロジッククラスの設計情報を定義するためのビジネスロジッククラス定義情報１１１と、
データアクセスクラスの設計情報を定義するためのデータアクセスクラス定義情報１１２と、
ビジネスロジッククラスとデータアクセスクラスの関連を定義するための関連定義情報１１３と、
ビジネスロジッククラスとデータアクセスクラスの雛形を自動生成するソースコード生成部１０３と、
ビジネスロジッククラスからデータアクセスクラスを呼び出すためのインジェクション設定ファイル１２３を自動生成する設定ファイル生成部１０４とを有することを特徴とする。
【００５０】
また、このウェブアプリケーション開発支援装置１００は、設定ファイル生成部１０４に関して、入力とする設計モデル１１０中のクラス定義情報の中からビジネスロジッククラスとデータアクセスクラスの定義情報を選択できることを特徴とする。
【００５１】
上記のように、本実施の形態では、ウェブアプリケーション開発支援装置１００のソースコード生成部１０３が、データアクセスクラスを呼び出すビジネスロジッククラスのソースコードを生成する。このソースコードは、呼び出し先のデータアクセスクラスを特定するコードを含まない。即ち、依存性が排除されている。ウェブアプリケーション開発支援装置１００の設定ファイル生成部１０４は、クラス間の関連を定義する関連定義情報１１３に基づいてインジェクション設定ファイル１２３を生成する。インジェクション設定ファイル１２３には、どのビジネスロジッククラスから、どのデータアクセスクラスを呼び出すのかが記述される。ビジネスロジッククラスのプログラム実行時には、ＤＩコンテナによってインジェクション設定ファイル１２３が参照され、ビジネスロジッククラスに対しデータアクセスクラスが与えられる。即ち、依存性が注入される。本実施の形態によれば、設定ファイル生成部１０４が、インジェクション設定ファイル１２３を、ビジネスロジッククラスとデータアクセスクラスとの間の関連を定義する関連定義情報１１３に基づいて生成するため、例えば、開発者がインジェクション設定ファイル１２３を記述する場合と比較して、間違いや表記のブレが混入する可能性を排除できるため、インジェクション設定ファイル１２３の信頼性が向上する。また、インジェクション設定ファイル１２３のフォーマットが統一されるため、インジェクション設定ファイル１２３の保守性が向上する。
【符号の説明】
【００５２】
１００  ウェブアプリケーション開発支援装置、１０１  定義情報記憶部、１０２  定義情報入力部、１０３  ソースコード生成部、１０４  設定ファイル生成部、１１０  設計モデル、１１１  ビジネスロジッククラス定義情報、１１２  データアクセスクラス定義情報、１１３  関連定義情報、１２０  自動生成装置、１２１  ビジネスロジッククラスプログラム、１２２  データアクセスクラスプログラム、１２３  インジェクション設定ファイル、１５１  処理装置、１５２  記憶装置、１５３  入力装置、１５４  出力装置、２０１  呼び出し元クラスの設定、２０２  呼び出し先クラスの設定、２０３  呼び出し関係の設定、９０１  ＬＣＤ、９０２  キーボード、９０３  マウス、９０４  ＦＤＤ、９０５  ＣＤＤ、９０６  プリンタ、９１１  ＣＰＵ、９１２  バス、９１３  ＲＯＭ、９１４  ＲＡＭ、９１５  通信ボード、９２０  ＨＤＤ、９２１  オペレーティングシステム、９２２  ウィンドウシステム、９２３  プログラム群、９２４  ファイル群。
【図１】
2011022906.tif 000003
【図２】
2011022906.tif 000004
【図３】
2011022906.tif 000005
【図４】
2011022906.tif 000006
【図５】
2011022906.tif 000007
【図６】
2011022906.tif 000008
【図７】
2011022906.tif 000009
【図８】
2011022906.tif 000010
【図９】
2011022906.tif 000011