(57)【要約】【課題】  ドキュメントへのメッセージの追加・修正漏れ等による不一致が生じなくなるようにする。【解決手段】  メッセージ資源管理システム２００（破線で囲まれた構成）は、メッセージクラス生成装置２０１と、メッセージドキュメント生成装置２０２と、を有している。メッセージ資源の情報を格納するファイルとして、後述するメッセージ資源定義ファイル２０３を有する。メッセージ資源定義ファイル２０３をＸＭＬ形式で記載し、プログラム言語としてＪａｖａを用いている。メッセージクラス生成装置２０１は、メッセージ資源定義ファイル２０３の情報を読み込み、メッセージを管理する共通部分を雛形（テンプレート）として管理するメッセージ管理クラス２０４を生成する。メッセージドキュメント生成装置２０２は、メッセージ資源を定義するメッセージ資源定義ファイル２０３の情報を読み込み、メッセージドキュメント２０５を生成する。【選択図】  図２
2007011586.tif 000002
【特許請求の範囲】
【請求項１】
ソフトウェアのメッセージ資源の管理方法であって、
ソフトウェアのメッセージ資源に対応するプログラム用の情報とドキュメント用の情報とを、１つのファイルに記述したメッセージ資源定義ファイルを作成するステップと、
該メッセージ資源定義ファイルに基づいて、一つのメッセージに対応した一つのメソッドとして作成されるメッセージ管理クラスを作成するステップと
を有する方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ソフトウェアのメッセージ資源の管理方法に関する。
【背景技術】
【０００２】
プログラム実行の際、例えばエラー発生時などに表示画面やファイル等の出力装置に出力するメッセージは、プログラム中にそのメッセージ内容を直接記述してしまうと、後からメッセージを変更する場合にプログラムまで書き換える必要があるなどメッセージの管理が難しくなる。すなわち、ソフトウェア製品で使用するメッセージは、通常、機能仕様書やマニュアルに一覧を記載する必要があるため、同一内容のメッセージは同一のＩＤにより管理する。メッセージ内容を修正する場合には、プログラム中で使用している同一ＩＤのメッセージを全て修正しなければならない。プログラム中にメッセージを直接記述した場合には、修正箇所を検索する手間を要する上に、同一のＩＤのメッセージの内容が異なっていないかどうかに関するチェックも行う必要がある。特に、大規模なソフトウェアの場合には、プログラム中で使用しているメッセージを全て調査し、ドキュメントに漏れなく記載すると膨大な作業量となる。
【０００３】
そこで、メッセージ資源をプログラムの外部に配置するメッセージ資源の外部化ということが考えられている。メッセージ資源の外部化に関する従来例としては、下記特許文献１に記載の技術が知られている。特許文献１には具体的な方法は言及されていないが、一般的には、まず、出力するメッセージを、ファイル名等の可変要素と、可変要素を埋め込む位置に特定の記号を挿入したメッセージテンプレートと、に分解する。ソースファイルとは別のファイルに、一連のメッセージテンプレートとそれに対応するキーを記述しておき、プログラム側でキーを指定してメッセージテンプレートを取り出すようにする。そして、メッセージテンプレートと埋字のリストから、プログラムの実行時にメッセージを組み立てるようにする。
【０００４】
システムによっては、特にメッセージ資源の国際化という観点から、メッセージ資源の外部化を補助するライブラリが提供されている場合がある。例えば、Java言語の場合、リソースバンドルと呼ぶ機構が用意されている。
【０００５】
図１はリソースバンドルを使用したメッセージ管理の例を示す図である。「キー ＝ メッセージテンプレート」の形式で、プログラムで使うメッセージファイルであるプロパティファイル１００を作成しておき、ソースファイル１１０でＩＤ００１などのキーを指定することにより、キーに対応するメッセージテンプレート、例えば、「ＩＤ００１＝｛０｝のファイルでＩ／Ｏエラーが発生しました。」などのメッセージを取得する。ドキュメント１２０は、プロパティファイル１００に基づいて手動で生成される（１３０）。そのため、人為的なミスは避けがたく、例えばドキュメントファイル１２０にメッセージを追加するのを忘れたり、ドキュメントファイル１２０とプログラムの出力結果とが異なったりする可能性もある。尚、ドキュメントファイル１２０とプログラムとの同期については、下記特許文献２に記載されている。
【０００６】
【特許文献１】特開平７−１８２１４９号公報
【特許文献２】特開平６−１３９０５５号公報
【発明の開示】
【発明が解決しようとする課題】
【０００７】
図１に示すように、メッセージ資源をソースファイル１１０から切離して外部ファイル（プロパティファイル）１００に記述した場合に、プログラム中で特定のメッセージを取り出すためには、当該メッセージに対応付けられたキー値（例えば、“ＩＤ００１”）を矢印で示すように指定する必要がある。前述のリソースバンドルでは、プロパティファイル１００に記述したキー値“ＩＤ００１”を指定してメッセージ資源「｛０｝のファイルでＩ／Ｏエラーが発生しました。」を取得する。C言語にもUNIXのメッセージカタログという機構があるが、同様にプログラム中で文字列を指定してメッセージ資源を取得する。
【０００８】
ところで、メッセージ資源を取得するためのキー値として誤った値（文字列）、例えば、“ＩＤ０１”を指定してしまったと仮定する。このような誤りがあった場合でも、文字列としては構文的には間違っていないため、機械語に翻訳する際にコンパイルエラーとはならない。従って、機械語に翻訳した後になって、実際にプログラムを実行して当該メッセージの取得処理に到達した段階においてリソースが取得できない旨のエラーが発生し、初めて指定間違であったことが発見されることになる。
【０００９】
また、メッセージテンプレートと埋字リストとからメッセージを作成した場合には、通常、Java言語のMessageFormatやC言語のsprintfなどの標準ライブラリが使用される。
【００１０】
これらは、メッセージテンプレート中の埋字の数と与えられた引数の数とに関するチェック機能がなく、指定する引数の数や型を間違えた場合には、コンパイルエラーにはならない。従って、意図しないメッセージが作成されることになりかねない。仮にメッセージの組立時に埋字と引数の数とをチェックするルーチンを作成したとしても、プログラムによる処理の実行時にならないとチェックされない。
【００１１】
異常系のエラーメッセージの場合には、マシンテストによって実行するのが困難な状況もあり、メッセージの不良を作り込んだまま見逃す可能性もある。
【００１２】
上記特許文献１は、プログラムとは別に、動作ごとに定義したメッセージを対話的に追加・変更することを目的としており、メッセージ構築に関する不良をコンパイル時に検出することができない。上記特許文献２は、プログラム資源とドキュメントとを、それぞれリビジョンで管理し、リビジョンのチェックによって同期化する方式を記載しており、本発明の手法とは異なる。
【００１３】
本発明は、メッセージ資源の情報を特定のフォーマットのメッセージ資源定義ファイルで管理し、メッセージ構築に関する不良をプログラム実行前（コンパイル時）に検出することを目的とする。
【００１４】
また、本発明は、ドキュメントへのメッセージの追加・修正漏れ等による不一致が生じなくなるようにすることを目的とする。
【課題を解決するための手段】
【００１５】
本発明ではメッセージ資源の情報をメッセージ資源定義ファイルに記述し、このファイルからメッセージ管理クラスを生成する装置およびメッセージドキュメントを自動生成する装置を設ける。
【００１６】
メッセージ管理クラスは、従来手法での、メッセージテンプレートのキーの記述ミスおよび埋字の指定ミスを、コンパイル時に検出できるようにする機構である。メッセージ管理クラスでは、一つのメッセージに対応した一つのメソッドとして作成される。すなわち、メッセージの取得を、「文字列」によるキーではなく、メッセージ毎に自動生成された「メソッド」で行う。文字列の場合は、”ｘｘｘ”を”ｘｘ”とミスしても構文的には正しいが、メソッドｘｘｘ（）をｘｘ（）とミスした場合、「ｘｘ（）というメソッドは定義されていない」という構文エラーになる。
【００１７】
また、メッセージの埋字はメソッドの引数に対応させる。従来のＯｂｊｅｃｔ型の配列では、ｎｅｗ  Ｏｂｊｅｃｔ［］  ｛ｆｉｌｅ，  ｎａｍｅ｝と指定するべきところを、例えばｎｅｗ  Ｏｂｊｅｃｔ［］  ｛ｆｉｌｅ｝などとミスしてもエラーにはならないが、メソッドの引数の場合、ｘｘｘ（ｆｉｌｅ，  ｎａｍｅ）をｘｘｘ（ｆｉｌｅ）と誤って指定すると、コンパイルエラーになる。
【発明の効果】
【００１８】
本発明によれば、プログラムの外部に記述されたメッセージ資源をプログラム中から呼び出す際、メッセージ管理クラスでは、一つのメッセージに対応した一つのメソッドとして作成されるため、メッセージを間違えた場合にはコンパイル時にエラーになる。また、メッセージの埋字をメソッドの引数に対応させることで、メッセージの呼出において、メソッドの名前、引数の数、引数の型のすべてが一致していなければ、コンパイルエラーとなる。
【００１９】
そのため、メッセージの不良をプログラムの実行前に検出することができるという利点がある。また、同一のメッセージ資源から、プログラムのメッセージ管理クラスとドキュメントとを自動生成するため、ドキュメントへのメッセージの追加・修正漏れ等による不一致がなくなるという利点がある。
【発明を実施するための最良の形態】
【００２０】
以下、本発明の一実施の形態によるソフトウェアのメッセージ資源管理技術について図面を参照して説明する。図２は、本実施の形態によるメッセージ資源管理システムの一構成例を示す機能ブロック図である。図２に示すように、本実施の形態によるメッセージ資源管理システム２００（破線で囲まれた構成）は、メッセージクラス生成装置２０１と、メッセージドキュメント生成装置２０２と、を有している。メッセージ資源の情報を格納するファイルとして、後述するメッセージ資源定義ファイル２０３を有する。本実施の形態では、メッセージ資源定義ファイル２０３をＸＭＬ形式で記載し、プログラム言語としてＪａｖａを用いた場合を例にして以下に説明する。
【００２１】
メッセージクラス生成装置２０１は、後述する図３に示すメッセージ資源定義ファイル２０３の情報を読み込み、メッセージを管理する共通部分を雛形（テンプレート）として管理するメッセージ管理クラス２０４を生成する。メッセージドキュメント生成装置２０２は、メッセージ資源を定義するメッセージ資源定義ファイル２０３の情報を読み込み、メッセージドキュメント２０５を生成する。
【００２２】
本実施の形態によるメッセージ資源管理システム２００に関連して、プログラム格納部２１１と、処理系２１２と、実行ファイル格納部２１３と、Ｉ／Ｏ２１４と、が設けられ、Ｉ／Ｏ２１４から、ファイル２１５ａとして、又はＣＲＴなどの表示部２１５ｂに表示されることでプログラムの実行結果が表示・出力される。
【００２３】
ここで、上記メッセージ資源定義ファイル２０３をＸＭＬ形式で記述した内容例について説明する。図３は、作成者が、例えば手書きで作成したメッセージ資源定義ファイル２０３の記述例を示した図である。図３において、要素３０１は、ＩＤをキーにした１つのメッセージを表す要素である。１つのメッセージ毎に要素３０１を記述する。要素３０１の属性としてメッセージＩＤ（ここでは、「ＩＤ００１」）を指定しておく。要素３０２には、メッセージテンプレート（ここでは、「｛０｝のファイルでＩ／Ｏエラーが発生しました。｛１｝」）を記述する。要素３０３は、上記｛０｝、｛１｝のように順番に記載されている埋め字の解説であり、｛０｝：ファイル名、｛１｝：エラー内容などの埋字の説明するメッセージが記述されている。要素３０４には、上記メッセージが発生する発生要因（ｃａｕｓｅ）を記述する。例えば、「ファイルの操作でエラーが発生しました。」などの記述がなされる。要素３０５には、上記メッセージが発生した場合の対処方法（ｓｏｌｕｔｉｏｎ）が必要な場合には、それを記述する。例えば、「ファイルの状態を確認してください。」などの記述がなされる。
【００２４】
要素３０６には、メッセージに対応し、呼び出されることで作成したメッセージを返却するメソッドに関する情報を記述する。要素３０６の属性には、例えば、「ｉｏＥｒｒｏｒ」などの、作成するメソッド名が指定されている。要素３０７には、作成するメソッドの引数に関する情報を記述する。要素３０７の属性には、引数の型３０８、引数名３０９、引数コメント３１０がそれぞれ指定されている。このように、メッセージ資源定義ファイルには、ＩＤ００１に関連する情報を全て記載し、かつ、例えばＸＭＬで記述する。
【００２５】
図４は、図２に示すメッセージクラス生成装置２０１が後述するメッセージ管理クラス６００を自動作成する手順を示すフローチャート図である。図６は、図４に示す手順で生成されるメッセージ管理クラス６００と、ソースファイル６１０と、後述する手順で作成されるドキュメント６２０との記述に関する構成例を示す図である。図４の処理を開始すると、メッセージ管理クラスの外枠を自動で作成(ステップＳ４０１)した後、メッセージ資源定義ファイル２０３（図２，３）の内容からメッセージ管理クラス６００を作成する(ステップ４０２〜ステップ４０４)。
【００２６】
すなわち、ステップ４０２において図３の符号３０６で示すメソッドネーム“ｉｏＥｒｒｏｒ”を図６に示すメッセージ管理クラス６００の“ｐｕｂｌｉｃ  Ｍｅｓｓａｇｅ  ｉｏＥｒｒｏｒ…”に転記する。ステップＳ４０３において、図３の符号３０２の内容を図６のメッセージ管理クラス６００のクラスコメント「ＩＤ００１｛０｝の処理でＩ／Ｏエラーが発生しました。」に転記する。
【００２７】
ステップＳ４０４において、上記メソッドのパラメタ情報である要素３０７から、図６のメッセージ管理クラス６００のパラメタ定義「ｊａｖａ．ｉｏ．Ｆｉｌｅ  ｆｉｌｅ，
Ｔｈｒｏｗａｂｌｅ  ｃａｕｓｅ」、およびパラメタのコメント「＠ｐａｒａｍ  ｆｉｌｅファイル名」「＠ｐａｒａｍ  ｃａｕｓｅ  エラー内容」を作成する。
【００２８】
次いで、符号３０７の処理が終了したか否かを判断し、終了した場合には（Ｙ）、ステップＳ４０５に進み、終了していない場合には（Ｎ）ステップＳ４０４を繰り返す。ステップＳ４０５において、メソッドの実装を作成し、符号３１０の処理が終了したか否かを判断する。終了していない場合には（Ｎ）ステップＳ４０２に戻り、終了している場合には（Ｙ）、メッセージ管理クラス６００を作成する処理を終了する。
【００２９】
尚、ステップＳ４０５において実装するメソッドの内容は、図１で説明した従来の外部メッセージ資源取得の実装方法と同様の方法でよい。メソッドの実装は自動的に行われるため、人為的なミスが生じるおそれはないからである。入力ファイルはメッセージ資源定義ファイル２０３のみであり定義ファイルにＸＭＬを使用しているため、メッセージクラス生成装置２０１はＸＳＬスタイルシートなどで実装することができる。
【００３０】
図５は、メッセージドキュメント生成装置２０２（図２）がメッセージドキュメント６２０（図６）を自動作成する手順を示すフローチャート図である。処理を開始すると、ステップＳ５０１において、図３の要素３０１と要素３０２とを図６のドキュメント６２０の１行目のＩＤとメッセージに記述する。次いで、ステップＳ５０２において、図３の要素３０３から図６のドキュメント６２０の２〜３行目の埋字の説明を作成する。次いで、符号３０７の処理が終了したか否かを判断し、終了した場合には（Ｙ）、ステップＳ５０３に進み、終了していない場合には（Ｎ）ステップＳ５０２に戻る。ステップＳ５０３において、要素３０４から要因の説明を作成し（図６のドキュメントの４行目）、ステップＳ５０４において、要素３０５から対処方法の説明を作成する（図６のドキュメントの５行目）。次いで、符号３０１の処理が終了したか否かを判断し、終了した場合には（Ｙ）、ドキュメント作成処理を終了し、終了していない場合には（Ｎ）ステップＳ５０１に戻る。
【００３１】
この処理における入力ファイルはメッセージ資源定義ファイル２０３のみであるため、メッセージドキュメント生成装置２０２は同様にＸＳＬスタイルシートなどで実装することができる。
【００３２】
このように、図６に示すメッセージ管理クラス６００と、ドキュメント６２０とは、図３のメッセージ資源定義ファイル２０３に記載されたデータに基づいて自動作成することができるので、ここでの記載ミスは生じない。
【００３３】
メッセージ管理クラス６００では、メッセージの取得を、「文字列」によるキーではなく、メッセージ毎に自動生成された「メソッド」で行う。すなわち、メソッドで取得するというだけで構文エラーになる。
【００３４】
一方、メッセージの埋字はメソッドの引数に対応させる。従来のＯｂｊｅｃｔ型の配列では、ｎｅｗ  Ｏｂｊｅｃｔ［］  ｛ｆｉｌｅ，  ｎａｍｅ｝と指定するべきところを、例えばｎｅｗ  Ｏｂｊｅｃｔ［］  ｛ｆｉｌｅ｝などとミスしてもエラーにはならないが、メソッドの引数の場合、ｘｘｘ（ｆｉｌｅ，  ｎａｍｅ）をｘｘｘ（ｆｉｌｅ）と誤って指定すると、コンパイルエラーになる。
【００３５】
以上に説明したように、本実施の形態によるソフトウェアのメッセージ資源管理方法によれば、同一のメッセージ資源から、プログラムのメッセージ管理クラスとドキュメントとを自動生成するため、ドキュメントへのメッセージの追加・修正漏れ等に起因する不一致を防止することができる。また、プログラムの外部に記述されたメッセージ資源をプログラム中から呼び出す際に、メソッドで取得するようにするというだけで構文エラーになる。すなわち、メッセージや引数の指定を間違えた場合にはコンパイル時にエラーになる。従って、メッセージの不良についてプログラムを実行する前に検出できるという利点がある。
【産業上の利用可能性】
【００３６】
本発明は、ソフトウェアのメッセージ資源管理方法及び装置として利用可能である。
【図面の簡単な説明】
【００３７】
【図１】一般的な外部メッセージ資源の利用方法の一例を示す図である。
【図２】本発明の一実施の形態によるメッセージ資源管理装置の一構成例を示す機能ブロック図である。
【図３】本実施の形態によるメッセージ資源定義ファイルのデータ構造の一例を示す図である。
【図４】メッセージクラス生成装置における処理手順の流れを示すフローチャート図である。
【図５】メッセージドキュメント生成装置における処理手順の流れを示すフローチャート図である。
【図６】本実施の形態によるメッセージドキュメント生成装置により生成されるデータ構造の一例を示す図である。
【符号の説明】
【００３８】
２０１…メッセージクラス生成装置、２０２…メッセージドキュメント生成装置、２０３…メッセージ資源定義ファイル、２０４…メッセージ管理クラス、２０５…メッセージドキュメント。
【図１】
2007011586.tif 000003
【図２】
2007011586.tif 000004
【図３】
2007011586.tif 000005
【図４】
2007011586.tif 000006
【図５】
2007011586.tif 000007
【図６】
2007011586.tif 000008