説明

ソースコード生成方法及び装置並びにプログラム

【課題】 生成されたソースコードを利用する機器側での機能の追加または変更要請に対して、新規のスクリプトをその都度作成することなく必要なソースコードを効率良く生成し、スクリプトの開発コストを低減させること。
【解決手段】 ソースコードを生成するための複数のスクリプトをスクリプトファイルから読込む第1のステップと、読み込んだ複数のスクリプトを実行し、それぞれのスクリプトに対応したソースコードを生成する第2のステップと、生成された各ソースコードを解析する第3のステップと、解析済みの各ソースコードの重複部分を共通化して結合し、結合済みのソースコードを出力する第4のステップとを備えることを特徴とする。

【発明の詳細な説明】
【技術分野】
【0001】
本発明は、例えば携帯電話機等に実装するプログラムのソースコードを効率的に生成するのに用いて好適なソースコード生成方法及び装置、並びにソースコード生成プログラムに関するものである。
【背景技術】
【0002】
従来において、スクリプトまたはテンプレートと呼ばれる原型をユーザが予め定義しておき、これをソースコード生成システムが読み込んだ上でスクリプト中の定められた領域や特定の置換文字列をソースコード生成システムの管理するパラメータに置換することで、ソースコード生成システムが標準で対応していない形式のソースコードを出力することを可能としたソースコード生成システムがある。
このシステムにおいては、例えば、データベースを制御するサブルーチンのソースコードを生成する場合、ソースコード生成システムが未対応の型を持つデータベース項目を制御するソースコードを出力する際に、スクリプト中の型を指定する箇所や判定処理を記述する箇所に、置換の目印となるマクロ文字列を記述しておき、このマクロ文字列をユーザが予め定義した型名および判定用ソースコード部品に置換することにより、ソースコード生成システムが未対応の型を持つデータベース項目を制御するソースコードを出力することができる。
また、テンプレートとプログラム設計情報を組み合わせてソースコードを出力するようにした、下記の特許文献1に開示されたソースコード生成システムがある。
【特許文献1】特開2004−362442号公報
【発明の開示】
【発明が解決しようとする課題】
【0003】
スクリプトまたはテンプレートを利用してソースコードを出力する従来のソースコード生成システムでは、複数の型名および判定用ソースコード部品を予め定義しておくことにより、1つのスクリプトまたはテンプレートから異なるソースコードを生成することが可能になる。
しかしながら、スクリプトまたはテンプレート中のマクロ文字列をユーザ定義の型名および判定用ソースコード部品に置換するだけであるため、生成されたソースコードを利用する側で新規の機能を追加する必要が生じた場合には対応することができず、新規機能に対応したスクリプトまたはテンプレートを新規に作成することが必要となり、スクリプトまたはテンプレートの開発コストが嵩み、かつ効率が悪いという問題があった。
例えば、携帯電話機に実装するプログラムのソースコードを開発する場合、携帯電話機側で機能Aと機能Bとを組み合わせた新規機能を追加する必要が生じた場合、新規機能に対応したスクリプトまたはテンプレートを新規に作成することが必要になり、携帯電話機に実装するソースコードの開発コストが嵩むという問題があった。
この場合、インクルード(下位スクリプトの取り込み)によってスクリプトの一部分を流用して対応することが考えられるが、インクルードする側とされる側の双方のスクリプト作成時に、互いがどのようなソースコードを出力するか理解して出力内容を調整しておく必要があり、出力内容の調整が不十分な場合には出力ソースコードの重複や不整合が起こるという問題があった。
【0004】
本発明の目的は、生成されたソースコードを利用する機器側での機能の追加または変更要請に対して、新規のスクリプトをその都度作成することなく必要なソースコードを効率良く生成し、スクリプトの開発コストを低減させることができるソースコード生成方法及び装置並びにプログラムを提供することにある。
【課題を解決するための手段】
【0005】
上記目的を達成するために、本発明に係るソースコード生成方法は、ソースコードを生成するための複数のスクリプトをスクリプトファイルから読込む第1のステップと、読み込んだ複数のスクリプトを実行し、それぞれのスクリプトに対応したソースコードを生成する第2のステップと、生成された各ソースコードを解析する第3のステップと、解析済みの各ソースコードの重複部分を共通化して結合し、結合済みのソースコードを出力する第4のステップとを備えることを特徴とする。
また、前記第4のステップが、重複部分を共通化する前に、前記第3のステップで解析済みの各ソースコードの出力形式をユーザ定義の整形ルールに従い整形するステップを備えることを特徴とする。
また、前記第2のステップが、前記スクリプトファイルから読み込んだ複数のスクリプトに対応するソースコードを生成する前に、各スクリプトに対し、ソースコードとして出力する内容を変更するためのパラメータを設定するステップを備えることを特徴とする。
【0006】
本発明に係るソースコード生成装置は、ソースコードを生成するための複数のスクリプトをスクリプトファイルから読込む第1の手段と、読み込んだ複数のスクリプトを実行し、それぞれのスクリプトに対応したソースコードを生成する第2の手段と、生成された各ソースコードを解析する第3の手段と、解析済みの各ソースコードの重複部分を共通化して結合し、結合済みのソースコードを出力する第4の手段とを備えることを特徴とする。
また、前記第4の手段が、重複部分を共通化する前に、前記第3の手段で解析済みの各ソースコードの出力形式をユーザ定義の整形ルールに従い整形する手段を備えることを特徴とする。
また、前記第2の手段が、前記スクリプトファイルから読み込んだ複数のスクリプトに対応するソースコードを生成する前に、各スクリプトに対し、ソースコードとして出力する内容を変更するためのパラメータを設定する手段を備えることを特徴とする。
【0007】
本発明に係るソースコード生成プログラムは、ソースコードを生成するための複数のスクリプトをスクリプトファイルから読込む第1の手段と、読み込んだ複数のスクリプトを実行し、それぞれのスクリプトに対応したソースコードを生成する第2の手段と、生成された各ソースコードを解析する第3の手段と、解析済みの各ソースコードの重複部分を共通化して結合し、結合済みのソースコードを出力する第4の手段としてコンピュータを機能させるステップを備えることを特徴とする。
【発明の効果】
【0008】
本発明によれば、次のような効果がある。
(1)例えば機能Aのスクリプトと機能Bのスクリプトを読み込み、それぞれに対応したソースコードを生成し、それらのソースコードを解析して重複部分を共通化して結合して出力することにより、機能単位に分割して管理されている機能A、機能Bのスクリプトを組み合わせて新規の機能のソースコードを極めて容易に生成して出力することができる。
これにより、生成されたソースコードを利用する機器側での新規機能の追加または変更要請に対して、その都度、新規のスクリプトを作成する必要がなくなり、新規機能のソースコードを極めて容易に生成することが可能になり、スクリプトの再利用性が向上し、かつソースコードの開発、修正、保守に係るコストの低減を図ることが可能になる。
(2)スクリプトが出力するソースコードの出力形式をユーザ定義に従って整形することにより、1つのスクリプトを幅広く再利用し、出力形式の一部分だけが異なるスクリプトを多量に作成するという冗長な開発作業を削減することができる。
(3)ユーザが設定したパラメータをスクリプトに渡して、スクリプト側のロジックで必要なソースコードを出力することにより、1つのスクリプトを様々な対象ソースコードの出力に利用することが可能となる。例えば、携帯電話機の画面サイズのみが変更された場合には、新規の画面サイズに応じた表示部品のサイズをパラメータとしてスクリプトに設定することにより、新規の画面サイズに対応したスクリプトを新たに作成する必要がなくなり、効率的に画面サイズ等の変更に対応することが可能になる。
【発明を実施するための最良の形態】
【0009】
以下、本発明を適用したソースコード生成装置の一実施の形態について説明する。
図1は、本発明に係るソースコード生成装置の実施の形態を示すハードウェア構成図である。
この実施形態で示すソースコード生成装置は、コンピュータで構成される処理装置1、キーボード21及びマウス22で構成される入力装置2、表示装置3、スクリプト仕様定義ファイル4、スクリプトファイル5、パラメータファイル6、整形ルールファイル7、ソースコードファイル8で構成される。
処理装置1は、CPU11、メモリ12を備え、メモリ12にはOS(オペレーティングシステム)121、ソースコード生成プログラム121が記憶されている。
【0010】
図2は、ソースコード生成プログラム122の内部処理を機能的に示した機能構成図であり、スクリプト読込み処理1311、パラメータデータ作成処理1312、スクリプト実行処理1313、出力ソースコード解析処理1314、整形ルール読込み処理1315、ソースコード整形処理1316、ソースコード結合処理1317、ソースコード出力処理1318から構成され、複数のスクリプトファイル5と、パラメータファイル6からメモリ12上に展開された複数のパラメータデータ1321と、複数の整形ルールファイル7を入力とし、ソースコードファイル8中に新たに生成したソースコードを挿入出力するか、新規のソースコードを出力するように構成されている。
本実施形態のソースコード生成装置の動作中に生成されるデータのうち、メモリ12上に生成されるデータとしては、パラメータデータ1321、生成ソースコード1322、解析済み生成ソースコード1323、整形済み生成ソースコード1324、結合済み生成ソースコード1325がある。
【0011】
スクリプト仕様定義ファイル4には、本ソースコード生成装置で使用可能なスプリクト関数の仕様が記憶されている。
スクリプトファイル5には、ユーザが予め作成した特定の機能単位のスクリプトが格納されている。格納されたスクリプトは、スクリプト実行処理1313によって実行可能な状態に編集されている。スクリプトファイル5に格納されているスクリプトは、例えば図3に符号51a、51bで示すようなものである。
符号51a及び51bで示すスクリプトは、例えば携帯電話機の画面に表示させる部品(コンテンツ)の位置や形状、色を定めるためのソースコードを生成させるスクリプトであり、図中では部品の幅や高さなどの位置情報を取得して保存する記述部分を示している。ここで例示するスクリプトの違いは、位置情報の変数名としてa,bを用いているか、x,yを用いているかである。
【0012】
パラメータファイル6には、ソースコード生成処理を実行する前にユーザによってソースコード上に出力される数値、文字列、クラス名、記号定数名、また出力されるファイル名や出力の有効/無効など、ソースコード生成処理において使用する情報が予め設定されている。
このパラメータファイル6に格納されたパラメータデータは、ソースコード生成処理を実行する場合に、パラメータデータ作成処理1312によって読み込まれ、メモリ13内にパラメータデータ1321として展開される。
【0013】
図4に、パラメータファイル6に設定されたパラメータデータの一例を示している。
ここで例示するパラメータデータは、Object、height、width、tabs、その他の設定値といった項目で構成された複数行のデータで構成されている。
Object、height、width、tabsは、ソースコード生成対象のスクリプトで使用されている関数をObjectとして設定し、かつその関数で使用する設定値をheight、width、tabsとして設定したものである。
このパラメータデータとして、例えば画面サイズが異なる携帯電話機に用いるソースコードを生成する場合には、それぞれの画面サイズに対応したパラメータデータを設定することにより、同じスクリプトからそれぞれの画面サイズに対応したソースコードを生成することができる。また、画面サイズが変更された場合であっても、変更前の既存のスクリプト中に変更後の画面サイズをパラメータデータから取得して設定することにより、画面サイズ変更後の携帯電話機に使用可能なソースコードを生成することができる。
このパラメータファイル6に設定されたパラメータデータは、パラメータデータ作成処理1312によって読み込まれ、図5に示すような構成でメモリ12内に記憶される。
【0014】
整形ルールファイル7には、本ソースコード生成装置で使用する定義済み整形ルール、プログラム言語仕様に由来する整形ルール、ユーザ定義の生成ルール等が予め整形ルール読込み処理1315で利用可能な形式で格納されている。
整形ルールとは、本ソースコード生成装置で生成するソースコードを、例えば携帯電話機A、Bのそれぞれで使用するソースコードの言語仕様やインタフェースに適合するように整形するものであり、携帯電話機A,Bにそれぞれ対応してユーザによって設定される。
【0015】
この整形ルールファイル7に格納されている整形ルールの例を図6に示す。
ここで例示する整形ルールは、本ソースコード生成装置で使用する定義済み整形ルールの例を示すものであり、コメント形式はシングルラインコメント(”//”)のみとし、また1行当たりの命令数は1命令以下、引数なしのリターン文は削除する、いったルールである。
【0016】
本実施形態のソースコード生成装置においては、1つまたは複数のスクリプトを読み込み、そのスクリプト中にユーザ定義のパラメータデータを設定した後、そのスクリプトをOS121が内蔵するスクリプトエンジンで実行してソースコードを生成し、次にその生成したソースコードをトークン単位に分割して文法上の意味解析を行い、この解析済みソースコードをユーザ定義の整形ルールに従い、コメント形式や1行当たりの命令数を整形した後、その整形済みのソースコード1324を出力する。
この場合、複数のスクリプトを入力した場合には、それぞれのスクリプトに対応した整形済みのソースコードの重複部分を共通化して結合し、出力する。
生成ソースコード1322、解析済み生成ソースコード1323、整形済みソースコード1324および結合済み生成ソースコード1325は、1回のソースコード生成プロセス中に複数のデータが同時に処理される場合がある。本実施例では2件のスクリプトから2通りの生成ソースコード1322が得られて、これらが採取的に1件の結合済み生成ソースコード1325として出力されるケースでの処理を示すものである。
【0017】
以下、スクリプト読み込み処理などの各処理について、フローチャートを用いて詳細に説明する。
図7は、スクリプト読込み処理1311の処理手順を示すフローチャートである。
スクリプト読込み処理1311は、ソースコードの生成開始コマンドがキーボード21から入力されることによって起動される。
起動されると、スクリプト読込み処理1311は、例えば図3に例示した2つのスクリプトファイル51a,51bを1つずつ読込み、以下の処理を行う。
すなわち、読み込んだスクリプトファイルを開き(ステップ701)、スクリプトの文法チェックをOS121に実行させ、エラーの有無を判定させる(ステップ702)。そして、OS121からの文法エラーのチェック結果を得て、文法エラーの有無を判定する(ステップ703)。
【0018】
文法エラー有りであった場合、エラー通知を表示装置3に表示してユーザに通知する(ステップ707)。
文法エラー無しであった場合、スクリプト仕様定義ファイル4から本ソースコード生成装置の仕様に定めらたスプリクト関数の仕様を読込み(ステップ704)、スクリプト中に含まれる関数リストを作成する(ステップ705)。
次に、スクリプトに含まれる関数はスクリプト仕様定義ファイル4から読み込んだ仕様に適合しているかを判定し(ステップ706)、適合していない場合には、エラー通知を表示装置3に表示してユーザに通知する(ステップ707)。
仕様に適合している場合には、パラメータデータ作成処理1312に進む。
【0019】
図8は、パラメータデータ作成処理1312の処理手順を示すフローチャートである。
パラメータデータ作成処理1312では、ソースコード生成対象のスクリプトのパラメータデータをパラメータファイル6から取得する(ステップ801)。
次に、パラメータデータに含まれる設定値を、OS121のスクリプトエンジンが利用可能な形式に変換する(ステップ802)。
【0020】
次に、変換に成功したかを判定し(ステップ803)、成功しなかった場合には、エラー通知を表示装置3に表示してユーザに通知する(ステップ806)。
変換に成功した場合には、変換した値をメモリ12内に、図5で示すようなパラメータデータ1321として記憶させる(ステップ804)。
次に、全てのパラメータデータの変換を終了したかを判定し(ステップ805)、終了していたならば、スクリプト実行処理に進む。しかし、終了していない場合には、ステップ801に戻り、次のパラメータデータをパラメータファイル6から読み込んで同様の処理を繰り返す。
【0021】
図9は、スクリプト実行処理1313の処理手順を示すフローチャートである。
スクリプト実行処理1313では、メモリ12内に記憶させたパラメータデータ1321をOS121のスクリプトエンジンに設定し(ステップ901)、予め定められたスクリプト関数を実行させる(ステップ902)。予め定められたスクリプト関数とは、文法エラーチェック後のスクリプトに対し、パラメータデータ1321を設定した後、ソースコードに変換する関数のことである。
次に、スクリプトの実行に成功したかを判定し(ステップ903)、成功した場合にはスクリプトエンジンが出力した文字列を生成ソースコード1322として出力する(ステップ904)。成功しなかった場合には、エラーを示すコメントを追加した生成ソースコード1322を出力する。
次に、スクリプトファイル5から読み込んだ全てのスクリプトを実行したかを判定し(ステップ905)、実行していた場合には、出力ソースコード解析処理1314に進む。しかし、実行していない場合には、ステップ901に戻って同様の処理を繰り返す。
以上の処理により、図3(51a)に例示したスクリプトは図10(a)に示すようなソースコード1322aとして生成される。
【0022】
図11は、出力ソースコード解析処理1314の処理手順を示すフローチャートである。
この出力ソースコード解析処理1314では、生成ソースコード1322を取得し(ステップ1101)、生成ソースコードのプログラム言語文法に従いトークン単位に分割する(ステップ1102)。すなわち、図10(a)の生成ソースコード1322aについて、図10(b)に点線で囲むようなトークン単位に分割する。
次に、トークンの文法上の意味が、予約語か、括弧など構造記号か、演算子か、シンボルか、コメントかなどのどれに該当するかをプログラム言語文法に従いトークン単位に解析することにより、1つのスクリプトが出力するソースコードの内容を意味的、書式的、その他改行位置や空白文字などテキスト構造等に従って解釈する(ステップ1103)。
次に、トークンは有効なソースコード要素かを判定し(ステップ1104)、有効なソースコード要素でなければ、文法エラーがあることを表示装置3に表示してユーザに通知し(ステップ1106)、終了する。
なお、このトークンの意味解析及び有効なソースコード要素であるか否かを判定する処理は、公知の技術であるため、詳細にいついては省略する。
【0023】
次に、トークンの出力対象となるソースコード要素部分とトークン解析結果(位置、要素種別、設定値、演算対象など)を解析済み生成ソースコード1323としてメモリ12に登録する(ステップ1105)。
次に、トークンの全てのソースコード要素を分析したかを判定し(ステップ1107)、終了していなければステップ1103に戻り、同様の処理を行う。
すべてのソースコード要素の解析が終了していた場合には、すべての生成ソースコード1322を解析したかを判定し、終了していなければステップ1101に戻り、同様の処理を繰り返す。
終了していたならば、整形ルール読込み処理1315に進む。
以上の処理により、図3(51a)、(51b)のスクリプトは、図12(a),(c)に示すような解析済み生成ソースコード1323a,1323bとしてメモリ12に登録される。
【0024】
図13は、整形ルール読込み処理1315の処理手順を示すフローチャートである。
この整形ルール読込み処理1315では、図6に例示したような整形ルールを整形ルールファイル7から読込む(ステップ1301)。
整形ルールは、ソースコード言語の文法に由来するルール、開発プロジェクトの規則に由来するユーザ定義ルール、本ソースコード生成装置の仕様に由来するルールなど複数のパターンが利用できる。
ソースコード言語の文法に由来するルールとしては、対象がC言語の場合にはコメントを“/*”から“*/”で囲まれたコメントブロックに変換し、C++言語の場合は“//”のコメントブロックとして出力する、1行の命令文の数を指定する、関数末尾のreturn文は削除する、など様々な例がある。
【0025】
ユーザ定義ルールの例としては、ソースコード上のインデントやif節後の中括弧”{“の改行位置の整形、変数宣言時の初期化ルールに従いスクリプトが出力するコードがポインタ変数を初期化していない場合には自動的にNULLへの初期化コードを付加する等がある。
また、本ソースコード生成装置の仕様に由来するルールの例としては、インクルードファイルの宣言が出力された場合に、適切なフォルダ上のパスに変更する等の多種多様なルールがある。これらは例であり、本発明において実施できるルールがこれらに限定されないことは言うまでも無い。
【0026】
次に、整形ルールファイルの記述内容の1件を取得する(ステップ1302)。
例えば、図6の整形ルールのうち、コメント形式などの各ルールのうち1つを取得する。
次に、取得した有効な整形ルールかを判定し(ステップ1303)、有効な整形ルールでなければエラーメッセージを表示装置3に表示してユーザに通知し、終了する(ステップ1306)。
なお、有効かどうかはハードコーディングで規定された本システムの仕様によって判定される。
次に、整形ルールファイル7に記述された全てのルールを分析したかを判定し(ステップ1304)、解析終了していなければステップ1302に戻り同様の処理を繰り返す。
終了していたならば、ソースコード整形処理1316に進む。
【0027】
図14は、ソースコード整形処理1316の処理手順を示すフローチャートである。
ソースコード整形処理1316では、解析済み生成ソースコード1323を取得し(ステップ1401)、各トークンを対象とした整形ルールを有効性をチェック済みの全ての整形ルールから検索する(ステップ1402)。
次に、個々のトークンについて、解析済み生成ソースコード1323に適合する整形ルールは存在するかを判定し(ステップ1403)、存在した場合には、整形ルールに従って解析済み生成ソースコード1323中の該当するトークンを変更し、整形済み生成ソースコード1324として出力する(ステップ1404)。
しかし、適合する整形ルールが存在しない場合には、トークンを変更せず、整形済み生成ソースコード1324として出力する(ステップ1405)。
【0028】
次に、全てのトークンを整形したかを判定し(ステップ1406)、全てのトークンに対する処理が終了していなければステップ1402に戻って同様の処理を繰り返す。
しかし、全てのトークンに対する処理が終了したならば、解析済み生成ソースコード1323中の全ての要素を解析したかを判定し(ステップ1407)、終了していなければステップ1401に戻って同様の処理を繰り返す。
全てのトークンの整形が終了したならば、ソースコード結合処理1317に進む。
【0029】
ソースコード整形処理1316によって整形ルールファイル7の指定に従った整形が完了すると、整形済みソースコード1324が得られる。
この整形処理によって、図12(a),(c)に例示した解析済み生成ソースコード1323a,1323bは、図12(b)、(d)に示すような整形済み生成ソースコード1324a,1324bとなる。
なお、図12(a),(b)の点線で囲む文字列は個々のトークンである。
このうち、図12(a)のコメント形式を示すトークン“/*”が整形ルールによってシングルラインコメント”//”のみのトークンに整形され、また、引数なしのリターン文“return;”というトークンが削除されていることを例示している。
また、図12(b)の変数x、yに値を設定する文のトークンは1行に記述されているが、整形ルールによって、図12(d)のように、1行につき1命令の形式に整形されていることを例示している。
【0030】
図15は、ソースコード結合処理1317の処理手順を示すフローチャートである。
このソースコード結合処理1317では、複数のスクリプト51a,51bから生成した整形済み生成ソースコード1324a,1324b中に存在する同一の処理単位あるいは同一処理ブロックなどの重複部分を結合して出力する。
すなわち、整形済み生成ソースコード1324の1件、例えば図12(c)のように整形された整形済み生成ソースコード1324aを取得し(ステップ1501)、そのソースコード1324a中で、関数、構造体定義、インクルード処理、プリプロセッサ処理などのブロックを検索する(ステップ1502)。
そして、その検索したブロックに対し、結合済みマークは設定済みかを判定し(ステップ1503)、設定済みであれば、ステップ1509に進む。
【0031】
設定済みでなければ、対象ブロックと同一のブロックを他の整形済みソースコード1324bから検索する(ステップ1504)。
次に、同一のブロックが存在するかを判定し(ステップ1505)、存在した場合には、対象ブロックに、各ブロックの非重複部分を挿入して結合済みソースコード1325として出力する(ステップ1506)。
同一のブロックが存在しない場合には、対象ブロックを変更せず、結合済みソースコード1325として出力する(ステップ1507)。
次に、処理した各ブロックに“結合済み”マークを設定した後(ステップ1508)、処理中の整形済み生成ソースコード1324a内の全ブロックの処理を終了したかを判定し(ステップ1509)、終了していなければ、ステップ1504に戻って同様の処理を行う。
【0032】
終了していた場合には、整形済み生成ソースコード1324a,1324bの全てを分析したかを判定し(ステップ1510)、全ての分析を終了していなければ、ステップ1501に戻って同様の処理を繰り返す。
終了していた場合には、ソースコード出力処理1318に進む。
【0033】
この結合処理によって、図12(b),(d)で例示した整形済み生成ソースコード1324a,1324bは図16に例示するように、同一の処理を行っている部分コード1601,1602の重複部分が1つに結合されて共通化され、かつ非重複部分1603が挿入された結合済み生成ソースコード1325として出力される。
ここで、ステップ1504〜1506においては、次のようにして重複部分と非重複部分を調べて結合する。
【0034】
すなわち、整形済みソースコード1324aと1324bから同一の処理に関する部分コード1601,1602とを抽出した後に、両コードで重複する部分を判定する。何れかのコードを基準として、他方から非重腹部分を取得する。図16の例では、部分コード1601を基準として、部分コード1602から部分コード1601に含まれない部分である非重複部分1603を取得している。この比較は単純な文字列比較だけを根拠として限定せず、ソースコード解析装置による構造解析の結果を利用することが可能である。構造解析結果によって重複を判定することで、空白文字や改行などソースコード上は影響を与えない差異によって誤判定が生じる問題を避け、より正確な結合処理を行うことが可能となる。
但し、本発明では差分比較処理について前述の方式だけに規定するものではなく、その方式について制限はしていない。重複部分の判定が完了した後に、重複部分を除いて対象機能に関する部分コード1601と同一処理に関する部分コード1602を結合した対象機能に関する結合済み生成ソースコード1325を得る。
【0035】
ここで、結合対象の対象機能に関する部分コードが2つの場合について説明したが、同一処理に関する部分コードが3つ以上の場合でも、同様の処理を反復することで処理結果として結合済み生成ソースコードを得ることが可能である。
結合済み生成ソースコード1325は、ソースコード出力処理1318によって出力対象のソースコードファイル8に新規出力、または前回の生成プロセスで生成した出力ソースコードにマージする形式で出力される。
なお、ソースコードファイル8は、既存または新規の何れであっても処理が可能である。既存のソースコードファイルに出力する場合には、本ソースコード生成装置の対応する形式に沿ったコメント、関数名、行番号などの挿入位置の判定情報が予め設定されている。
【0036】
図17は、ソースコード出力処理1318の処理手順を示すフローチャートである。
ソースコード出力処理1318では、結合済み生成ソースコード1325を取得し(ステップ1701)、スプリクト仕様定義ファイル4によって予め定められたスクリプト関数を実行する(ステップ1702)。
次に、出力対象のソースコードファイルは既に存在するかを判定し(ステップ1703)、存在している場合には、そのソースコードファイルを取得し(ステップ1704)、ステップ1702の関数が出力した文字列を生成ソースコードに追加し(ステップ1705)、結合済み生成ソースコード1325の各ブロックを、既存のソースコードファイル中の適切な位置に挿入する(ステップ1706)。
そして、ソースコード出力処理の結果を表示装置3に表示してユーザに通知する(ステップ1708)。
既存のソースコードファイルがない場合には、新規にソースコードファイル8を作成し、その中に結合済み生成ソースコード1325の各ブロックを新規に格納する(ステップ1708)。
【0037】
図18及び図19は、携帯電話機に実装するソースコードを生成する場合のスクリプトの例を示すものである。
これは、図20のGUIによる画面デザインの結果から取得したパラメータデータに基づき、携帯電話機の画面を表示するプログラムのソースコードを生成するスクリプトを例示するものである。
本例では、図18のスクリプト例(1)1801および図19のスクリプト例(2)1901を適用してソースコードを出力するものとする。
スクリプト例(1)1801は、画面上の全部品の位置およびサイズを、パラメータファイル3にパラメータデータとして設定された画面幅および画面高さに応じて自動的に変更する処理を追加するスクリプトである。
スクリプト例(2)1901は、画面下のキーガイド部品に背景色等を設定するスクリプトである。
【0038】
携帯電話機向けのソフトウェア開発においては、実際にプログラムが実行されるハードウェアの画面サイズが機種によって異なるケースが一般的である。従来のソースコード生成装置では、スクリプト内で利用できるパラメータが固定的であったため、予想される全ての画面サイズに対して部品1つ1つの座標パラメータを用意するか、部品毎にスクリプトやテンプレートを用意する必要があった。このため、パラメータやスクリプトの準備に要する作業量が大きいという問題があった。また、複数のスクリプトを同時に適用する場合には互いの出力するソースコード間で整合性を確保する必要があり、スクリプトの数が増えると組合せが級数的に増加して作成、メンテナンスおよび再利用が困難となっていた。
【0039】
本ソースコード生成装置では、図20に示すように、GUIデザイナにより設定された値を、パラメータデータ2001として設定し、そのパラメータデータをスクリプト実行処理1313によってスクリプト1801、1901に設定する。
これにより、スクリプト1801、1901側であらゆるパラメータ値を利用可能となるため、1つのスクリプトで多様な処理が可能なソースコードを出力することが可能になる。
例えば、スクリプト例(1)1801において画面上の全部品のデータをパラメータデータの配列として処理できるため、異なる数の部品を持つ複数の画面に対して、1つのスクリプトでカスタマイズされたソースコードを生成できる。
また、1画面内の各部品の内容や個数が予め判らない場合でも、スクリプトの判定ロジックやループロジックを組み込むことにより、必要な部品だけを対象としたソースコードを出力するスクリプトを容易に作成することができる。
さらに、スクリプトの出力結果同士が干渉してしまう場合でも、本ソースコード生成装置の出力ソースコード解析処理1314、整形ルール読込み処理1315、ソースコード整形処理1316およびソースコード結合処理1317により、ソースコードが適切に統合される。
これにより、各スクリプトは互いの出力結果を考慮せずに必要なコードを出力することが可能となる。
【0040】
図18及び図19の例では、スクリプト例(1)1801とスクリプト例(2)1901が同名のInitializeWidget関数を出力する仕様となっているが、ソースコード結合処理1317によって重複部分が除去されるため、出力されるソースコードでは文法エラーが発生しない。このため、サイズ変更、色設定、文字設定、等々の単機能単位で作成したスクリプトを必要に応じて自由に組み合わせることが可能となり、作成効率やメンテナンス性、再利用性を高める効果が得られる。
パラメータを変更せずにスクリプトを適用して生成したソースコードの実行例2003(図20)は、デザインした画面をそのままソースコードとして出力し、実行した結果を模式的に示したものである。この実行例2003の場合はデザイン結果と同一の画面2003が携帯電話機上に表示される。
【0041】
これに対して、画面幅と画面高さのパラメータをパラメータファイル3に設定したパラメータデータによって変更した後にスクリプトを適用して生成したソースコードの実行例2002(図20)は、画面サイズの異なる携帯電話機向けに再生成したソースコードの実行例である。
スクリプト例(1)1801の処理により、各部品は位置とサイズが自動的に半分に変更され、ユーザの意図に沿った画面デザインが維持されている。またスクリプト例(2)1901も干渉することなく同時に有効となり、最下部の部品の色が正しく設定される。
画面高さのパラメータ値を変更した上でスクリプトを適用して生成したソースコードの実行例2004は、画面高さのみを変更した場合の例である。スクリプト例(1)1801は各部品のy座標と高さのみを適切に変更しており、また最下部の色設定もスクリプト例(1)1801との干渉なしに有効となっている。
【0042】
以上の説明から明らかなように、本実施形態のソースコード生成装置によれば、例えば機能Aのスクリプトと機能Bのスクリプトを読み込み、それぞれに対応したソースコードを生成し、それらのソースコードを解析して重複部分を共通化して結合して出力することにより、機能単位に分割して管理されている機能A、機能Bのスクリプトを組み合わせて新規の機能のソースコードを極めて容易に生成して出力することができる。
これにより、生成されたソースコードを利用する機器側での新規機能の追加または変更要請に対して、その都度、新規のスクリプトを作成する必要がなくなり、新規機能のソースコードを極めて容易に生成することが可能になり、スクリプトの再利用性が向上し、かつソースコードの開発、修正、保守に係るコストの低減を図ることが可能になる。
特に、携帯電話機など、新規製品の開発が次々に行われる分野における機器に実装するソースコードを生成する場合、必要なスクリプトを自由に組み合わせて自動的に適切なソースコードを出力することが可能となり、生産性が向上し、開発作業者の労力の軽減を含め、開発コストの大幅な低減を図ることができる。
また、スクリプトが出力するソースコードの出力形式をユーザ定義に従って整形することにより、1つのスクリプトを幅広く再利用し、出力形式の一部分だけが異なるスクリプトを多量に作成するという冗長な開発作業を削減することができる。
さらに、ユーザが設定したパラメータをスクリプトに渡して、スクリプト側のロジックで必要なソースコードを出力することにより、1つのスクリプトを様々な対象コードの出力に利用することが可能となる。例えば、携帯電話機の画面サイズのみが変更された場合には、新規の画面サイズに応じた表示部品のサイズをパラメータとしてスクリプトに設定することにより、新規の画面サイズに対応したスクリプトを新たに作成する必要がなくなり、効率的に画面サイズ等の変更に対応することが可能になる。
【図面の簡単な説明】
【0043】
【図1】本発明に係るソースコード生成装置の実施の形態を示すハードウェア構成図である。
【図2】ソースコード生成プログラムの内部処理を機能的に示した機能構成図である。
【図3】スクリプトファイルに格納されたスクリプトの例を示す図である。
【図4】パラメータファイルに設定されたパラメータデータの一例を示す図である。
【図5】パラメータファイル6に設定されたパラメータデータのメモリ内における記憶例を示す図である。
【図6】整形ルールファイルに格納された整形ルールの例を示す図である。
【図7】スクリプト読込み処理の処理手順を示すフローチャートである。
【図8】パラメータデータ作成処理の処理手順を示すフローチャートである。
【図9】スクリプト実行処理の処理手順を示すフローチャートである。
【図10】図3に例示したスクリプトから生成されるソースコードの例を示す図である。
【図11】出力ソースコード解析処理の処理手順を示すフローチャートである。
【図12】図3のスクリプトに対応する解析済み生成ソースコードの例を示す図である。
【図13】整形ルール読込み処理の処理手順を示すフローチャートである。
【図14】ソースコード整形処理の処理手順を示すフローチャートである。
【図15】ソースコード結合処理の処理手順を示すフローチャートである。
【図16】この結合処理によって出力される結合済み生成ソースコードの例を示す図である。
【図17】ソースコード出力処理の処理手順を示すフローチャートである。
【図18】携帯電話機に実装するソースコードを生成する場合のスクリプトの例を示す図である。
【図19】携帯電話機に実装するソースコードを生成する場合のスクリプトの他の例を示す図である。
【図20】GUIデザイナにより設定された値をパラメータデータとして設定してソースコードを生成し、そのソースコードを実行することによって表示される携帯電話機の表示画面の例を示す図である。
【符号の説明】
【0044】
1…処理装置、2…入力装置、3…表示装置、4…スクリプト使用定義ファイル、5…スクリプトファイル、6…パラメータファイル、7…整形ルールファイル、8…ソースコードファイル、12…メモリ、51a…スクリプト、51b…スクリプト、121…OS(オペレーティングシステム)、131…ソースコード生成プログラム、1311…スクリプト読込み処理、1312…パラメータデータ作成処理、1313…スクリプト実行処理、1314…出力ソースコード解析処理、1315…整形ルール読込み処理、1316…ソースコード整形処理、1317…ソースコード結合処理、1318…ソースコード出力処理。

【特許請求の範囲】
【請求項1】
スクリプトによりソースコードを生成する方法であって、
ソースコードを生成するための複数のスクリプトをスクリプトファイルから読込む第1のステップと、読み込んだ複数のスクリプトを実行し、それぞれのスクリプトに対応したソースコードを生成する第2のステップと、生成された各ソースコードを解析する第3のステップと、解析済みの各ソースコードの重複部分を共通化して結合し、結合済みのソースコードを出力する第4のステップとを備えることを特徴とするソースコード生成方法。
【請求項2】
前記第4のステップが、重複部分を共通化する前に、前記第3のステップで解析済みの各ソースコードの出力形式をユーザ定義の整形ルールに従い整形するステップを備えることを特徴とする請求項1に記載のソースコード生成方法。
【請求項3】
前記第2のステップが、前記スクリプトファイルから読み込んだ複数のスクリプトに対応するソースコードを生成する前に、各スクリプトに対し、ソースコードとして出力する内容を変更するためのパラメータを設定するステップを備えることを特徴とする請求項1または2に記載のソースコード生成方法。
【請求項4】
スクリプトによりソースコードを生成する装置であって、
ソースコードを生成するための複数のスクリプトをスクリプトファイルから読込む第1の手段と、読み込んだ複数のスクリプトを実行し、それぞれのスクリプトに対応したソースコードを生成する第2の手段と、生成された各ソースコードを解析する第3の手段と、解析済みの各ソースコードの重複部分を共通化して結合し、結合済みのソースコードを出力する第4の手段とを備えることを特徴とするソースコード生成装置。
【請求項5】
前記第4の手段が、重複部分を共通化する前に、前記第3の手段で解析済みの各ソースコードの出力形式をユーザ定義の整形ルールに従い整形する手段を備えることを特徴とする請求項4に記載のソースコード生成装置。
【請求項6】
前記第2の手段が、前記スクリプトファイルから読み込んだ複数のスクリプトに対応するソースコードを生成する前に、各スクリプトに対し、ソースコードに出力する内容を変更するためのパラメータを設定する手段を備えることを特徴とする請求項4または5に記載のソースコード生成装置。
【請求項7】
スクリプトによってソースコードをコンピュータに生成させるためのプログラムであって、
ソースコードを生成するための複数のスクリプトをスクリプトファイルから読込む第1の手段と、読み込んだ複数のスクリプトを実行し、それぞれのスクリプトに対応したソースコードを生成する第2の手段と、生成された各ソースコードを解析する第3の手段と、解析済みの各ソースコードの重複部分を共通化して結合し、結合済みのソースコードを出力する第4の手段としてコンピュータを機能させるステップを備えることを特徴とするソースコード生成プログラム。

【図1】
image rotate

【図2】
image rotate

【図3】
image rotate

【図4】
image rotate

【図5】
image rotate

【図6】
image rotate

【図7】
image rotate

【図8】
image rotate

【図9】
image rotate

【図10】
image rotate

【図11】
image rotate

【図12】
image rotate

【図13】
image rotate

【図14】
image rotate

【図15】
image rotate

【図16】
image rotate

【図17】
image rotate

【図18】
image rotate

【図19】
image rotate

【図20】
image rotate


【公開番号】特開2007−304998(P2007−304998A)
【公開日】平成19年11月22日(2007.11.22)
【国際特許分類】
【出願番号】特願2006−134503(P2006−134503)
【出願日】平成18年5月12日(2006.5.12)
【出願人】(000233055)日立ソフトウエアエンジニアリング株式会社 (1,610)
【Fターム(参考)】