(57)【特許請求の範囲】
【請求項１】
複数の論理式を組み合わせたルールを定義するルール定義部と、
前記ルール定義部が定義したルールをプログラムコードに変換するプログラムコード生成部と、
前記プログラムコード生成部が生成したプログラムコードを実行して、ルールを評価するルール評価部と
を備え、
前記プログラムコード生成部は、
前記ルールを構成する論理式から文字列を抽出して、抽出した文字列をキーとして、キーと前記ルールとを対応付けたルール表を生成するルール表生成部と、
前記ルールをプログラムコードに変換するルール変換部と
を有し、
前記ルール評価部は、
前記ルールに対する評価値を含む評価要求を受信する評価要求受信部と、
前記評価要求受信部によって受信された評価要求に含まれる評価値から文字列を抽出して、抽出した文字列をキーとして、前記ルール表生成部が生成したルール表を検索し、検索されたルールが変換されたプログラムコードに、前記評価要求に含まれる評価値を入力して評価する評価処理部と
を有することを特徴とするコード生成システム。
【請求項２】
前記ルール表生成部は、前記ルールを構成する論理式から、ａｎｄ条件で結ばれた論理式における文字列を抽出し、
前記評価処理部は、前記評価要求に含まれる評価値から、前記ａｎｄ条件で結ばれた論理式に対する評価値を抽出し、抽出した評価値をキーとして、前記ルール表生成部が生成したルール表を検索する
ことを特徴とする請求項１に記載のコード生成システム。
【請求項３】
前記ルール変換部は、前記ルールから前記文字列を抽出した論理式を除いた残りの論理式のみをプログラムコードに変換して、前記ルールから変換したプログラムコードとすることを特徴とする請求項１又は２に記載のコード生成システム。
【請求項４】
前記ルール定義部は、
前記ルールをスプレッドシートに入力するルール入力部と、
前記ルール入力部によって入力されたルールに対するテスト値を入力するテスト値入力部と、
前記テスト値入力部によって入力されたテスト値を前記ルールに入力して検証する総合検証部と
前記テスト値を前記ルールを構成する各論理式に入力して検証する個別検証部と、
前記総合検証部及び前記個別検証部が検証した結果を前記スプレッドシートに表示する検証結果表示部と
を有することを特徴とする請求項１から３までのいずれかに記載のコード生成システム。
【請求項５】
前記ルール定義部は、前記ルールとともに、前記ルールの属性情報を定義し、
前記プログラムコード生成部は、前記ルールをプログラムコードに変換する際、前記ルールの属性情報をコメントとして前記プログラムコードに含める
ことを特徴とする請求項１から４までのいずれかに記載のコード生成システム。
【請求項６】
処理装置が、複数の論理式を組み合わせたルールを定義するルール定義工程と、
処理装置が、前記ルール定義工程で定義したルールをプログラムコードに変換するプログラムコード生成工程と、
処理装置が、前記プログラムコード生成工程で生成したプログラムコードを実行して、ルールを評価するルール評価工程と
を備え、
前記プログラムコード生成工程は、
前記ルールを構成する論理式から文字列を抽出して、抽出した文字列をキーとして、キーと前記ルールとを対応付けたルール表を生成するルール表生成工程と、
前記ルールをプログラムコードに変換するルール変換工程と
を有し、
前記ルール評価工程は、
前記ルールに対する評価値を含む評価要求を受信する評価要求受信工程と、
前記評価要求受信工程によって受信された評価要求に含まれる評価値から文字列を抽出して、抽出した文字列をキーとして、前記ルール表生成工程で生成したルール表を検索し、検索されたルールが変換されたプログラムコードに、前記評価要求に含まれる評価値を入力して評価する評価処理工程と
を有することを特徴とするコード生成方法。
【請求項７】
複数の論理式を組み合わせたルールを定義するルール定義処理と、
前記ルール定義処理で定義したルールをプログラムコードに変換するプログラムコード生成処理と、
前記プログラムコード生成処理で生成したプログラムコードを実行して、ルールを評価するルール評価処理と
をコンピュータに実行させ、
前記プログラムコード生成処理は、
前記ルールを構成する論理式から文字列を抽出して、抽出した文字列をキーとして、キーと前記ルールとを対応付けたルール表を生成するルール表生成処理と、
前記ルールをプログラムコードに変換するルール変換処理と
を有し、
前記ルール評価処理は、
前記ルールに対する評価値を含む評価要求を受信する評価要求受信処理と、
前記評価要求受信処理によって受信された評価要求に含まれる評価値から文字列を抽出して、抽出した文字列をキーとして、前記ルール表生成処理で生成したルール表を検索し、検索されたルールが変換されたプログラムコードに、前記評価要求に含まれる評価値を入力して評価する評価処理と
を有することを特徴とするコード生成プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
この発明は、論理式によりルールを記述し、記述したルールをプログラムコードに変換する技術に関する。
【背景技術】
【０００２】
特許文献１には、スプレッドシートにルールを記述し、記述されたルールをプログラムコードに変換することが記載されている。そして、特許文献１には、変換したプログラムコードをサーバで実行してルールを評価することが記載されている。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特表２０１０−５２４１３４号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
単純にルールをプログラムコードに変換しただけでは、ルールが増えるに従い、サーバで実行されるプログラムコードが増えてしまい、ルールを評価する処理にかかる時間が増えてしまう。
この発明は、ルールが増えた場合におけるルールを評価する処理の時間を短くすることを目的とする。
【課題を解決するための手段】
【０００５】
この発明に係るコード生成システムは、
複数の論理式を組み合わせたルールを定義するルール定義部と、
前記ルール定義部が定義したルールをプログラムコードに変換するプログラムコード生成部と、
前記プログラムコード生成部が生成したプログラムコードを実行して、ルールを評価するルール評価部と
を備え、
前記プログラムコード生成部は、
前記ルールを構成する論理式から文字列を抽出して、抽出した文字列をキーとして、キーと前記ルールとを対応付けたルール表を生成するルール表生成部と、
前記ルールをプログラムコードに変換するルール変換部と
を有し、
前記ルール評価部は、
前記ルールに対する評価値を含む評価要求を受信する評価要求受信部と、
前記評価要求受信部によって受信された評価要求に含まれる評価値から文字列を抽出して、抽出した文字列をキーとして、前記ルール表生成部が生成したルール表を検索し、検索されたルールが変換されたプログラムコードに、前記評価要求に含まれる評価値を入力して評価する評価処理部と
を有することを特徴とする。
【発明の効果】
【０００６】
この発明に係るコード生成システムでは、ルールをプログラムコードに変換する時にルール表を生成しておく。そして、プログラムコードを実行してルールの評価を行うときに、評価要求に含まれる評価値に基づきルール表を引いて、実行する必要があるルールを絞り込む。そのため、ルールが増えた場合であっても実行するプログラムコードの数を抑えることができ、ルールを評価する処理の時間を短くすることができる。
【図面の簡単な説明】
【０００７】
【図１】実施の形態１に係るコード生成システム１０の構成図。
【図２】実施の形態１に係るルール定義部２０の処理を示すフローチャート。
【図３】実施の形態１に係るプログラムコード生成部３０の処理を示すフローチャート。
【図４】実施の形態１に係るルール評価部４０及び評価要求入力部５０の処理を示すフローチャート。
【図５】スプレッドシート７１に記述したルールの例を示す図。
【図６】図５に示すルールに対するテスト値７２の例を示す図。
【図７】ルールの記述規則の例を示す図。
【図８】基本ルールの入力例を示す図。
【図９】ａｎｄルールの入力例を示す図。
【図１０】ｏｒルールの入力例を示す図。
【図１１】否定ルールの入力例を示す図。
【図１２】条件分岐ルールの入力例を示す図。
【図１３】変換ルールの入力例を示す図。
【図１４】計算ルールの入力例を示す図。
【図１５】属性情報の説明図。
【図１６】マッピング情報７３の説明図。
【図１７】マッピング情報７３の説明図。
【図１８】マッピング情報７３の例を示す図。
【図１９】ルールコントローラ７４を生成する処理の説明図。
【図２０】ＪＶルール７６を生成する処理の説明図。
【図２１】評価要求の説明図。
【図２２】評価要求の例を示す図。
【図２３】評価結果の説明図。
【図２４】評価結果の例を示す図。
【図２５】キーとして利用した文字列の項目についての論理式は、プログラムコードに含めず、残りの論理式のみプログラムコードに変換する例を示す図。
【図２６】一部の条件を示すルールを別欄に記述するようにした例を示す図。
【図２７】実施の形態１に示したルール定義部２０、プログラムコード生成部３０、ルール評価部４０、評価要求入力部５０の各装置のハードウェア構成の例を示す図。
【発明を実施するための形態】
【０００８】
実施の形態１．
図１は、実施の形態１に係るコード生成システム１０の構成図である。
コード生成システム１０は、ルール定義部２０、プログラムコード生成部３０、ルール評価部４０、評価要求入力部５０を備える。
ルール定義部２０、プログラムコード生成部３０、ルール評価部４０は、それぞれ別の装置として構成されていてもよいし、１つの装置として構成されていてもよい。ルール定義部２０、プログラムコード生成部３０、ルール評価部４０は、それぞれ別の装置として構成されていている場合には、ルール定義部２０とプログラムコード生成部３０とは、ネットワークにより接続されており、プログラムコード生成部３０とルール評価部４０とは、ネットワークにより接続されている。
また、ルール評価部４０と評価要求入力部５０とは、ネットワークにより接続されている。
【０００９】
ルール定義部２０には表示装置６１、入力装置６２が接続されており、ルール定義部２０はルールの管理をする業務管理者によって操作される。また、評価要求入力部５０には表示装置６３、入力装置６４が接続されており、評価要求入力部５０はルールの評価を依頼するユーザによって操作される。
【００１０】
ルール定義部２０は、ルール入力部２１、構文解析部２２、総合検証部２３、個別検証部２４、検証結果表示部２５を備える。
ルール入力部２１は、１つ以上のスプレッドシート７１と、テスト値７２と、マッピング情報７３とを入力する。
【００１１】
プログラムコード生成部３０は、スプレッドシート管理部３１、マッピング情報管理部３２、構文解析部３３、ルールコントローラ生成部３４、ＪＶルール生成部３５を備える。
スプレッドシート管理部３１は、ルール入力部２１によって入力されたスプレッドシート７１を管理する。マッピング情報管理部３２は、ルール入力部２１によって入力されたマッピング情報７３を管理する。ルールコントローラ生成部３４は、ルールコントローラ７４（評価処理部）を生成する。ルールコントローラ７４には、ルール表７５が含まれている。ＪＶルール生成部３５は、ＪＶルール７６（Ｊａｖａ（登録商標）ルール）を生成する。
【００１２】
ルール評価部４０は、評価要求受信部４１、評価結果返信部４２、ＪＶルール管理部４３、十進数演算部４４を備える。
ＪＶルール管理部４３は、ルールコントローラ７４とＪＶルール７６とを管理する。
【００１３】
評価要求入力部５０は、評価要求送信部５１、評価結果受信部５２、評価結果表示部５３を備える。
【００１４】
図２から図４は、実施の形態１に係るコード生成システム１０の処理を示すフローチャートである。
図２は、実施の形態１に係るルール定義部２０の処理を示すフローチャートである。図３は、実施の形態１に係るプログラムコード生成部３０の処理を示すフローチャートである。図４は、実施の形態１に係るルール評価部４０及び評価要求入力部５０の処理を示すフローチャートである。
【００１５】
まず、図２に基づき、ルール定義部２０の処理について説明する。
（Ｓ１１：ルール入力処理）
ルール入力部２１は、入力装置６２を介した業務管理者の操作に従い、スプレッドシート７１にルールを入力する。ルールは、予め定められた記述規則に従い論理式によって記述される。また、ルール入力部２１は、ルールとともに、ルールに付随する属性情報も入力する。
【００１６】
（Ｓ１２：テスト値入力処理）
ルール入力部２１は、入力装置６２を介した業務管理者の操作に従い、Ｓ１１で入力されたルールを簡易的にテストするためのテスト値７２を入力する。
【００１７】
（Ｓ１３：構文解析処理）
構文解析部２２は、Ｓ１１で入力されたルールの構文を解析する。
構文を解析するとは、ルールが記述規則に従っているか、変数の型が一致しているか等、ルールが構文上正しいかを検証することである。構文解析部２２の機能は、これに限るものではないが、例えば、スプレッドシートのアプリケーションソフトウェアに予め搭載されている、数式等のチェック機能により実現される。
【００１８】
（Ｓ１４：総合検証処理）
総合検証部２３は、Ｓ１１で入力されたルールに対して、Ｓ１２で入力されたテスト値７２を入力して、ルールを検証する。
【００１９】
（Ｓ１５：個別検証処理）
個別検証部２４は、Ｓ１１で入力されたルールを構成する各論理式に対して、Ｓ１２で入力されたテスト値７２を入力して、各論理式を検証する。
【００２０】
（Ｓ１６：検証結果表示処理）
検証結果表示部２５は、Ｓ１３における構文を解析した結果と、Ｓ１４におけるルールを検証した結果と、Ｓ１５における各論理式を検証した結果とを、ルールを入力したスプレッドシートに示して、表示装置６１に表示する。
【００２１】
業務管理者は、Ｓ１６で表示された結果が、所望の結果となっていない場合には、処理をＳ１１へ戻して、ルールやテスト値７２等を修正して、再び検証した結果を確認する。これを繰り返すことにより、概ね想定した通りの、誤り（バグ）のないルールを作成することができる。
【００２２】
（Ｓ１７：マッピング情報入力処理）
ルール入力部２１は、入力装置６２を介した業務管理者の操作に従い、マッピング情報７３を入力する。
マッピング情報７３とは、スプレッドシートで使用するルールの名称と、プログラムコードで使用するクラスや関数との対応関係を示す情報である。
【００２３】
図５は、スプレッドシート７１に記述したルールの例を示す図である。図６は、図５に示すルールに対するテスト値７２の例を示す図である。
図５では、スプレッドシートの各行に１つのルールが記述されている。各ルールは、属性情報（ここでは、ＩＤ、名称、エラーコード、ルールタイプ）とともに記述されている。
そして、スプレッドシートの各行には、その行に記述されたルールに対してテスト値７２を入力して、ルールが評価された結果を示す評価結果と、その行に記述されたルールを構成する各論理式に対してテスト値７２を入力して、各論理式が評価された結果を示す個別評価結果とが表示されている。
つまり、Ｓ１１でルール及び属性情報の欄が入力され、Ｓ１２でテスト値７２が入力される。すると、Ｓ１４でルールが評価された結果がＳ１６で評価結果の欄に表示され、Ｓ１５で各論理式が評価された結果がＳ１６で個別評価結果の欄に表示される。
なお、図５では示されていないが、Ｓ１３で構文に誤りがあることが確認されると、Ｓ１６でルールの欄、評価結果の欄、個別評価結果の欄に、構文に誤りがあることが表示される。
【００２４】
図７は、ルールの記述規則の例を示す図である。
図７では、ルールの記述規則として、基本ルール、ａｎｄルール、ｏｒルール、否定ルール、条件分岐ルール、変換ルール、計算ルールが規定されている。
基本ルールは、基本的な記述規則を規定したものであり、Ｅｘｃｅｌ（登録商標）等の一般的なスプレッドシートのアプリケーションソフトで用いられている数式の記述規則と同じである。ａｎｄルールは、ａｎｄ条件の記述を規定したものであり、「基本ルール  ａｎｄ  基本ルール  ａｎｄ・・・」のように記述することが規定されている。ｏｒルールは、ｏｒ条件の記述を規定したものであり、「基本ルール  ｏｒ  基本ルール  ｏｒ・・・」のように記述することが規定されている。否定ルールは、否定形の記述を規定したものであり、「ＮＯＴ（基本ルール）」のように記述することが規定されている。条件分岐ルールは、条件分岐の記述を規定したものであり、「ＩＦ（条件式，値，値）」のように記述することが規定されている。変換ルールは、文字列等の変換の記述を規定したものであり、例えば、「予定日年＆予定日月＆予定日日」のように記述することが規定されている。計算ルールは、計算式の記述を規定したものであり、例えば「料金＊（１−割引率）」のように記述することが規定されている。
【００２５】
図８から図１４は、基本ルール、ａｎｄルール、ｏｒルール、否定ルール、条件分岐ルール、変換ルール、計算ルールそれぞれの入力例を示す図である。図８から図１４では、評価結果及び個別評価結果も示している。
なお、図８（ｃ）に示すように、入力されたルールに構文の誤りがあると、ルールの欄、評価結果の欄、個別評価結果の欄に、構文に誤りがあることが表示される。ここでは、ルールの欄に誤りがあることを示す印が表示されるとともに、評価結果の欄、個別評価結果の欄に、名称に誤りがあることを示す“＃ＮＡＭＥ？”という表示がされている。
スプレッドシートのアプリケーションソフトウェアに予め搭載されている機能によって構文解析部２２の機能が実現されているため、構文に誤りがあった場合に表示される情報は、業務管理者がスプレッドシートのアプリケーションソフトを使用し慣れていれば非常に分かり易い。したがって、プログラムのコンパイラによって出力された構文の誤りに関するエラーに基づきルールを修正する場合に比べ、容易にルールの修正を行うことができる。
【００２６】
図１５は、属性情報の説明図である。
図１５では、属性情報として、ＩＤ、名称、エラーコード、ルールタイプが規定されている。
ＩＤは、ルールを一意に識別するための識別子である。名称は、ルールの評価結果を他のルールから参照するときに利用されるルールの名称である。エラーコードは、ルールが成立したときに、どのルールが成立したかをアプリケーションのユーザに通知するためのコードである。ルールタイプは、どのタイミングで実行するルールかを指定する情報である。
属性情報は、業務管理者がルールを管理するために使用される。ルールタイプ等の一部の属性情報は、ルールの適用条件として使用される場合がある。
なお、属性情報は、図１５に示すものに限らず、適用期間や適用職種等、ルールを適用する条件となるその他の属性等が規定されていてもよい。
【００２７】
図１６、図１７は、マッピング情報７３の説明図であり、図１８は、マッピング情報７３の例を示す図である。
マッピング情報７３には、スプレッドシートで使用する、日本語等で記述されたルールの名称と、プログラムコードで使用するＪａｖａ（登録商標）のクラスや関数との対応関係を規定するものである。図１６から図１８では、マッピング情報７３をＸＭＬ形式で規定している。図１６から図１８は、マッピング情報７３の定義の例を示すものであり、マッピング情報７３は他の形式で規定されていてもよい。
【００２８】
次に、図３に基づき、プログラムコード生成部３０の処理について説明する。
（Ｓ２１：スプレッドシート取得処理）
スプレッドシート管理部３１は、ルール入力部２１が入力したスプレッドシート７１を取得して、記憶装置に記憶する。
【００２９】
（Ｓ２２：マッピング情報取得処理）
マッピング情報管理部３２は、ルール入力部２１が入力したマッピング情報７３を取得して、記憶装置に記憶する。
【００３０】
（Ｓ２３：ルールコントローラ生成処理）
ルールコントローラ生成部３４は、Ｓ２１で取得されたスプレッドシート７１に基づき、ルール表７５を有するルールコントローラ７４を生成する。ルールコントローラ７４は、ルール表７５を引くことにより、実行するＪＶルール７６を絞り込むプログラムである。
【００３１】
（Ｓ２４：ＪＶルール生成処理）
ＪＶルール生成部３５は、Ｓ２１で取得されたスプレッドシート７１に記述されたルールを、Ｓ２２で取得されたマッピング情報７３に基づき、Ｊａｖａ（登録商標）のプログラムコードに変換しコンパイルして、ＪＶルール７６を生成する。
【００３２】
Ｓ２４のコンパイル時に、構文解析部３３は、Ｓ２１で取得されたルールの構文を解析する。
ここで実行される構文の解析は、基本的にＳ１３で構文解析部２２によって実行された構文の解析と同じである。
しかし、構文解析部２２の機能が、スプレッドシートのアプリケーションソフトウェアに予め搭載されている機能によって実現されるのに対して、構文解析部３３の機能は、これに限るものではないが、例えば、コンパイラの構文解析機能により実現される。そのため、Ｓ１３では一部の構文上の誤りに関しては発見できない可能性があるが、Ｓ２３では、Ｓ１３では発見できないような構文上の誤りも発見できる。
構文に誤りがある場合には、ファイル等にエラーが出力される。エラーが出力された場合、改めてＳ１１へ処理が戻され、ルールの修正が行われる。
【００３３】
なお、一般的には、Ｓ２４で生成されたＪＶルール７６に対して、ＪＵｎｉｔ等のツールを用いて単体テストが実施される。もし、単体テストで誤りが発見されれば、改めてＳ１１へ処理が戻され、ルールの修正が行われる。
【００３４】
図１９は、ルールコントローラ７４を生成する処理の説明図である。
ルールコントローラ生成部３４は、スプレッドシート７１に記述されたルールから、ａｎｄ条件で結ばれた論理式において、条件として指定された文字列を抽出する。ルールコントローラ生成部３４は、抽出した文字列を連結してキーとして、キーとルールとを対応付けて記憶したルール表７５を生成する。なお、ルールコントローラ生成部３４は、連結した文字列のハッシュ値を計算して、計算したハッシュ値をキーとしてもよい。
図１９であれば、ａｎｄ条件で、「保険種類＝“個人保険”」と、「旅行先＝“アメリカ”」と、「目的＝“ビジネス”」と、「保険金額＞１０００」との論理式が指定されている。そのため、各論理式で条件として指定された文字列である“個人保険”と“アメリカ”と“ビジネス”とが抽出される。「保険金額＞１０００」において条件として指定された１０００に関しては、文字列ではなく数値であるため、抽出されない。抽出された“個人保険”と“アメリカ”と“ビジネス”とが連結されてキーとされ、キーとＲｕｌｅ００１とが対応付けられる。
【００３５】
そして、ルールコントローラ生成部３４は、生成したルール表７５を引いて、該当するルールを特定するルールコントローラ７４を生成する。なお、ルールコントローラ７４の機能を実現するソースプログラム自体は、予め作成されており、ルールコントローラ生成部３４は、予め作成されていたソースプログラムに対して、生成したルール表７５を入力として指定して、通常のＪａｖａ（登録商標）のコンパイラによりコンパイルすることにより、ルールコントローラ７４を生成する。
【００３６】
なお、ルールとして、ｏｒ条件が含まれている場合、１つのルールに対して複数のキーが生成される場合がある。
例えば、ルールが「保険種類＝“個人保険”」ａｎｄ「旅行先＝“アメリカ”」ａｎｄ（「目的＝“ビジネス”」ｏｒ「目的＝“観光”」）ａｎｄ「保険金額＞１０００」となっている場合、「保険種類＝“個人保険”」と、「旅行先＝“アメリカ”」と、「目的＝“ビジネス”」とにおける文字列“個人保険”と“アメリカ”と“ビジネス”とが抽出され、キーが生成される。また、「保険種類＝“個人保険”」と、「旅行先＝“アメリカ”」と、「目的＝“観光”」とにおける文字列“個人保険”と“アメリカ”と“観光”とが抽出され、キーが生成される。そして、このルールは、ルール表において、生成された２つのキーの両方に対応付けられる。
【００３７】
図２０は、ＪＶルール７６を生成する処理の説明図である。
ＪＶルール生成部３５は、スプレッドシート７１に記述されたルールに含まれる各名称を、マッピング情報７３に基づき、クラス名や関数名に変更する。そして、ＪＶルール生成部３５は、予め定められたロジックに従い、ルールをＪａｖａ（登録商標）のプログラムコードに変換する。そして、ＪＶルール生成部３５は、変換したプログラムコードを、通常のＪａｖａ（登録商標）のコンパイラによりＪＶルール７６を生成する。
なお、プログラムコードに変換する際、ＪＶルール生成部３５は、各属性情報を、プログラムコードにコメントとして所定の形式で含めておく。これは、後にプログラムコードから、スプレッドシート７１を逆生成することができるようにするためである。
【００３８】
次に、図４に基づき、ルール評価部４０及び評価要求入力部５０の処理について説明する。
（Ｓ３１：コード取得処理）
ＪＶルール管理部４３は、ルールコントローラ生成部３４によって生成されたルールコントローラ７４と、ＪＶルール生成部３５によって生成されたＪＶルール７６とを取得して、記憶装置に記憶する。
【００３９】
（Ｓ３２：評価要求送信処理）
評価要求送信部５１は、入力装置６４を介したユーザの操作に従い、評価要求をネットワークを介してルール評価部４０へ送信する。評価要求には、ルールに対する入力となる評価値が含まれている。
【００４０】
（Ｓ３３：評価要求受信処理）
評価要求受信部４１は、Ｓ３２で送信された評価要求を受信する。
【００４１】
（Ｓ３４：ルール特定処理）
ＪＶルール管理部４３は、ルールコントローラ７４を実行する。すると、ルールコントローラ７４は、Ｓ３３で受信された評価要求に含まれる評価値から、文字列を抽出して、抽出した文字列を連結してキーを生成する。そして、ルールコントローラ７４は、生成したキーにより、ルール表７５を引いて、該当するルールを特定する。
【００４２】
（Ｓ３５：コード実行処理）
ＪＶルール管理部４３は、Ｓ３３で受信された評価要求に含まれる評価値を入力として、Ｓ３４で特定されたルールから生成されたＪＶルール７６を実行する。
この際、ＪＶルール管理部４３は、ＪＶルール７６に数値演算が含まれる場合には、十進数演算部４４により数値演算をさせる。十進数演算部４４は、数値演算をＣＰＵの浮動小数点演算の機能を利用せず、十進数により数値演算を行う。浮動小数点演算を行うと、演算に誤差が発生する場合があり、その結果、ルールでの判定が間違う恐れがある。そこで、十進数演算部４４を用いて、浮動小数点演算を行うことなく、十進数により数値演算を行うことで、ルールでの判定を正しく行う。
【００４３】
（Ｓ３６：評価結果送信処理）
評価結果返信部４２は、Ｓ３５でＪＶルール７６が実行された結果をネットワークを介して評価要求入力部５０へ送信する。
【００４４】
（Ｓ３７：評価結果受信処理）
評価結果受信部５２は、Ｓ３６で送信された評価結果を受信する。
【００４５】
（Ｓ３８：評価結果表示処理）
評価結果表示部５３は、Ｓ３７で受信された評価結果を表示装置６３に表示する。
【００４６】
図２１は、評価要求の説明図であり、図２２は、評価要求の例を示す図である。
図２１、図２２では、評価要求には、評価値として、期日と、入力データ１〜ｎとが含まれている。入力データ１〜ｎについては、それぞれ何を設定する欄であるかが予め定められる。例えば、図２２では、入力データ１には国、入力データ２には性別、入力データｎには年齢が設定されている。
【００４７】
Ｓ３４では、ルールコントローラ７４は、評価値から文字列を抽出して、抽出した文字列を連結してキーを生成するとした。ここで、入力データ１〜ｎのどの入力データに設定された文字列を連結してキーを生成するかが予め定められているとしてもよい。また、入力データ１〜ｎに含まれる文字列の全ての組合せをキーとして生成し、各キーに基づき該当するルールを特定してもよい。
【００４８】
図２３は、評価結果の説明図であり、図２４は、評価結果の例を示す図である。
図２３、図２４では、評価結果には、出力データ１〜ｎが含まれている。出力データ１〜ｎについては、それぞれどのルールの結果を設定する欄であるかが予め定められる。例えば、図２４では、出力データ１にはルール１の結果、出力データ２にはルール２の結果、出力データ３にはルール３の結果、出力データｎにはルールｎの結果が設定されている。
なお、評価結果には、Ｓ３５でＪＶルール７６が実行されたルールに関する結果だけが設定される。
【００４９】
以上のように、実施の形態１に係るコード生成システム１０では、ルールをプログラムコードに変換する時にルール表７５を含むルールコントローラ７４を生成しておく。そして、プログラムコードを実行してルールの評価を行うときに、評価要求に含まれる評価値に基づきルールコントローラ７４がルール表７５を引いて、実行する必要があるルールを絞り込む。そのため、ルールが増えた場合であっても実行するプログラムコードの数を抑えることができ、ルールを評価する処理の時間を短くすることができる。
【００５０】
また、実施の形態１に係るコード生成システム１０では、ａｎｄやｏｒ等で連結した論理式を、さらにａｎｄやｏｒ等で連結して複雑なルールをスプレッドシートに記述することもできる。また、条件分岐を含む複雑なルールをスプレッドシートに記述することもできる。そのため、非常に利便性が高い。
一方で、このように複雑なルールを記述すると、記述したルールに誤りが含まれる可能性が高くなる。しかし、実施の形態１に係るコード生成システム１０では、ルールをプログラムコードに変換する前に、テスト値７２を入力として、ルール全体を評価した結果や、ルールを構成する各論理式を評価した結果を簡易的に得ることができる。そのため、ルールの誤りに早期に気づくことができ、手戻りの発生を減らし効率的にルールの記述を行うことができる。
【００５１】
つまり、一般的には、ＪＶルール生成部３５で生成されたＪＶルール７６に対して、単体テストが実施され、この時点で初めてルールの誤りに気づくことになる。この場合、改めてスプレッドシートのルールを修正して、再びＪＶルール生成部３５がＪＶルール７６を生成して、単体テストが実施されることになる。
これに対して、実施の形態１に係るコード生成システム１０では、スプレッドシートにルールを記述し、テスト値７２を入力した時点で、ルールに誤りがあることに気づくことができる。そのため、手戻りの発生を減らし効率的にルールの記述を行うことができる。
もちろん、テスト値７２による検証は簡易的なものであるため、単体テストが実施されれば、新たに誤りが発見される場合がある。しかし、テスト値７２による検証が行われているため、単体テストで発見される誤りの数は少なくなり、手戻りの発生は少なくなる。
【００５２】
また、スプレッドシート７１には、ルールを評価した結果だけでなく、各論理式を評価した結果も表示されるため、誤りのある箇所の特定が容易に行える。そのため、効率的にルールの記述を行うことができる。
【００５３】
なお、上記説明では、Ｓ２４でＪＶルール生成部３５は、単純にルールをプログラムコードに変換していた。しかし、ルール表７５を引いて該当するルールを特定した時点で、既にルール表７５を引く際に使用した条件については満たしていることが確認できているとみなすことができる。そこで、ＪＶルール生成部３５は、ルールをプログラムコードに変換する際、キーとして利用した文字列についての論理式は、プログラムコードに含めず、残りの論理式のみプログラムコードに変換するとしてもよい。
【００５４】
図２５は、キーとして利用した文字列の項目についての論理式は、プログラムコードに含めず、残りの論理式のみプログラムコードに変換する例を示す図である。図２５では、図１９に示すＲｕｌｅ００１をプログラムコードに変換する例を示している。
図１９では、Ｒｕｌｅ００１から、“個人保険”と“アメリカ”と“ビジネス”とが抽出され、“個人保険”と“アメリカ”と“ビジネス”とが連結されてキーとされた。そのため、図２５に示すように、ＪＶルール生成部３５は、これらの文字列の抽出元の論理式である「保険種類＝“個人保険”」と、「旅行先＝“アメリカ”」と、「目的＝“ビジネス”」とについては、プログラムコードには変換せず、残りの「保険金額＞１０００」のみをプログラムコードに変換する。
この場合、Ｓ３４でルール表７５を引いて該当するルールを特定することにより、「保険種類＝“個人保険”」ａｎｄ「旅行先＝“アメリカ”」ａｎｄ「目的＝“ビジネス”」については、該当すると判定されたとみなされ、Ｓ３５で残りの「保険金額＞１０００」についての判定がされる。
【００５５】
また、上記説明では、図５に示すように、ルールの記述を汎用的に行えるように、スプレッドシートのルール欄に論理式で全てのルールを記述するようにした。しかし、例えば、多くのルールで利用される条件があるような場合には、その条件に関しては別途欄を設けて記述するようにしてもよい。これにより、ルールの記述が容易になり、ルールの記述に誤りが含まれる可能性が低くなる。
【００５６】
図２６は、一部の条件を示すルールを別欄に記述するようにした例を示す図である。
図２６では、保険種類、旅行先、目的について別欄を設けている。保険種類、旅行先、目的については、各欄に記述された文字列であるか否かがａｎｄ条件で判定される。例えば、１行目に記述されたルールは、図１９に示すＲｕｌｅ００１と同様に、「保険種類＝“個人保険”」ａｎｄ「旅行先＝“アメリカ”」ａｎｄ「目的＝“ビジネス”」ａｎｄ「保険金額＞１０００」というルールを示している。
【００５７】
一部の条件を示すルールを別欄に記述する場合、別欄に記述したルールの文字列を連結してルール表７５のキーとしてもよい。
【００５８】
また、ルールの記述としては、図７に示すルールの記述規則からも分かるように、真偽値を返すルール、文字列を返すルール、数値を返すルールを記述することができる。また、一定の値を返すルールだけでなく、条件により返す値が変わる条件分岐を含むルールを記述することができる。また、あるルールの評価結果は他のルールの入力として利用することができ、複数のルール間の関係を記述した相関ルールを記述することができる。
【００５９】
また、例えば、２つの日が指定された場合に、２つの日の間の日数をカウントする関数等、ルールで使用する関数が必要な場合には、その関数のプログラムコードを別途開発しておき、ルールから呼び出して利用できるようにしておいてもよい。
【００６０】
図２７は、実施の形態１に示したルール定義部２０、プログラムコード生成部３０、ルール評価部４０、評価要求入力部５０の各装置のハードウェア構成の例を示す図である。
各装置はコンピュータであり、各装置の各要素をプログラムで実現することができる。
各装置のハードウェア構成としては、バスに、演算装置９０１、外部記憶装置９０２、主記憶装置９０３、通信装置９０４、入出力装置９０５が接続されている。
【００６１】
演算装置９０１は、プログラムを実行するＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）等である。外部記憶装置９０２は、例えばＲＯＭ（Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）やフラッシュメモリ、ハードディスク装置等である。主記憶装置９０３は、例えばＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）等である。通信装置９０４は、例えば通信ボード等である。入出力装置９０５は、例えばマウス、キーボード、ディスプレイ装置等である。
【００６２】
プログラムは、通常は外部記憶装置９０２に記憶されており、主記憶装置９０３にロードされた状態で、順次演算装置９０１に読み込まれ、実行される。
プログラムは、ルール入力部２１、構文解析部２２、総合検証部２３、個別検証部２４、検証結果表示部２５、スプレッドシート管理部３１、マッピング情報管理部３２、構文解析部３３、ルールコントローラ生成部３４、ＪＶルール生成部３５、評価要求受信部４１、評価結果返信部４２、ＪＶルール管理部４３、十進数演算部４４、評価要求送信部５１、評価結果受信部５２、評価結果表示部５３として説明している機能を実現するプログラムである。
更に、外部記憶装置９０２にはオペレーティングシステム（ＯＳ）も記憶されており、ＯＳの少なくとも一部が主記憶装置９０３にロードされ、演算装置９０１はＯＳを実行しながら、上記プログラムを実行する。
また、実施の形態１〜５の説明において、「〜の入力」、「〜の解析」、「〜の検証」、「〜の表示」、「〜の取得」、「〜の生成」、「〜の受信」、「〜の送信」、「〜の実行」等として説明している処理の結果を示す情報やデータや信号値や変数値が主記憶装置９０３にファイルとして記憶されている。
【００６３】
なお、図２７の構成は、あくまでも各装置のハードウェア構成の一例を示すものであり、各装置のハードウェア構成は図２７に記載の構成に限らず、他の構成であってもよい。
【符号の説明】
【００６４】
１０  コード生成システム、２０  ルール定義部、２１  ルール入力部、２２  構文解析部、２３  総合検証部、２４  個別検証部、２５  検証結果表示部、３０  プログラムコード生成部、３１  スプレッドシート管理部、３２  マッピング情報管理部、３３  構文解析部、３４  ルールコントローラ生成部、３５  ＪＶルール生成部、４０  ルール評価部、４１  評価要求受信部、４２  評価結果返信部、４３  ＪＶルール管理部、４４  十進数演算部、５０  評価要求入力部、５１  評価要求送信部、５２  評価結果受信部、５３  評価結果表示部、６１  表示装置、６２  入力装置、６３  表示装置、６４  入力装置、７１  スプレッドシート、７２  テスト値、７３  マッピング情報、７４  ルールコントローラ、７５  ルール表、７６  ＪＶルール。
【図１】
0006000213.tif 000002
【図２】
0006000213.tif 000003
【図３】
0006000213.tif 000004
【図４】
0006000213.tif 000005
【図５】
0006000213.tif 000006
【図６】
0006000213.tif 000007
【図７】
0006000213.tif 000008
【図８】
0006000213.tif 000009
【図９】
0006000213.tif 000010
【図１０】
0006000213.tif 000011
【図１１】
0006000213.tif 000012
【図１２】
0006000213.tif 000013
【図１３】
0006000213.tif 000014
【図１４】
0006000213.tif 000015
【図１５】
0006000213.tif 000016
【図１６】
0006000213.tif 000017
【図１７】
0006000213.tif 000018
【図１８】
0006000213.tif 000019
【図１９】
0006000213.tif 000020
【図２０】
0006000213.tif 000021
【図２１】
0006000213.tif 000022
【図２２】
0006000213.tif 000023
【図２３】
0006000213.tif 000024
【図２４】
0006000213.tif 000025
【図２５】
0006000213.tif 000026
【図２６】
0006000213.tif 000027
【図２７】
0006000213.tif 000028