(57)【要約】【課題】ソフトウェアに処理を容易に追加できるようにする。【解決手段】記憶部１１は、所定の実行契機イベントの発生に応じて実行する処理の手順が記述された追加プログラム２ｂ，２ｃ，３ｂ，３ｃと、実行契機イベントを示すイベント識別情報と、処理を示す処理識別情報とを記憶する。演算部１２は、実行契機イベントを発生させるイベント呼び出し命令を含む実行プログラム１を実行するとともに、管理情報１２ａに、イベント識別情報と処理識別情報とを登録する。そして演算部１２は、実行契機イベントが発生すると、管理情報１２ａを参照し、実行契機イベントを示すイベント識別情報に対応付けられた処理識別情報に対応する処理を、追加プログラム２ｂ，２ｃ，３ｂ，３ｃに基づいて実行する。【選択図】図１
2017146892.tif 000002
【特許請求の範囲】
【請求項１】
所定の実行契機イベントの発生に応じて実行する処理の手順が記述された追加プログラムと、前記実行契機イベントを示すイベント識別情報と、前記処理を示す処理識別情報とを記憶する記憶部と、
前記実行契機イベントを発生させるイベント呼び出し命令を含む実行プログラムを実行するとともに、イベントと該イベントの発生に応じて実行する処理との対応関係管理用の管理情報に、前記イベント識別情報と前記処理識別情報とを登録し、前記実行契機イベントの発生に応じて、前記管理情報を参照し、前記実行契機イベントを示す前記イベント識別情報に対応付けられた前記処理識別情報に対応する前記処理を、前記追加プログラムに基づいて実行する演算部と、
を有する情報処理装置。
【請求項２】
前記記憶部は、前記実行契機イベントが発生したときに実行する第１処理の手順が記述された第１追加プログラム、および前記実行契機イベントを示す前記イベント識別情報と前記第１処理を示す第１処理識別情報と前記１処理の優先度との組を含む第１ファイルを記憶し、かつ、前記実行契機イベントが発生したときに実行する第２処理の手順が記述された第２追加プログラム、および前記実行契機イベントを示す前記イベント識別情報と前記第２処理を示す第２処理識別情報と前記第２処理の優先度との組を含む第２ファイルを記憶し、
前記演算部は、
前記実行プログラムの実行が開始されると、前記管理情報に、前記第１ファイルに含まれる前記イベント識別情報と前記第１処理識別情報と前記１処理の優先度との組、および前記第２ファイルに含まれる前記イベント識別情報と前記第２処理識別情報と前記２処理の優先度との組を登録し、
前記イベント呼び出し命令の実行により前記実行契機イベントが発生すると、前記管理情報を参照し、前記実行契機イベントを示す前記イベント識別情報に対応付けられた前記第１処理識別情報と前記第２処理識別情報とのそれぞれで示される前記第１処理と前記第２処理とを、前記第１追加プログラムと前記第２追加プログラムとに基づいて、優先度が高い順に実行する、
請求項１記載の情報処理装置。
【請求項３】
前記記憶部は、第３ファイル、第４ファイル、および設定ファイルを記憶し、
前記第３ファイルは、前記実行契機イベントが発生したときに実行する第３処理の手順が記述された第３追加プログラム、および前記イベント識別情報と前記第３処理を示す第３処理識別情報との組を含み、
前記第４ファイルは、前記実行契機イベントが発生したときに実行する第４処理の手順が記述された第４追加プログラム、および前記イベント識別情報と前記第４処理を示す第４処理識別情報との組を含み、
前記設定ファイルは、前記第３処理識別情報または前記第４処理識別情報の削除指示が設定されており、
前記演算部は、
前記実行プログラムの実行が開始されると、前記管理情報に、前記第３ファイルに含まれる前記イベント識別情報と前記第３処理識別情報との組、および前記第４ファイルに含まれる前記イベント識別情報と前記第４処理識別情報との組を登録し、
前記設定ファイルに従って、前記第３ファイルに含まれる前記イベント識別情報と前記第３処理識別情報との組、または前記第４ファイルに含まれる前記イベント識別情報と前記第４処理識別情報との組を、前記管理情報から削除する、
請求項１または２記載の情報処理装置。
【請求項４】
コンピュータが、
前記実行契機イベントを発生させるイベント呼び出し命令を含む実行プログラムを実行するとともに、所定の実行契機イベントの発生に応じて実行する処理の手順が記述された追加プログラムと、前記実行契機イベントを示すイベント識別情報と、前記処理を示す処理識別情報とを記憶する記憶部を参照し、イベントと該イベントの発生に応じて実行する処理との対応関係管理用の管理情報に、前記イベント識別情報と前記処理識別情報とを登録し、
前記実行契機イベントの発生に応じて、前記管理情報を参照し、前記実行契機イベントを示す前記イベント識別情報に対応付けられた前記処理識別情報に対応する前記処理を、前記追加プログラムに基づいて実行する、
処理実行管理方法。
【請求項５】
コンピュータに、
前記実行契機イベントを発生させるイベント呼び出し命令を含む実行プログラムを実行するとともに、所定の実行契機イベントの発生に応じて実行する処理の手順が記述された追加プログラムと、前記実行契機イベントを示すイベント識別情報と、前記処理を示す処理識別情報とを記憶する記憶部を参照し、イベントと該イベントの発生に応じて実行する処理との対応関係管理用の管理情報に、前記イベント識別情報と前記処理識別情報とを登録し、
前記実行契機イベントの発生に応じて、前記管理情報を参照し、前記実行契機イベントを示す前記イベント識別情報に対応付けられた前記処理識別情報に対応する前記処理を、前記追加プログラムに基づいて実行する、
処理を実行させる処理実行管理プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、情報処理装置、処理実行管理方法、および処理実行管理プログラムに関する。
【背景技術】
【０００２】
企業内のコンピュータシステムを構築する場合、顧客の運用に従い、既存のソフトウェアをカスタマイズすることが多い。例えば、顧客の要望に応じて、既存のソフトウェアの挙動が変更される。
【０００３】
ソフトウェアをカスタマイズする際、ソースコードの書き換えを行うと、影響範囲の確認や品質確保のため、コストや手間がかかる。そこで、顧客からの要望に応じてプラグインのようなプログラムを元のプログラムに追加して、元のプログラムの挙動を変更することが行われる。プログラムの挙動を変更する方法として、例えばＤＬＬ（Dynamic Link Library）などの機能呼び出し、ＤＩ（Dependency Injection）がある。
【０００４】
なおソフトウェアの修正に関連する従来技術としては、例えば次のような技術がある。第１の従来技術は、プログラム更新処理を実行した直後に新プログラムの動作検証を行うプログラム遠隔更新システムである。第２の従来技術は、依存関係にある複数の関数の修正を、通信を停止させずに、かつ、システムの誤動作を引き起こさずに実行するプログラム更新システムである。第３の従来技術は、従来のプラグイン構成をもつデバイス管理アプリケーションにおけるリモートタスクの実行制御の改善技術である。第４の従来技術は、問題を表す状況データの分析や、状況データに関連付けられた問題が既知の問題と合致するかどうかの判別、インストール可能な累積修復の送信などを行う、修復送達システムのためのコンピュータ実装プロセスである。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開２００４−３２６２８７号公報
【特許文献２】特開２０１５−４１２７３号公報
【特許文献３】特開２０１５−１１４８９５号公報
【特許文献４】特表２０１５−５０５０９７号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
しかし、従来の技術で、ソフトウェアに対してプラグインにより処理を追加できる箇所は、例えば、明示的に外部のプログラムを特定した呼び出しを行っている部分に限定され、処理追加可能箇所の自由度が低い。明示的な外部プログラムの呼び出しを行っている部分以外で、新たなプログラムによる処理を追加するには、ソースコードの書き換えを行うことになり、手間がかかる。
【０００７】
１つの側面では、本件は、ソフトウェアに処理を容易に追加できるようにすることを目的とする。
【課題を解決するための手段】
【０００８】
１つの案では、以下のような記憶部と演算部とを有する情報処理装置が提供される。記憶部は、所定の実行契機イベントの発生に応じて実行する処理の手順が記述された追加プログラムと、実行契機イベントを示すイベント識別情報と、処理を示す処理識別情報とを記憶する。演算部は、実行契機イベントを発生させるイベント呼び出し命令を含む実行プログラムを実行するとともに、イベントと該イベントの発生に応じて実行する処理との対応関係管理用の管理情報に、イベント識別情報と処理識別情報とを登録する。そして演算部は、実行契機イベントの発生に応じて、管理情報を参照し、実行契機イベントを示すイベント識別情報に対応付けられた処理識別情報に対応する処理を、追加プログラムに基づいて実行する。
【発明の効果】
【０００９】
１態様によれば、ソフトウェアで実行する処理を容易に追加できる。
【図面の簡単な説明】
【００１０】
【図１】第１の実施の形態に係る情報処理装置の構成例を示す図である。
【図２】第２の実施の形態に用いるコンピュータのハードウェアの一構成例を示す図である。
【図３】コンピュータの機能を示すブロック図である。
【図４】プラグインの一例を示す図である。
【図５】設定ファイルの一例を示す図である。
【図６】プラグイン管理情報の一例を示す図である。
【図７】プラグイン登録処理の概要を示す図である。
【図８】プラグイン登録処理の手順の一例を示すフローチャートの前半を示す図である。
【図９】プラグイン登録処理の手順の一例を示すフローチャートの後半を示す図である。
【図１０】メソッド実行処理の概要を示す図である。
【図１１】メソッド実行処理の手順の一例を示すフローチャートである。
【発明を実施するための形態】
【００１１】
以下、本実施の形態について図面を参照して説明する。なお各実施の形態は、矛盾のない範囲で複数の実施の形態を組み合わせて実施することができる。
〔第１の実施の形態〕
まず、第１の実施の形態ついて説明する。
【００１２】
図１は、第１の実施の形態に係る情報処理装置の構成例を示す図である。情報処理装置１０は、記憶部１１と演算部１２とを有する。
記憶部１１は、プラグインとして提供されている複数のファイル２，３を記憶する。ファイル２，３には、追加プログラム２ｂ，２ｃ，３ｂ，３ｃと自己登録情報２ａ，３ａとが含まれる。
【００１３】
追加プログラム２ｂ，２ｃ，３ｂ，３ｃには、所定の実行契機イベントが発生したときに実行する処理の手順が記述されている。なお実行契機イベントは、プラグイン以外の実行プログラム１、または追加プログラム２ｂ，２ｃ，３ｂ，３ｃの実行によって発生するイベントである。例えば追加プログラム２ｂには、処理識別情報「処理Ａ」の処理の手順が記述されている。追加プログラム２ｃには、処理識別情報「処理Ｂ」の処理の手順が記述されている。追加プログラム３ｂには、処理識別情報「処理Ｃ」の処理の手順が記述されている。追加プログラム３ｃには、処理識別情報「処理Ｄ」の処理の手順が記述されている。
【００１４】
自己登録情報２ａ，３ａには、実行契機イベントを示すイベント識別情報と、その実行契機イベントが発生したときに実行する処理を示す処理識別情報との組が設定されている。なお自己登録情報２ａ，３ａには、各処理の優先度を設定することもできる。例えばファイル２の自己登録情報２ａには、イベント識別情報「イベントＸ１」と処理識別情報「処理Ａ」と優先度「１」との組、およびイベント識別情報「イベントＸ２」と処理識別情報「処理Ｂ」と優先度「１」の組が設定されている。ファイル３の自己登録情報３ａには、イベント識別情報「イベントＹ１」と処理識別情報「処理Ｃ」と優先度「２」との組、およびイベント識別情報「イベントＸ２」と処理識別情報「処理Ｄ」と優先度「２」の組が設定されている。図１の例では、優先度の値が小さいほど、優先度が高いものとする。すなわち優先度「１」の処理の方が、優先度「２」の処理のよりも、実行の優先度が高い。
【００１５】
演算部１２は、実行契機イベントを発生させるイベント呼び出し命令を含む実行プログラム１を実行する。実行プログラム１の実行を開始した演算部１２は、各ファイル２，３の自己登録情報２ａ，３ａを参照する。そして演算部１２は、イベントと該イベントが発生したときに実行する処理との対応関係管理用の管理情報１２ａに、ファイル２，３内の自己登録情報２ａ，３ａに含まれるイベント識別情報と処理識別情報との組を登録する。なお演算部１２は、自己登録情報２ａ，３ａ内の処理識別情報に処理の優先度が設定されている場合、処理の優先度も含めて、管理情報１２ａに登録する。
【００１６】
その後、イベント呼び出し命令の実行により実行契機イベントが発生すると、演算部１２は、管理情報１２ａを参照し、実行契機イベントを示すイベント識別情報に対応付けられた処理識別情報で示される処理を、ファイル内の追加プログラムに基づいて実行する。なお演算部１２は、管理情報１２ａ内の各処理に優先度が設定されている場合、共通のイベントに対応付けられた複数の処理については、優先度の高い順に実行する。
【００１７】
例えば実行プログラム１には、イベント識別情報「イベントＸ１」、「イベントＸ２」、「イベントＸ３」の各イベントの呼び出し命令が含まれている。演算部１２が実行プログラム１を実行し、まず「イベントＸ１呼び出し命令」が実行されると、「イベントＸ１」のイベントが発生する。演算部１２は、「イベントＸ１」のイベントが発生すると、管理情報１２ａを参照し、「イベントＸ１」に対して「処理Ａ」が対応付けられていることを認識する。そして演算部１２は、「処理Ａ」の処理手順が記述された追加プログラム２ｂを実行する。
【００１８】
追加プログラム２ｂには、イベント識別情報「イベントＹ１」のイベントの呼び出しを行う「イベントＹ１呼び出し命令」が含まれている。演算部１２が追加プログラム２ｂを実行し、「イベントＹ１呼び出し命令」が実行されると、「イベントＹ１」のイベントが発生する。演算部１２は、「イベントＹ１」のイベントが発生すると、管理情報１２ａを参照し、「イベントＹ１」に対して「処理Ｃ」が対応付けられていることを認識する。そして演算部１２は、「処理Ｃ」の処理手順が記述された追加プログラム３ｂを実行する。
【００１９】
追加プログラム３ｂの実行が完了すると、演算部１２は、追加プログラム２ｂの「イベントＹ１呼び出し命令」以降の処理を実行する。追加プログラム２ｂの実行が完了すると、演算部１２は、実行プログラム１の「イベントＸ１呼び出し命令」以降の処理を実行する。
【００２０】
その後、「イベントＸ２呼び出し命令」が実行されると、「イベントＸ２」のイベントが発生する。演算部１２は、「イベントＸ２」のイベントが発生すると、管理情報１２ａを参照し、「イベントＸ２」に対して「処理Ｂ」と「処理Ｄ」が対応付けられていることを認識する。発生したイベントに対して実行する処理が複数あるため、演算部１２は、「処理Ｂ」と「処理Ｄ」との優先度を比較する。図１の例では、「処理Ｂ」の優先度が「１」、「処理Ｄ」の優先度が「２」であり、「処理Ｂ」の方が優先度が高い。そこで演算部１２は、優先度が高い方の「処理Ｂ」の処理手順が記述された追加プログラム２ｃを実行する。追加プログラム２ｃの実行が完了すると、演算部１２は、優先度が低い方の「処理Ｄ」の処理手順が記述された追加プログラム３ｃを実行する。追加プログラム３ｃの実行が完了すると、演算部１２は、実行プログラム１の「イベントＸ２呼び出し命令」以降の処理を実行する。
【００２１】
その後、「イベントＸ３呼び出し命令」が実行されると、「イベントＸ３」のイベントが発生する。演算部１２は、「イベントＸ３」のイベントが発生すると、管理情報１２ａを参照し、「イベントＸ３」に対して処理識別情報が対応付けられていないことを認識する。そこで、演算部１２は、実行プログラム１の「イベントＸ３呼び出し命令」以降の処理を実行する。
【００２２】
このように、第１の実施の形態では、プラグインとして用意されたファイル２，３内に自己登録情報２ａ，３ａを設けておけば、実行プログラム１へのプラグインを組み込むことができ、処理の追加が非常に容易である。例えば開発者は、実行プログラム１の開発時には、後に処理を追加できるように、多数のイベント呼出し命令を挿入しておく。その後、開発者は、実行プログラム１に処理を追加するための追加プログラムを作成した際には、予め設定しておいたイベント呼出し命令のいずれかが実行されるタイミングで作成した追加プログラムが実行されるように、自己登録情報を作成する。これにより、実行プログラム１のソースコードを書き換えることなく、実行プログラム１からの追加プログラムの呼び出しが可能となる。
【００２３】
しかも実行プログラム１内のイベント呼び出し命令の位置に加え、追加プログラム２ｂ内のイベント呼び出し命令の位置にも、プラグインによって処理を追加することができる。その結果、ソフトウェアの機能修正の柔軟性が向上する。
【００２４】
さらに第１の実施の形態では、各処理に優先度を設定することができる。この優先度を用いて、共通のイベント発生時に実行する複数の処理の処理順を、容易に設定することができる。その結果、処理順に制約のある追加プログラムを実行させるときでも、簡単な優先度設定により、制約を満たす適切な順番で処理を実行させることができる。
【００２５】
なお、自己登録情報２ａ，３ａには、単に処理の追加に関する情報だけでなく、既存の処理の実行抑止に関する情報を設定することもできる。例えば、記憶部１１に、管理情報１２ａに登録されたいずれかの処理識別情報の削除指示が設定された設定ファイルを格納しておく。この場合、演算部１２は、設定ファイルに従って、イベント識別情報と処理識別情報との組を、管理情報１２ａから削除する。例えば設定ファイルにおいて、ファイル２によって「イベントＸ２」に対して設定された「処理Ｂ」の削除が指定されていた場合、管理情報１２ａから、「イベントＸ２」に対応付けられた「処理Ｂ」が削除される。
【００２６】
このような設定ファイルを用いた既存の処理の実行抑止を行うことで、特定のイベント発生時に実行する処理を変更できる。例えばファイル２が先に作成され、その後、ファイル３が作成されたものとする。この場合、ファイル３を記憶部１１に格納する際に、設定ファイルにおいて、「イベントＸ２」に対して設定された「処理Ｂ」の削除を指定することで、「イベントＸ２」のイベントが発生した際に実行される処理が「処理Ｂ」から「処理Ｄ」に変更される。
【００２７】
なお、演算部１２は、例えば情報処理装置１０が有するプロセッサにより実現することができる。また、記憶部１１は、例えば情報処理装置１０が有するメモリまたはストレージ装置により実現することができる。
【００２８】
以上が第１の実施の形態についての説明である。
〔第２の実施の形態〕
次に第２の実施の形態について説明する。第２の実施の形態は、プラグインモジュールを用いて、ソフトウェアに基づいて実行できる処理の追加・変更・削除を容易に行えるようにしたものである。
【００２９】
なおソフトウェアに基づいて実行できる処理の追加・変更・削除により、そのソフトウェアを実行するコンピュータの機能が、追加・変更・削除される。そこで以下の説明では、ソフトウェアに基づいて実行できる処理の追加・変更・削除は、コンピュータに対する機能の追加・変更・削除と同等であるものとする。
【００３０】
＜ハードウェア構成＞
第２の実施の形態の機能を実現することができるコンピュータのハードウェア構成について、図２を参照して説明する。
【００３１】
図２は、第２の実施の形態に用いるコンピュータのハードウェアの一構成例を示す図である。コンピュータ１００は、プロセッサ１０１によって装置全体が制御されている。プロセッサ１０１には、バス１０９を介してメモリ１０２と複数の周辺機器が接続されている。プロセッサ１０１は、マルチプロセッサであってもよい。プロセッサ１０１は、例えばＣＰＵ（Central Processing Unit）、ＭＰＵ（Micro Processing Unit）、またはＤＳＰ（Digital Signal Processor）である。プロセッサ１０１がプログラムを実行することで実現する機能の少なくとも一部を、ＡＳＩＣ（Application Specific Integrated Circuit）、ＰＬＤ（Programmable Logic Device）などの電子回路で実現してもよい。
【００３２】
メモリ１０２は、コンピュータ１００の主記憶装置として使用される。メモリ１０２には、プロセッサ１０１に実行させるＯＳ（Operating System）のプログラムやアプリケーションプログラムの少なくとも一部が一時的に格納される。また、メモリ１０２には、プロセッサ１０１による処理に必要な各種データが格納される。メモリ１０２としては、例えばＲＡＭ（Random Access Memory）などの揮発性の半導体記憶装置が使用される。
【００３３】
バス１０９に接続されている周辺機器としては、ストレージ装置１０３、グラフィック処理装置１０４、入力インタフェース１０５、光学ドライブ装置１０６、機器接続インタフェース１０７およびネットワークインタフェース１０８がある。
【００３４】
ストレージ装置１０３は、内蔵した記憶媒体に対して、電気的または磁気的にデータの書き込みおよび読み出しを行う。ストレージ装置１０３は、コンピュータの補助記憶装置として使用される。ストレージ装置１０３には、ＯＳのプログラム、アプリケーションプログラム、および各種データが格納される。なお、ストレージ装置１０３としては、例えばＨＤＤ（Hard Disk Drive）やＳＳＤ（Solid State Drive）を使用することができる。
【００３５】
グラフィック処理装置１０４には、モニタ２１が接続されている。グラフィック処理装置１０４は、プロセッサ１０１からの命令に従って、画像をモニタ２１の画面に表示させる。モニタ２１としては、ＣＲＴ（Cathode Ray Tube）を用いた表示装置や液晶表示装置などがある。
【００３６】
入力インタフェース１０５には、キーボード２２とマウス２３とが接続されている。入力インタフェース１０５は、キーボード２２やマウス２３から送られてくる信号をプロセッサ１０１に送信する。なお、マウス２３は、ポインティングデバイスの一例であり、他のポインティングデバイスを使用することもできる。他のポインティングデバイスとしては、タッチパネル、タブレット、タッチパッド、トラックボールなどがある。
【００３７】
光学ドライブ装置１０６は、レーザ光などを利用して、光ディスク２４に記録されたデータの読み取りを行う。光ディスク２４は、光の反射によって読み取り可能なようにデータが記録された可搬型の記録媒体である。光ディスク２４には、ＤＶＤ（Digital Versatile Disc）、ＤＶＤ−ＲＡＭ、ＣＤ−ＲＯＭ（Compact Disc Read Only Memory）、ＣＤ−Ｒ（Recordable）／ＲＷ（ReWritable）などがある。
【００３８】
機器接続インタフェース１０７は、コンピュータ１００に周辺機器を接続するための通信インタフェースである。例えば機器接続インタフェース１０７には、メモリ装置２５やメモリリーダライタ２６を接続することができる。メモリ装置２５は、機器接続インタフェース１０７との通信機能を搭載した記録媒体である。メモリリーダライタ２６は、メモリカード２７へのデータの書き込み、またはメモリカード２７からのデータの読み出しを行う装置である。メモリカード２７は、カード型の記録媒体である。
【００３９】
ネットワークインタフェース１０８は、ネットワーク２０に接続されている。ネットワークインタフェース１０８は、ネットワーク２０を介して、他のコンピュータまたは通信機器との間でデータの送受信を行う。
【００４０】
以上のようなハードウェア構成によって、第２の実施の形態の処理機能を実現することができる。なお、第１の実施の形態に示した情報処理装置１０も、図２に示したコンピュータ１００と同様のハードウェアにより実現することができる。
【００４１】
コンピュータ１００は、例えばコンピュータ読み取り可能な記録媒体に記録されたプログラムを実行することにより、第２の実施の形態の処理機能を実現する。コンピュータ１００に実行させる処理内容を記述したプログラムは、様々な記録媒体に記録しておくことができる。例えば、コンピュータ１００に実行させるプログラムをストレージ装置１０３に格納しておくことができる。プロセッサ１０１は、ストレージ装置１０３内のプログラムの少なくとも一部をメモリ１０２にロードし、プログラムを実行する。またコンピュータ１００に実行させるプログラムを、光ディスク２４、メモリ装置２５、メモリカード２７などの可搬型記録媒体に記録しておくこともできる。可搬型記録媒体に格納されたプログラムは、例えばプロセッサ１０１からの制御により、ストレージ装置１０３にインストールされた後、実行可能となる。またプロセッサ１０１が、可搬型記録媒体から直接プログラムを読み出して実行することもできる。
【００４２】
＜処理機能＞
次に、プラグインによる機能の変更を実現するためにコンピュータ１００が有する処理機能について説明する。なお、以下の説明では、追加する機能の処理が記述されたプラグインプログラムを、単に「プラグイン」と呼ぶこととする。
【００４３】
図３は、コンピュータの機能を示すブロック図である。コンピュータ１００は、記憶部１１０とプログラム実行部１２０とを有する。
記憶部１１０は、機能対象のソフトウェアのプログラム本体１１１、設定ファイル１１２、および複数のプラグインモジュール１１３，１１４，・・・を記憶している。
【００４４】
プログラム本体１１１は、ウェブアプリケーションなどの各種機能を実現するための実行形式のファイルである。プログラム本体１１１は、プラグインマネージャプログラム１１１ａ、非プラグイン１１１ｂ、および複数のプラグイン１１１ｃ，１１１ｄ，・・・を含んでいる。
【００４５】
プラグインマネージャプログラム１１１ａは、プラグインの読み込み、プラグイン内の機能の登録、イベント発生に応じたプラグインの起動などのプラグイン管理処理の手順が記述されたプログラムである。
【００４６】
非プラグイン１１１ｂは、プログラム本体１１１にプラグインとは別に組み込まれたプログラムである。非プラグイン１１１ｂは、プログラム記述中の複数の箇所に、イベント呼び出し命令が記述されている。
【００４７】
プラグイン１１１ｃ，１１１ｄは、他のプログラムからプラグインとして呼び出され、実行されるプログラムである。プラグイン１１１ｃ，１１１ｄは、イベントに登録する複数の機能を含んでいる。プラグイン１１１ｃ，１１１ｄにも、イベント呼び出し命令を含めることができる。
【００４８】
設定ファイル１１２は、プラグイン内の機能をイベントに登録するため情報が記載されたファイルである。設定ファイル１１２には、例えば、プログラム本体１１１に含まれるプラグインのうちの、実行を抑止するプラグインを指定する情報を含めることもできる。
【００４９】
複数のプラグインモジュール１１３，１１４，・・・は、所定のプラグインフォルダ１１０−１内に格納されている。複数のプラグインモジュール１１３，１１４，・・・は、例えばＤＬＬであり、複数のプラグイン１１３ａ，１１３ｂ，・・・を含んでいる。複数のプラグイン１１３ａ，１１３ｂ，・・・は、それぞれ複数の機能を有することができる。また、複数のプラグインモジュール１１３，１１４，・・・は、１つのプログラム内に含めることもできる。すなわち、１つのプラグイン１１３ａは複数のプラグインモジュールを有し、１つのプラグインモジュールは複数のプラグインを有し、１つのプラグインは複数の機能を有するという、階層構造となっている。
【００５０】
プログラム実行部１２０は、プロセッサ１０１がプログラム本体１１１の記述に従って処理を実行することで実現する機能である、例えばプログラム実行部１２０は、プロセッサ１０１によって生成されるプロセスである。プログラム実行部１２０は、プラグインマネージャ１２１とプラグイン管理情報１２２とを有する。プラグインマネージャ１２１は、プラグインマネージャプログラム１１１ａの記述に従ってプラグインの管理処理を実行する。例えばプラグインマネージャ１２１は、プログラム実行部１２０によって生成されるスレッドである。プラグイン管理情報１２２は、プログラム本体の実行中に呼び出し可能なプラグインの管理情報である。プラグイン管理情報１２２には、例えばイベント名と、そのイベント名のイベントが発生したときに実行するプラグインとの対応関係が示されている。
【００５１】
＜データ構造＞
以下、コンピュータ１００で管理される情報のデータ構造について説明する。
まず、プラグイン１１３ａの内部構造を説明する。なお、プラグインモジュール１１３内の他のプラグイン１１３ｂ，・・・やプログラム本体１１１内のプラグイン１１１ｃ，１１１ｄ，・・・の内部構造も、プラグイン１１３ａと同様である。
【００５２】
なお、以下の例では、オブジェクト指向プログラミングにおけるメソッドを登録対象の機能とする。各メソッドにはメソッド名が付与されており、メソッド名により登録する機能が指定できる。
【００５３】
図４は、プラグインの一例を示す図である。プラグイン１１３ａには、イベント自己登録情報１１３−１、公開データ１１３−２、非公開データ１１３−３、およびメソッドごとの複数のプログラム１１３−４〜１１３−６が含まれる。
【００５４】
イベント自己登録情報１１３−１は、プラグイン１１３ａ内の機能をプラグインマネージャ１２１に登録するための情報である。イベント自己登録情報１１３−１には、例えば、どのイベントに、どの機能を、どの優先度で登録するかが指定されている。例えばイベント自己登録情報１１３−１には、「eveventXにmethodBを優先度１１０で登録、entXにmethodAを優先度１００で登録、eventYにmethodAを優先度０で登録」というような情報が記載されている。
【００５５】
公開データ１１３−２は、プラグイン１１３ａの実行に使用するデータのうち、他のプラグインに公開するデータである。非公開データ１１３−２は、プラグイン１１３ａの実行に使用するデータのうち、他のプラグインに非公開とするデータである。
【００５６】
複数のプログラム１１３−４〜１１３−６は、プラグイン１１３ａで提供されるメソッドの処理手順が記述されたプログラムである。複数のプログラム１１３−４〜１１３−６内には、イベント呼び出し命令を含めることができる。
【００５７】
次に設定ファイルについて具体的に説明する。
図５は、設定ファイルの一例を示す図である。図５に示す設定ファイル１１２は、ＸＭＬ（Extensible Markup Language）によって記述されている。
【００５８】
例えば「<PluginInfo type=“add”>」というタグで示された箇所の記述によって、所定のイベントに対して、そのイベントが発生したときに実行するメソッドが示されている。この記述に基づいて、プラグインマネージャ１２１が、プラグイン管理情報１２２に、該当イベントが発生したときに実行するメソッドを登録する。
【００５９】
また「<PluginInfo type=“del”>」というタグで示された箇所の記述によって、実行を抑止するプラグインまたはメソッドが示されている。例えば実行を抑止する対象として、プラグインの名称だけが指定されていれば、そのプラグイン全体の実行が抑止される。また実行を抑止する対象として、プラグインの名称と、停止するメソッドのメソッド名が指定されていれば、該当プラグイン内の指定されたメソッドの実行のみが抑止される。
【００６０】
次にプラグインマネージャ１２１によって生成されるプラグイン管理情報１２２について説明する。
図６は、プラグイン管理情報の一例を示す図である。プラグイン管理情報１２２には、イベント管理テーブル１２２ａと複数の優先度管理テーブル１２２ｂ，１２２ｃ，・・・とが含まれる。
【００６１】
イベント管理テーブル１２２ａには、メソッドを登録可能なイベント名が登録されている。登録されているイベント名には、対応する優先度管理テーブルへのポインタが設定されている。
【００６２】
優先度管理テーブル１２２ｂ，１２２ｃ，・・・は、それぞれイベント管理テーブル１２２ａ内のいずれかのイベント名に対応付けられている。優先度管理テーブル１２２ｂ，１２２ｃ，・・・には、対応するイベント名で示されるイベントが発生しときに実行するメソッドの優先度が設定されている。例えば優先度管理テーブル１２２ｂ，１２２ｃ，・・・には、優先度に対応付けてメソッドのメソッド名が設定されている。登録されているメソッドは、例えば優先度の数値が小さい程、先に実行される。メソッド名は、対応するメソッドをコンピュータ内で一意に識別する名称である。例えばメソッド名により、対応するメソッドを有するプラグインモジュールやプラグインを識別することができる。
【００６３】
＜処理手順＞
次に、コンピュータ１００におけるプラグインの管理に関する処理手順について説明する。プラグインの管理に関する処理は、大別してプラグイン登録処理とイベント管理処理とがある。
【００６４】
まず、プラグイン登録処理について説明する。
図７は、プラグイン登録処理の概要を示す図である。なお、図７では、登録するメソッドの実行契機となるイベントの指定と、メソッドの優先度の指定との表記は省略している。また図７に示すメソッド名は、クラス名を除いた名前を示している。
【００６５】
プログラム実行部１２０によるプログラム本体１１１の実行開始時、プラグインマネージャ１２１は、プログラム本体１１１から既存のプラグイン１１１ｃのイベント自己登録情報を読み込む。図７の例では、プラグイン１１１ｃのイベント自己登録情報には、メソッド名「methodUpdate」、「methodDel」の２つのメソッドを登録することが示されている。プラグイン１１１ｃのイベント自己登録情報を読み込んだプラグインマネージャ１２１は、プラグイン管理情報１２２に、所定のイベントに対応付けられた優先度管理テーブルに、メソッド名「methodUpdate」、「methodDel」を登録する。
【００６６】
次にプラグインマネージャ１２１は、プラグインモジュール１１３によって提供されているプラグイン１１３ａ，１１３ｂそれぞれのイベント自己登録情報を読み込む。図７の例では、プラグイン１１３ａのイベント自己登録情報には、機能追加用のメソッドとして、メソッド名「methodAdd」のメソッドを登録することが示されている。プラグインマネージャ１２１は、プラグイン１１３ａのイベント自己登録情報に基づいて、プラグイン管理情報１２２内の所定のイベントに対応付けられた優先度管理テーブルに、メソッド名「methodAdd」を登録する。
【００６７】
また図７の例では、プラグイン１１３ｂのイベント自己登録情報には、プログラム本体１１１に含まれた機能の変更を目的としたメソッドとして、メソッド名「methodUpdate」のメソッドを登録することが示されている。プラグインマネージャ１２１は、プラグイン１１３ｂのイベント自己登録情報に基づいて、プラグイン管理情報１２２内の所定のイベントに対応付けられた優先度管理テーブルに、メソッド名「methodUpdate」を登録する。この際、プラグインマネージャ１２１は、すでにプラグイン管理情報１２２内にメソッド名「methodUpdate」の他のプラグインのメソッドが登録されていた場合、該当メソッドのメソッド名を、プラグイン管理情報１２２から削除する。
【００６８】
このように、プラグイン内のイベント自己登録情報によるメソッドの追加、変更が可能である。なお、図７には示していないが、プラグイン内のイベント自己登録情報により、他のプラグインによって登録されているメソッドの実行を抑止（無効化）することも可能である。
【００６９】
メソッドの追加、変更、抑止は、設定ファイル１１２によって指定することもできる。例えばプラグインマネージャ１２１は、各プラグインのイベント自己登録情報に基づく情報登録完了後、設定ファイル１１２を読み込む。図７の例では、設定ファイル１１２には、既存のプラグイン１１１ｃによって登録されたメソッドの無効化が指定されている。プラグインマネージャ１２１は、設定ファイル１１２に基づいて、プラグイン管理情報１２２に登録されている、メソッド名「methodUpdate」、「methodDel」のメソッドを無効化する。例えばプラグインマネージャ１２１は、プラグイン管理情報１２２からメソッド名「methodUpdate」、「methodDel」を削除する。
【００７０】
以下、図８、図９を参照して、プラグイン登録処理の手順を詳細に説明する。
図８は、プラグイン登録処理の手順の一例を示すフローチャートの前半を示す図である。以下、図８に示す処理をステップ番号に沿って説明する。なお、プラグイン登録処理は、プログラム実行部１２０が起動されたとき、またはプラグイン再読み込みの指示が入力されたときに実行される。
【００７１】
［ステップＳ１０１］プラグインマネージャ１２１は、予め指定されたフォルダ（プラグインフォルダ１１０−１）配下のプラグインモジュールを検索する。
［ステップＳ１０２］プラグインマネージャ１２１は、プログラム本体１１１もプラグインモジュールの１つとみなし、プラグインモジュールそれぞれを処理対象として、ステップＳ１０３〜Ｓ１１３の処理を実行する。例えばプラグインマネージャ１２１は、最初にプログラム本体１１１を処理対象とし、その後、プラグインフォルダ１１０−１内の各プラグインモジュールを処理対象とする。
【００７２】
［ステップＳ１０３］プラグインマネージャ１２１は、処理対象のプラグインモジュール内のプラグインを検索する。
［ステップＳ１０４］プラグインマネージャ１２１は、ステップＳ１０３の検索で見つかったプラグインそれぞれを処理対象として、ステップＳ１０５〜Ｓ１１２の処理を実行する。
【００７３】
［ステップＳ１０５］プラグインマネージャ１２１は、プラグインのイベント自己登録情報を読み込む。
［ステップＳ１０６］プラグインマネージャ１２１は、イベント自己登録情報において指定されたメソッドそれぞれを処理対象として、ステップＳ１０７〜Ｓ１１１の処理を実行する。
【００７４】
［ステップＳ１０７］プラグインマネージャ１２１は、処理対象のメソッドの実行契機として指定されているイベントのイベント名が、プラグイン管理情報１２２に登録済みか否かを判断する。例えばプラグインマネージャ１２１は、プラグイン管理情報１２２内のイベント管理テーブル１２２ａを参照し、イベント管理テーブル１２２ａに該当するイベント名が登録されていれば、登録済みと判断する。イベント名が登録済みの場合、処理がステップＳ１０９に進められる。イベント名が登録済みでなければ、処理がステップＳ１０８に進められる。
【００７５】
［ステップＳ１０８］プラグインマネージャ１２１は、プラグイン管理情報１２２にイベント名を追加し、指定されたメソッドを、指定された優先度で登録する。例えばプラグインマネージャ１２１は、指定されたメソッドの実行契機として指定されたイベントのイベント名を、イベント管理テーブル１２２ａに登録する。次にプラグインマネージャ１２１は、登録したイベント名に対応する優先度管理テーブルを生成する。さらにプラグインマネージャ１２１は、登録したイベント名に対応付けて、生成した優先度管理テーブルへのポインタをイベント管理テーブル１２２ａに設定する。そしてプラグインマネージャ１２１は、生成した優先度管理テーブル内に、処理対象の指定されたメソッドの優先度と、そのメソッドのメソッド名との組を登録する。その後、処理がステップＳ１１２に進められる。
【００７６】
［ステップＳ１０９］プラグインマネージャ１２１は、処理対象のメソッドに指定されている優先度が、既にプラグイン管理情報１２２に登録済みか否かを判断する。例えばプラグインマネージャ１２１は、イベント管理テーブル１２２ａから、処理対象のメソッドに指定されているイベントのイベント名に対応付けられたポインタを抽出し、そのポインタで指し示された優先度管理テーブルを参照する。そしてプラグインマネージャ１２１は、参照した優先度管理テーブル内に、処理対象のメソッドに指定されている優先度が登録されている場合、該当優先度が登録済みであると判断する。優先度が登録済みであれば、処理がステップＳ１１１に進められる。優先度が登録済みでなければ、処理がステップＳ１１０に進められる。
【００７７】
［ステップＳ１１０］プラグインマネージャ１２１は、プラグイン管理情報１２２内の、処理対象のメソッドに指定されているイベントのイベント名に対応付けて、そのメソッドに指定された優先度と、そのメソッドのメソッド名との組を登録する。例えばプラグインマネージャ１２１は、ステップＳ１０９で参照した優先度管理テーブルに対して、処理対象のメソッドに指定された優先度と、そのメソッドのメソッド名との組を設定する。その後、処理がステップＳ１１２に進められる。
【００７８】
［ステップＳ１１１］プラグインマネージャ１２１は、プラグイン管理情報１２２内の、処理対象のメソッドに指定されているイベントのイベント名と優先度との組に対応付けて、処理対象のメソッドのメソッド名を追加する。例えばプラグインマネージャ１２１は、ステップＳ１０９で参照した優先度管理テーブルから、処理対象のメソッドの優先度が設定されているレコードを特定する。そしてプラグインマネージャ１２１は、特定したレコードのメソッドとして、処理対象のメソッドのメソッド名を追加する。
【００７９】
［ステップＳ１１２］プラグインマネージャ１２１は、処理対象のプラグイン内のすべてのメソッドに対して、ステップＳ１０７〜Ｓ１１１の処理が完了した場合、処理をステップＳ１１３に進める。
【００８０】
［ステップＳ１１３］プラグインマネージャ１２１は、処理対象のプラグインモジュール内のすべてのプラグインに対して、ステップＳ１０５〜Ｓ１１２の処理が完了した場合、処理をステップＳ１１４に進める。
【００８１】
［ステップＳ１１４］プラグインマネージャ１２１は、指定されたフォルダ内のすべてのプラグインモジュールに対して、ステップＳ１０３〜Ｓ１１３の処理が完了した場合、処理をステップＳ１２１（図９参照）に進める。
【００８２】
図９は、プラグイン登録処理の手順の一例を示すフローチャートの後半を示す図である。以下、図９に示す処理をステップ番号に沿って説明する。
［ステップＳ１２１］プラグインマネージャ１２１は、設定ファイル１１２を検索する。例えばプラグインマネージャ１２１は、所定のフォルダ内から、設定ファイル１１２の名称として予め指定されているファイル名のファイルを検索する。
【００８３】
［ステップＳ１２２］プラグインマネージャ１２１は、ステップＳ１２１の検索により設定ファイル１１２が見つかったか否かを判断する。設定ファイル１１２が見つかった場合、処理がステップＳ１２３に進められる。設定ファイル１１２が見つからなかった場合、プラグイン登録処理が終了する。
【００８４】
［ステップＳ１２３］プラグインマネージャ１２１は、設定ファイル１１２内の設定項目それぞれを処理対象として、ステップＳ１２４〜Ｓ１３０の処理を実行する。
［ステップＳ１２４］プラグインマネージャ１２１は、処理対象の設定項目の内容は、メソッドの登録指定か否かを判断する。登録指定であれば、処理がステップＳ１２５に進められる。登録指定でなければ、削除指定であるため、処理がステップＳ１２８に進められる。
【００８５】
［ステップＳ１２５］プラグインマネージャ１２１は、設定項目において、登録指定されているメソッドの起動契機として指定されているイベントが、プラグイン管理情報１２２に登録済みのイベントか否かを判断する。登録済みのイベントであれば、処理がステップＳ１２６に進められる。登録済みのイベントでなければ、処理がステップＳ１２７に進められる。
【００８６】
［ステップＳ１２６］プラグインマネージャ１２１は、登録指定されているメソッドの起動契機として指定されているイベントの登録を、プラグイン管理情報１２２から削除する。例えばプラグインマネージャ１２１は、プラグイン管理情報１２２内のイベント管理テーブル１２２ａから、該当するイベントのイベント名とポインタとの組を削除する。さらにプラグインマネージャ１２１は、削除したポインタで指し示されている優先度管理テーブルを削除する。
【００８７】
［ステップＳ１２７］プラグインマネージャ１２１は、登録指定されているメソッドの起動契機として指定されているイベントに対応付けて、該当メソッドのメソッド名と優先度とをプラグイン管理情報１２２に登録する。例えばプラグインマネージャ１２１は、登録指定されたメソッドの実行契機として指定されたイベントのイベント名を、イベント管理テーブル１２２ａに登録する。そしてプラグインマネージャ１２１は、登録したイベント名に対応する優先度管理テーブルを生成する。さらにプラグインマネージャ１２１は、登録したイベント名に対応付けて、生成した優先度管理テーブルへのポインタをイベント管理テーブル１２２ａに設定する。その後、処理がステップＳ１３１に進められる。
【００８８】
［ステップＳ１２８］プラグインマネージャ１２１は、処理対象の設定項目の内容が、プラグイン全体の削除指定か否かを判断する。プラグイン全体の削除指定であれば、処理がステップＳ１２９に進められる。プラグイン内の一部のメソッドの削除指定であれば、処理がステップＳ１３０に進められる。
【００８９】
［ステップＳ１２９］プラグインマネージャ１２１は、削除指定されているプラグイン内の全メソッドの情報を、プラグイン管理情報１２２から削除する。その後、処理がステップＳ１３１に進められる。
【００９０】
［ステップＳ１３０］プラグインマネージャ１２１は、削除指定されているプラグイン内の指定されたメソッドの情報を、プラグイン管理情報１２２から削除する。
［ステップＳ１３１］プラグインマネージャ１２１は、すべての設定項目についてステップＳ１２４〜Ｓ１３０の処理が完了した場合、プラグイン登録処理を終了する。
【００９１】
このようにして、プログラム本体１１１を修正することなく、一部の機能（メソッド）の追加・変更・削除が可能となる。追加・変更・削除の結果は、プラグイン管理情報１２２に示されている。そして、プラグインマネージャ１２１は、何らかのイベントが発生すると、プラグイン管理情報１２２を参照して実行するメソッドを判断し、該当メソッドを実行する。
【００９２】
図１０は、メソッド実行処理の概要を示す図である。プラグインマネージャ１２１は、非プラグインのメソッドまたはプラグインのメソッドの実行中にイベントの発生を検知すると、プラグイン管理情報１２２を参照し、発生したイベントに対応付けられたメソッドを特定する。なおイベントを発生させたメソッドは、呼び出されるメソッドの実行に利用する情報を、イベントの引数として渡すことができる。
【００９３】
イベントに対応付けられたメソッドが複数ある場合、プラグインマネージャ１２１は、各メソッドの優先度の順に実行する。例えばプラグインマネージャ１２１は、優先度の値が小さい順に、発生したイベントに対応するメソッドを選択し、そのメソッドを実行する。同じ優先度のメソッドが複数ある場合、プラグインマネージャ１２１は、該当するメソッドの数分のスレッドを生成し、生成したスレッドを用いて同じ優先度のメソッドを並列に実行する。プラグインマネージャ１２１は、優先度が上位のメソッドの実行が完了後、次に優先度が高いメソッドを実行する。
【００９４】
このように、優先度の順番にメソッドが実行されるため、メソッドの優先度を適切に設定することで、１つのイベントが発生したときに実行する複数のメソッドの実行順を、容易に管理できる。
【００９５】
次に、イベント発生時のメソッドの実行処理手順について具体的に説明する。
図１１は、メソッド実行処理の手順の一例を示すフローチャートである。以下、図１１に示す処理をステップ番号に沿って説明する。
【００９６】
［ステップＳ２０１］プラグインマネージャ１２１は、実行中のプログラム内に設定されたイベントの呼び出し命令が実行されイベントが発生すると、発生したイベントが、プラグイン管理情報１２２に登録済みのイベントか否かを判断する。例えばプラグインマネージャ１２１は、プラグイン管理情報１２２内のイベント管理テーブル１２２ａに、発生したイベントのイベント名が登録されていれば、登録済みであると判断する。登録済みの場合、処理がステップＳ２０２に進められる。登録されていなければ、メソッド実行処理が終了する。
【００９７】
［ステップＳ２０２］プラグインマネージャ１２１は、プラグイン管理情報１２２から、発生したイベントのイベント名に対応付けて登録された優先度管理テーブルを取得する。
【００９８】
［ステップＳ２０３］プラグインマネージャ１２１は、取得した優先度管理テーブルに登録されている優先度それぞれを処理対象として、ステップＳ２０４〜ステップＳ２１０の処理を実行する。
【００９９】
［ステップＳ２０４］プラグインマネージャ１２１は、処理対象の優先度で登録されたメソッドのメソッド名のすべてを、ステップＳ２０２で取得した優先度管理テーブルから取得する。
【０１００】
［ステップＳ２０５］プラグインマネージャ１２１は、取得したメソッド名が１つか否かを判断する。取得したメソッド名が１つであれば、処理がステップＳ２０６に進められる。取得したメソッド名が２つ以上であれば、処理がステップＳ２０７に進められる。
【０１０１】
［ステップＳ２０６］プラグインマネージャ１２１は、取得したメソッド名に対応するメソッドを実行する。その後、処理がステップＳ２１１に進められる。
［ステップＳ２０７］プラグインマネージャ１２１は、取得したメソッド名それぞれについて、ステップＳ２０８の処理を実行する。
【０１０２】
［ステップＳ２０８］プラグインマネージャ１２１は、取得したメソッド名それぞれに対応するメソッドを、別スレッドで実行する。
［ステップＳ２０９］プラグインマネージャ１２１は、取得したすべてのメソッド名に対応するメソッドの実行が開始されると、処理をステップＳ２１０に進める。
【０１０３】
［ステップＳ２１０］プラグインマネージャ１２１は、メソッドを実行するすべてのスレッドの処理が完了するまで待機する。すべてのスレッドの処理が完了すると、処理がステップＳ２１１に進められる。
【０１０４】
［ステップＳ２１１］プラグインマネージャ１２１は、発生したイベントに登録されたすべての優先度に対してステップＳ２０４〜Ｓ２１０の処理が完了すると、メソッド実行処理を終了する。
【０１０５】
このようにして、イベントの発生を契機として、プラグインとして提供されているメソッドが実行される。
＜第２の実施の形態の効果＞
第２の実施の形態によれば、プラグインの開発者は、プラグイン内のメソッドの実行契機となるイベント名をイベント自己登録情報に設定しておくだけで、所望のタイミングで追加のメソッドをコンピュータ１００に実行させることができる。すなわち、プログラムを修正せずに、コンピュータ１００で実行できる機能を追加・変更・削除でき、プログラム本体１１１に対するプラグインの組み込みが非常に容易となっている。また、モジュールを機能ごとに分割することにより、１つの顧客でカスタマイズした内容を他の顧客に転用することも容易である。他の顧客に転用した場合でも、プログラム本体やモジュールの修正が不要であるため、期間短縮・費用削減・品質向上につながる。
【０１０６】
しかも、１つのイベントに複数のメソッドが対応付けられている場合は、優先度順に実行される。このような優先度制御を利用すれば、追加するメソッドの実行順を容易に管理することができる。すなわち、ある既存メソッドの実行が完了した後に、別の追加メソッドを実行させる場合、開発者は、追加メソッドの実行契機のイベントを、既存メソッドの実行契機と同じに設定する。このとき開発者は、追加メソッドの優先度は、既存メソッドの優先度より低く設定する。これにより、既存メソッドの実行完了後に追加メソッドを実行させることができる。
【０１０７】
なお、プラグインのメソッドとイベントとの対応関係は、設定ファイル１１２を用いて、プラグインモジュール外で指定することも可能である。設定ファイル１１２を用いれば、既存のメソッドの実行を抑止することも容易である。
【０１０８】
さらに、追加されたプラグインの実行により発生するイベントを発行契機として他のプラグインを実行させることも可能であり、プラグインの実行契機の柔軟性が非常に高い。例えばイベント呼び出しが定義された場所であれば、どこにでも機能を追加可能である。またプラグイン内で定義された既存機能を無効化し、新たなプラグイン（機能）を登録することで、機能の変更が可能である。さらに、プラグイン内で定義された既存機能を無効化することで、機能を削除可能である。しかも、プラグインの実行契機となるイベントの発生元は、プログラム本体１１１に限定されず、プラグインの実行により発生したメソッドであってもよい。
【０１０９】
以上が第２の実施の形態についての説明である。
〔その他の実施の形態〕
以上、実施の形態を例示したが、実施の形態で示した各部の構成は同様の機能を有する他のものに置換することができる。また、他の任意の構成物や工程が付加されてもよい。さらに、前述した実施の形態のうちの任意の２以上の構成（特徴）を組み合わせたものであってもよい。
【符号の説明】
【０１１０】
１  実行プログラム
２，３  ファイル
２ａ，３ａ  自己登録情報
２ｂ，２ｃ，３ｂ，３ｃ  追加プログラム
１０  情報処理装置
１１  記憶部
１２  演算部
１２ａ  管理情報
【図１】
2017146892.tif 000003
【図２】
2017146892.tif 000004
【図３】
2017146892.tif 000005
【図４】
2017146892.tif 000006
【図５】
2017146892.tif 000007
【図６】
2017146892.tif 000008
【図７】
2017146892.tif 000009
【図８】
2017146892.tif 000010
【図９】
2017146892.tif 000011
【図１０】
2017146892.tif 000012
【図１１】
2017146892.tif 000013