(57)【特許請求の範囲】
【請求項１】
コンテナ型仮想コンピュータ管理装置であって、
ベースコンテナに一以上のコマンドを実行して第１のコンテナを生成するコンテナ構築手段と、
前記第１のコンテナを改変して生成された第２のコンテナと、前記第１のコンテナとの差分を示す第１の差分情報を生成する差分抽出手段と、
前記第１の差分情報に基づいて、前記コンテナ構築手段が前記第２のコンテナを再現するための再現コマンドを推定する推定手段と、を備えるコンテナ型仮想コンピュータ管理装置。
【請求項２】
前記推定手段は、
前記一以上のコマンドの中から前記差分情報に対応するコマンドを特定し、
前記コンテナ構築手段が前記特定された前記差分情報に対応するコマンドを実行して生成したコンテナと、実行せずに生成したコンテナとの差分が、前記差分情報と一致するときは、前記特定された前記差分情報に対応するコマンドを前記再現コマンドとする、請求項１記載のコンテナ型仮想コンピュータ管理装置。
【請求項３】
前記第１のコンテナを生成するために実行する一以上のコマンドを有する定義ファイルを記憶する手段と、
前記推定手段によって推定された前記再現コマンドを前記定義ファイルから削除する更新手段と、をさらに備える請求項２記載のコンテナ型仮想コンピュータ管理装置。
【請求項４】
前記コンテナ構築手段が過去に実行したコマンドの履歴を記憶する記憶手段をさらに備え、
前記推定手段は、前記コマンドの履歴の中の、前記第１のコンテナに係るベースコンテナと同一のベースコンテナに対して実行された一以上のコマンドからなるコマンド群を所定の基準で評価し、評価結果に基づいて前記再現コマンドの候補を特定する、請求項１記載のコンテナ型仮想コンピュータ管理装置。
【請求項５】
前記第１のコンテナの指定を受け付ける手段と、
前記第２のコンテナの指定を受け付ける手段と、
前記再現コマンドの候補を出力する手段と、をさらに備える請求項４記載のコンテナ型仮想コンピュータ管理装置。
【請求項６】
前記推定手段は、前記出力された再現コマンドの候補の中から選択されたコマンドを前記再現コマンドとする、請求項５記載のコンテナ型仮想コンピュータ管理装置。
【請求項７】
前記第１のコンテナを生成するために実行する一以上のコマンドを有する定義ファイルを記憶する手段と、
前記推定手段によって推定された前記再現コマンドを前記定義ファイルに追加する更新手段と、をさらに備える請求項５記載のコンテナ型仮想コンピュータ管理装置。
【請求項８】
前記推定手段は、前記コマンド群に含まれる各コマンドについて、前記コマンド群の中での出現回数を計数し、その計数結果に基づいて各コマンドを評価する、請求項４記載のコンテナ型仮想コンピュータ管理装置。
【請求項９】
前記推定手段は、前記コマンド群に含まれる各コマンドについて、最近実行されたコマンドほど評価を高くする、請求項４記載のコンテナ型仮想コンピュータ管理装置。
【請求項１０】
コンテナ型仮想コンピュータ管理装置が行う方法であって、
コンテナ構築手段が、ベースコンテナに一以上のコマンドを実行して第１のコンテナを生成し、
差分抽出手段が、前記第１のコンテナを改変して生成された第２のコンテナと、前記第１のコンテナとの差分を示す差分情報を生成し、
推定手段が、前記第１の差分情報に基づいて、前記コンテナ構築手段が前記第２のコンテナを再現するための再現コマンドを推定する、方法。
【請求項１１】
コンテナ型仮想コンピュータ管理装置のためのコンピュータプログラムであって、
コンピュータに実行されると、
ベースコンテナに一以上のコマンドを実行して第１のコンテナを生成するコンテナ構築手段と、
前記第１のコンテナを改変して生成された第２のコンテナと、前記第１のコンテナとの差分を示す第１の差分情報を生成する差分抽出手段と、
前記第１の差分情報に基づいて、前記コンテナ構築手段が前記第２のコンテナを再現するための再現コマンドを推定する推定手段と、を備えるコンテナ型仮想コンピュータ管理装置を実現するコンピュータプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、コンテナ型仮想コンピュータを管理する技術に関し、特に、ユーザによって加えられた仮想コンピュータに対する変更を適切に定義体に反映する技術に関する。
【背景技術】
【０００２】
近年、１台の物理計算機の計算資源を複数の論理計算機に分割し、計算機の管理コスト及び計算機の準備時間を低減する、計算機の仮想化技術に対する機運が高まっている。計算機の仮想化技術には、計算機のハードウェア全体を仮想的に構築し、その仮想計算機上のオペレーションシステムから動作させるハイパバイザ型仮想化技術と、オペレーションシステムまでは他の仮想計算機と共有し、アプリケーション及びファイルのみを別の計算機として分割するコンテナ型仮想化技術がある。【０００３】
ハイパバイザ型仮想化技術は、オペレーションシステムを自由に選択できる。しかしながら、その一方で、各論理計算機が大容量かつ複雑になるため構築に時間を要し、かつ、複数の論理計算機を動作させるための物理計算機（ホスト計算機）の負荷が高くなる。【０００４】
こうした特徴から、ハイパバイザ型はＤｅｓｋｔｏｐ  ａｓ  ａ  ＳＥｒｖｉｃｅ  （ＤａａＳ）といった、ユーザに計算機そのものをネットワーク越しに提供するサービスに用いられている。一方、システム構築のために利用されるＰｌａｔｆｏｒｍ  ａｓ  ａ  ＳＥｒｖｉｃｅ（ＰａａＳ）やＩｎｆｒａｓｔｒｕｃｔｕｒｅ  ａｓ  ａ  ＳＥｒｖｉｃｅ（ＩａａＳ）向けには、オペレーションシステムの制約があるものの、低容量で起動が高速なコンテナ型仮想化技術が適用されるようになっている。【０００５】
さて、コンテナ型仮想化技術においては、仮想計算機のベースとなる計算機ファイルであるベースコンテナと、ベースコンテナに対して実施する一以上のコマンドを記述した定義ファイルとに基づいて、コンテナ構築プログラムが独自のコンテナを作成するという手順が一般的である。このとき、定義ファイルに含まれるコマンドは、例えば、ファイルの変更を行うコマンド及びアプリケーションのインストールを行うコマンドなどがある。そのため、開発環境において開発者が作成した独自コンテナをユーザ環境に移植しなくても、同一のベースコンテナ及び同一の定義ファイルがあれば、ユーザ環境で同一の独自コンテナを作成することができる。【０００６】
一方で、開発環境では正常に動作していた独自コンテナが、ユーザ環境では、開発環境との設定等の違いにより正常に動作しないことがしばしば発生する。あるいは、ユーザの都合により、急遽一部の仕様が変更されることもある。そのため、ユーザ環境において、運用の担当者による手作業で独自コンテナに何らかの変更が加えられることがある（現場対応）。多くの場合、運用の担当者は種々のコマンドを試行錯誤しながら所望のコンテナに変更する。【０００７】
このようなユーザ環境での運用の担当者による変更は、一般にはコンテナに対して直接実施され、定義ファイルには反映されない。そのため、改めてベースコンテナと定義ファイルから独自コンテナを作成すると、これは上記の現場対応以前の状態に戻ってしまう。【０００８】
このような現場で行われた変更を適切に取り込むために、例えば、特許文献１には、本番環境に配された分析装置が現場対応の履歴を取得し、最適な現場対応を取り込む方法が記載されている。また、特許文献２には、障害発生時に操作した運用の担当者の操作を選別し、障害復旧手順を支援する手順書を作成する方法が記載されている。
【先行技術文献】
【特許文献】
【０００９】
【特許文献１】特開２０１６−７６００３号公報
【特許文献２】特開２０１５−９５１０５号公報
【発明の概要】
【発明が解決しようとする課題】
【００１０】
特許文献１には、ユーザ環境に配された分析装置が、現場対応で入力されたコマンドとそのコマンドによって変化したファイルの履歴を管理し、これらのコマンドをファイルの最終状態を作るコマンドにひとまとめにし、最小限の現場対応コマンドを作成する方法が記載されている。【００１１】
また特許文献２には、運用の担当者が入力したコマンド履歴を監視し、その成功失敗をあわせて記録することで、試行錯誤を行った手順を除いた復旧手順を再現する方法が記載されている。【００１２】
しかしながら、何れの場合も、そもそもユーザ環境でシステムを運用するためには元来不要である分析装置あるいは監視プログラム等を配備する必要がある。そのため、保守コストの増大や計算資源の浪費を招く。【００１３】
さらには、これらの先行技術では、現場対応で行われた試行錯誤での不要なコマンドが除去され得るが、そもそも現場対応で行われた作業が正しいとは限らない。つまり、現場作業で入力された一部のコマンドを除去しても、依然として不要なコマンドが残留する可能性はあり、これにより予期しない不具合を生じさせるおそれが残る。【００１４】
そこで、本発明は上記課題に鑑みて為されたものであって、ユーザ環境で行われた現場対応の結果を再現するとともに、不要なコマンドを含まない定義ファイルを生成するコンテナ型仮想コンピュータを管理する技術を提供することを目的とする。
【課題を解決するための手段】
【００１５】
本発明の一つの実施態様に従うコンテナ型仮想コンピュータ管理装置は、ベースコンテナに一以上のコマンドを実行して第１のコンテナを生成するコンテナ構築手段と、前記第１のコンテナを改変して生成された第２のコンテナと、前記第１のコンテナとの差分を示す第１の差分情報を生成する差分抽出手段と、前記第１の差分情報に基づいて、前記コンテナ構築手段が前記第２のコンテナを再現するための再現コマンドを推定する推定手段と、を備える。
【図面の簡単な説明】
【００１６】
【図１】本発明によるコンテナ型仮想コンピュータ管理装置１の構成例
【図２】本発明による設定ファイル４０の一例
【図３】本発明による設定画面の一例
【図４】本発明によるコンテナ差分テーブル３０の構成例
【図５】本発明によるコンテナ履歴管理テーブル３２の一例
【図６】本発明によるコンテナ型仮想コンピュータ管理装置１の動作の一例
【図７】本発明による定義ファイル修正画面８０の一例
【図８】本発明によるコマンド選択画面８２の一例
【図９】本発明によるコマンド追記処理Ｐ１のフローチャート
【図１０】本発明によるコマンドスコア付け処理Ｐ２のフローチャート
【図１１】本発明によるコマンド選択画面８２の一例
【発明を実施するための形態】
【００１７】
本発明の以下の詳細な説明において、開示の一部をなす添付図面を参照するが、これらは本発明を実施できる例示的な実施形態を示すものであって本発明を限定するものではない。これらの図面において、複数の図を通じて同一の符号は同一の構成要素を示している。更に、詳細な説明は各種の例示的な実施形態を提供するが、以下に記述および図示するように、本発明は本明細書に記述および図示する実施形態に限定されるものではなく、当業者には公知または将来公知となる他の実施形態に拡張できる点に注意されたい。
【００１８】
本明細書において「本実施形態」に言及する場合、当該実施形態との関連で記述されている特定の特徴、構造または特性は、本発明の少なくとも１つの実施形態に含まれることを意味しており、本明細書の各所でこれらの語句が出現しても必ずしもすべて同一の実施形態を指している訳ではない。
【００１９】
また、以下の詳細な説明において、本発明を完全に理解されるよう多くの具体的な詳細事項を開示している。しかし、当業者には明らかなように、本発明を実施するためにこれらの具体的な詳細事項のすべてが必要な訳ではない。他の状況において、本発明を無用に分かり難くしないよう、公知の構造、材料、回路、処理およびインターフェースについては詳細に記述せず、および／またはブロック図の形式で示す場合がある。
【００２０】
さらに、以下の詳細な説明のある部分は、コンピュータ内部の動作のアルゴリズムおよび記号的表現として示す。これらのアルゴリズム的記述および記号表現は、データ処理技術に精通した当業者が自身の発明の本質を他の当業者に効果的に伝達すべく用いる手段である。アルゴリズムとは、所望の最終状態または結果に達する一連の定義されたステップである。本発明において、実行されるステップは、有形の結果を実現するための有形の量を物理的に操作することを要求する。
【００２１】
通常、但し必須ではないが、これらの量は、保存、転送、結合、比較、および他の操作が可能な電気または磁気信号の形式をなす。原理的に共通に利用できるとの理由で、これらの信号をビット、値、要素、記号、文字、項目、数、コマンド等と称することが往々にして便利であることがわかっている。しかし、これらのすべておよび同様の項目は、適切な物理量に関連付けられるべきものであり、これら物理量に付けられた便宜的なラベルに過ぎないことに留意すべきである。
【００２２】
特に別途明言しない限り、以下の記述から明らかなように、本明細書の記述を通じて、「処理する」、「計算する」、「算出する」、「判定する」、「表示する」等の用語を用いた説明は、コンピュータシステムまたは当該コンピュータシステムのレジスタおよびメモリ内の物理的（電子的）な量として表現されたデータを操作して、当該コンピュータシステムのメモリまたはレジスタまたは他の情報記憶、伝送または表示装置内の物理量として同様に表現された他のデータに変換する他の情報処理装置の動作および処理を含んでいてよい。
【００２３】
本発明はまた、本明細書における動作を実行する装置に関する。この装置は、必要な目的のために特別に構築されてもよいし、または、１つ以上のコンピュータプログラムにより選択的に起動または再設定される１つ以上の汎用コンピュータを含んでいてもよい。そのようなコンピュータプログラムは、例えば、光ディスク、磁気ディスク、読出し専用メモリ、ランダムアクセスメモリ、固体装置およびドライブ等のコンピュータ可読記憶媒体、または電子情報の保存に適している他の任意の媒体に保存できるが、これらに限定されない。
【００２４】
本明細書に示すアルゴリズムおよびディスプレイは、いかなる特定のコンピュータまたは他の装置にも本質的には関係していない。各種の汎用システムを、本明細書の教示によるプログラムおよびモジュールと共に用いてもよいが、所望の方法ステップを実行するためのより特化した装置を構築した方が便利なことが分かる場合がある。これら各種のシステムの構造は以下に開示する説明で明らかになる。本発明はまた、いかなる特定のプログラミング言語も前提としては記述していない。以下に記述するように、本発明の教示を実行するために各種のプログラミング言語を用いてもよいことが理解されよう。プログラム言語のコマンドは、１つ以上の処理装置、例えば中央処理装置（CPU）、プロセッサ、またはコントローラにより実行できる。
【００２５】
なお、以後の説明では「ａａａテーブル」、「ａａａリスト」、「ａａａＤＢ」等の表現にて本発明の情報を説明するが、これら情報はテーブル、リスト、リレーショナルデータベース等のデータ構造以外で表現されていてもよい。そのため、データ構造に依存しないことを示すために「ａａａテーブル」、「ａａａリスト」、「ａａａＤＢ」等について「ａａａ情報」と呼ぶことがある。
【００２６】
さらに、各情報の内容を説明する際に、「識別情報」、「名」、「ＩＤ」という表現を用いるが、これらについてはお互いに置換が可能である。
【００２７】
以後の説明では「プログラム」を主語として説明を行う場合があるが、プログラムはプロセッサによって実行されることで定められた処理をメモリおよび通信ポート（通信制御デバイス）を用いながら行うため、プロセッサを主語とした説明としてもよい。また、プログラムを主語として開示された処理は管理サーバ等の計算機、情報処理装置が行う処理としてもよい。また、プログラムの一部またはすべては専用ハードウェアによって実現されてもよい。
【００２８】
また、各種プログラムはプログラム配布サーバや、計算機が読み取り可能な記憶メディアによって各計算機にインストールされてもよい。
＜コンテナ型仮想コンピュータ管理装置１の構成＞
【００２９】
以下、コンテナ型仮想コンピュータ管理装置１について説明する。コンテナ型仮想コンピュータ管理装置１は、コンテナの生成及び解析などのコンテナ管理に係る処理を行う。例えば、開発環境で用いる場合、コンテナ型仮想コンピュータ管理装置１は、ユーザ環境で動作するためのユーザ用コンテナの開発に用いられる。また、ユーザ環境で用いる場合、コンテナ型仮想コンピュータ管理装置１は、開発環境と同一のベースコンテナ及び同一の定義ファイルを用いて、開発環境で生成されたユーザ用コンテナと同一のコンテナをユーザ環境で再現できる。さらに、ユーザ用コンテナ（第１のコンテナ）に対してユーザ環境において運用の担当者により改変が加えられて改変コンテナ（第２のコンテナ）が生成されたとき、コンテナ型仮想コンピュータ管理装置１は、その改変を加える前後のコンテナ（第１のコンテナと第２のコンテナ）の差分情報を生成する。このとき、多くの場合、運用の担当者は定義ファイルを更新しないので、改変の内容は定義ファイルには反映されない。そのため、改変後のコンテナを定義ファイルから自動的に生成できるようにするために、コンテナ型仮想コンピュータ管理装置１定義ファイルに加えるべき変更を特定する。
【００３０】
図１は、コンテナ型仮想コンピュータ管理装置１の構成例を示す。
【００３１】
コンテナ型仮想コンピュータ管理装置１は、プロセッサ装置１０と、メモリ装置１２と、通信インタフェース１４と、ストレージ装置１６と、これらの構成要素を接続する通信バス１８と、を有する。
【００３２】
プロセッサ装置１０は、例えば、コンピュータの中央処理装置であり、メモリ装置１２に格納されているプログラムを実行する。また、プロセッサ装置１０は、メモリ装置１２及びストレージ装置１６に対してデータの読み書きを行う。コンテナ型仮想コンピュータ管理装置１は、一または複数台のプロセッサ装置１０を有していても良い。
【００３３】
メモリ装置１２は、コンテナ型仮想コンピュータ管理装置１が使用する処理手段及び各種の情報を記憶する。メモリ装置１２は、例えば、Ｄｙｎａｍｉｃ  ＲＡＭなどの揮発メモリによって構成される高速な
読み書きが可能な記憶装置でもよいし、アプリケーションが許すならば、Ｈａｒｄ  Ｄｉｓｋ  ＤｒｉｖｅやＳｏｌＩＤ  Ｓｔａｔｅ  Ｄｉｓｋなどの大容量記憶装置でもよいし、またはＣＤ−Ｒｅｃｏｒｄａｂｌｅなどのライトワンスメディアでも構わない。また、メモリ装置１２は必ずしも単一の装置から構成されているわけではなく、複数台、複数種のメモリ装置１２をＲｅｄｕｎｄａｎｔ  Ａｒｒａｙｓ  ｏｆ  Ｉｎｅｘｐｅｎｓｉｖｅ  Ｄｉｓｋｓ（ＲＡＩＤ）のような並列構成あるいはＪｕｓｔ  ａ  Ｂｕｎｃｈ  Ｏｆ  Ｄｉｓｋｓ（ＪＢＯＤ）のような直列構成に接続して実現しても構わない。
【００３４】
通信インタフェース１４は、ネットワーク４を介して接続された他の装置に対してコマンド及びデータ４００を送信したり、及び他の装置からのコマンド及びデータを受信したりする。ここで、ネットワーク４は、物理的なケーブルを用いた有線ネットワークでも良いし、無線技術を用いた無線ネットワークでも良い。また、ネットワーク４として、Ｌｏｃａｌ  Ａｒｅａ  ＮｅｔｗｏｒｋまたはＷＩＤｅ  Ａｒｅａ  Ｎｅｔｗｏｒｋを利用することもできる。
【００３５】
コンテナ型仮想コンピュータ管理装置１は、一または複数の通信インタフェース１４を有していてもよい。例えば、コンテナ型仮想コンピュータ管理装置１が複数種類のネットワーク４で通信を行う場合、コンテナ型仮想コンピュータ管理装置１は、それぞれのネットワークの種類に対応する通信インタフェース１４を複数有していても良い。また、コンテナ型仮想コンピュータ管理装置１は、一のネットワーク４に対して複数の通信インタフェース１４を有し、そのネットワーク４を用いた通信の信頼性を高めても良い。
【００３６】
以下の説明において、特に言及しない場合は、他の装置またはユーザとのデータの送受信は、通信インタフェース１４及びネットワーク４を介して行われてもよい。
【００３７】
メモリ装置１２には、コンテナ管理プログラム１００と、コマンド推定プログラム１０６と、スコア計算プログラム１０８と、スコア計算モジュール群５０と、定義ファイル更新プログラム１１０と、画面作成プログラム１１２とが記憶されていてよい。コンテナ管理プログラム１００は、コンテナ構築プログラム１０２及びコンテナ差分分析プログラム１０４で構成されてよい。
【００３８】
これらのプログラムは、メモリ装置１２に常に格納されている必要はない。例えば、各プログラムが実行される際にネットワーク４を介して接続された別の装置からその都度取得され、メモリ装置１２にロードされてもよい。また、コンパイラーを有する態様であれば、各プログラムのソースファイルから変換されたネイティブコードがメモリ装置１２にロードされても良い。
【００３９】
ストレージ装置１６は、電子データを物理的事象に変換して長期間保存するための装置である。ストレージ装置１６は、Ｈａｒｄ  Ｄｉｓｋ  ＤｒｉｖｅやＳｏｌＩＤ  Ｓｔａｔｅ  Ｄｒｉｖｅなどの大規模不揮発記録メディアで構成された基盤の上に実現されてよい。ストレージ装置１６は、プログラムが許容する半永続保存が可能であれば、高速なＤｙｎａｍｉｃ  ＲＡＭなどの不揮発メモリで実現されても良い。応答時間の制約が許せば、ストレージ装置１６は、Ｂｒｕｅ−ｌａｙ  Ｄｉｓｃなどの更新可能な光記録メディアを用いても構わないし、ＣＤ−Ｒなどのライトワンスメディアを用いても構わない。さらには、メモリ装置１２の容量に余裕があれば、メモリ装置１２をストレージ装置１６として用いても良い。あるいは、ストレージ装置１６は、通信インタフェース１４を介して接続された外部ストレージ装置であってもよい。
【００４０】
ストレージ装置１６は、データ領域６０と、データベース領域６２とを有しても良い。
【００４１】
データ領域６０には設定ファイル４０が格納されている。設定ファイル４０は、スコア計算プログラム１０８が行う処理に関する設定情報を有する。
【００４２】
データベース領域６２には、コンテナ差分テーブル３０と、コンテナ履歴管理テーブル３２とが格納されている。
【００４３】
データベース領域６２には、一以上のデータ項目と一以上のレコードで構成されるテーブルが格納されてよい。テーブル内のデータの検索が可能であれば、各テーブルの構成は任意である。例えば、各テーブルはリレーショナルデータベース（ＲＤＢＭＳ）に従うものでも良いし、レコードに含まれるデータの制約が小さいノーエスキューエル（ＮｏＳＱＬ）に従うものでも良いし、ファイルシステムのディレクトリ構造を利用したデータ構造でも良い。
【００４４】
データベース領域６２は、ストレージ装置１６以外の領域にあっても良い。例えば、データベース領域６２は、通信インタフェース１４を介して接続された外部ストレージ装置にあって、データベース領域６２に保存されたテーブルは、ウェブを介したレストフル（ＲＥＳＴｆｕｌ）なＡＰＩでアクセスできる情報群であってもかまわない。
【００４５】
通信バス１８は、コンテナ型仮想コンピュータ管理装置１内の構成要素間でのデータの送受信に用いられる。通信バス１８は、プロセッサ装置１０用バス及びアドレスバスなどの内部バスと、Ｓｅｒｉａｌ  ＡＴＡやＰＣＩ  Ｅｘｐｒｅｓｓなどの拡張バスを接続して構成されていてもよい。通信バス１８は有線であっても良いし、無線であっても良い。
【００４６】
以下の説明において、特に言及しない場合は、プロセッサ装置１０、メモリ装置１２、通信インタフェース１４、及びストレージ装置１６間の通信は通信バス１８を介して行われてもよい。
＜コンテナ型仮想コンピュータ管理装置１のプログラムの説明＞
【００４７】
メモリ装置１２に格納されたプログラムについて説明する。
【００４８】
コンテナ構築プログラム１０２は、ベースコンテナをカスタマイズした独自コンテナを構築する。例えば、コンテナ構築プログラム１０２は、ベースとなるベースコンテナに一以上のコマンドを実行してコンテナをカスタマイズする。コンテナ構築プログラム１０２は、定義ファイルに従って、ベースコンテナのカスタマイズを行ってもよい。定義ファイルには、例えば、ベースコンテナに適用される一以上のコマンド、ファイル追加、あるいは公開する通信ポートの設定などが記述されていても良い。コンテナ構築プログラム１０２は、定義ファイルに記述された一以上のコマンドをベースコンテナに対して逐次実行し、コンテナのカスタマイズを行う。本実施形態では、コンテナ構築プログラム１０２は、開発環境で定義された定義ファイルに基づいてユーザ環境で使用するためのコンテナを構築する。このコンテナを、以下、元コンテナ９０と呼ぶ。これに対して、後述するように、元コンテナ９０に対してユーザ環境の運用担当者によって改変を加えられたコンテナを、以下、改変コンテナ９２と呼ぶ。
【００４９】
コンテナ差分分析プログラム１０４は、２つのコンテナを比較して、その差分情報を抽出する。例えば、コンテナ差分分析プログラム１０４は、ベースコンテナに対して所定のコマンドを実行して生成された第１のコンテナ（元コンテナ）と、第１のコンテナが改変された第２のコンテナ（改変コンテナ）とを入力として、第１のコンテナと第２のコンテナのストレージに格納されたファイルの差分のリストを出力してもよい。コンテナ差分分析プログラム１０４が生成した差分リストは、例えば、コンテナ差分テーブル３０に格納される。コンテナ差分分析プログラム１０４は、後述するプロジェクト単位にコンテナ差分テーブル３０を生成しても良い。
【００５０】
コマンド推定プログラム１０６は、コンテナ差分分析プログラム１０４によって生成された２つのコンテナの差分情報に基づいて、第２のコンテナを再現するためのコマンドを推定する。例えば、コマンド推定プログラム１０６は、コンテナ差分テーブル３０及びコンテナ履歴管理テーブル３２に基づいて、コンテナ構築プログラム１０２が第２のコンテナを再現するための再現コマンドを推定する。再現コマンドには、定義ファイルから削除されるべきコマンドの場合と、定義ファイルに追加されるべきコマンドの場合がある。
【００５１】
スコア計算プログラム１０８は、コマンド推定プログラム１０６が行うコマンド推定のプロセスにおいて、一以上のコマンド群の各コマンドについて所定の基準で評価する。例えば、スコア計算プログラム１０８は、コンテナ履歴管理テーブル３２の元コンテナ９０と同一ベースコンテナに対して実行された一以上のコマンド群の各コマンドについて、それぞれの評価値であるスコアを計算する。
【００５２】
スコア計算プログラム１０８は、スコア計算モジュール５０の読み込みによってその処理内容を変化させられるプログラムである。例えば、スコア計算プログラム１０８は、複数のスコア計算モジュール５０―ａ、５０−ｂ、５０−ｃのいずれかを読み込むと、それぞれのスコア計算モジュール５０―ａ、５０−ｂ、５０−ｃで指定された動作をする。スコア計算プログラム１０８がいずれのスコア計算モジュール５０―ａ、５０−ｂ、５０−ｃを読み込むかは、設定ファイル４０の記載に従う。
【００５３】
スコアの計算例としては、例えば、差分が生じているファイル名がコンテナ履歴管理テーブル３２の中で出現する回数を正規化してスコアを算出しても良い。あるいは、コンテナ履歴管理テーブル３２の中で最近実行されたコマンドほど評価を高くしても良い。詳細は後述する。
【００５４】
定義ファイル更新プログラム１１０は、コマンド推定プログラム１０６によって推定されたコマンドを定義ファイルに追加、または定義ファイルから削除するプログラムである。
【００５５】
画面作成プログラム１１２は、後述するインタフェース画面を生成する。例えば、画面作成プログラム１１２は、図７に示す定義ファイル修正画面８０、図８及び図１１に示すコマンド選択画面８２、図３に示す設定画面８４を生成し、所定の表示装置に表示させてもよい。
＜コンテナ型仮想コンピュータ管理装置１のデータ領域６０の説明＞
【００５６】
データ領域６０に記憶されている設定ファイル４０に記載されている定義に従って、スコア計算プログラム１０８がスコアの計算処理を行う。
【００５７】
図２は、設定ファイル４０の一例を示す。
【００５８】
設定ファイル４０は、同図に示すように、スコア計算モジュール５０を定義するスコア計算モジュール定義層４０２と、定義されたスコア計算モジュールの中で使用するスコア計算モジュールを決定するスコア計算モジュール決定層４０４と、各スコア計算モジュール５０によって割当てられたスコアの統合方法を決定するスコア統合方法決定層４０６とを有する。設定ファイル４０は、例えば、テキストファイルで実現されていても良い。
【００５９】
スコア計算モジュール定義層４０２は、スコア計算モジュール５０の識別子とスコア計算モジュール名８５２とが対応付けられている。同図の例では、識別子「Ａ」、「Ｂ」及び「Ｃ」に、それぞれ、「ｃｏｕｎｔ．ｊａｒ」、「ｒｅｃｅｎｔ．ｊａｒ」及び「ｃｕｓｔｏｍｅｒ．ｊａｒ」というモジュール名のスコア計算モジュール５０が対応付けられている。
【００６０】
使用スコア計算モジュール決定層４０４は、スコア計算モジュール５０の識別子を列挙し、スコアを計算する際に現実に使用するスコア計算モジュール５０を指定する。同図の例では、利用されるスコア計算モジュール５０は、識別子Ａ及びＢのモジュールである。
【００６１】
スコア統合方法決定層４０６は、スコアを統合するために用いる方法を定める。例えば、スコア統合の方法は、調和平均を算出する（ｈａｒｍｏｎｙ）、順位が高いものを優先的に使用する（ｍａｊｏｒｉｔｙ）、最もスコアが高いコマンドだけを採用する（ｈｉｇｈｅｓｔ）などがある。スコア統合方法決定層４０６では、これらのいずれかが指定される。ここではｈａｒｍｏｎｙが採用されている。
【００６２】
次に、設定ファイル４０及びスコア算出モジュール５０の登録及び更新について説明する。
【００６３】
図３は、設定画面８４の一例を示す。
【００６４】
設定画面８４は、スコア算出処理の方法を更新する際に管理者が操作する画面である。例えば、設定画面８４に対する操作により、新たに作成された設定ファイル４０を登録することができ、さらに、スコア算出モジュール５０を追加することができる。
【００６５】
設定画面８４は、同図に示すように、設定ファイル４０の更新領域８４２と、スコア計算モジュールの追加領域８４４とを有する。
【００６６】
更新領域８４２は、さらに、設定ファイル場所欄８４６と、更新ボタン８４８とを有する。
【００６７】
設定ファイル場所欄８４６には、新たに登録する設定ファイル４０のファイルパスが入力される。更新ボタン８４８が押下されると、設定ファイル場所欄８４６に設定されたファイルパスで特定される設定ファイル４０がストレージ装置１６に保存され、設定ファイル４０が更新される。
【００６８】
スコア計算モジュールの追加領域８４４は、さらに、追加モジュール場所欄８５０と、計算モジュール名欄８５２と、追加ボタン８５４とを有する。
【００６９】
追加モジュール場所欄８５０には、新たに追加されるスコア計算モジュール５０のファイルパスが入力される。計算モジュール名欄８５２には、新たに追加されるスコア計算モジュール５０のモジュール名が入力される。追加ボタン８５４が押下されると、追加モジュール場所欄８５０に設定されたファイルパスで特定される追加のスコア計算モジュールファイルが、計算モジュール名欄８５２に入力されたモジュール名でメモリ装置１２に保存される。これにより、新たなスコア計算モジュール５０が追加される。
＜コンテナ型仮想コンピュータ管理装置１のデータベース領域６２の説明＞
【００７０】
データベース領域６２に記憶されているコンテナ差分テーブル３０は、コンテナ差分分析プログラム１０４によって生成された２つのコンテナの差分情報を記憶するためのテーブルである。
【００７１】
図４は、コンテナ差分テーブル３０の一例を示す。
【００７２】
コンテナ差分テーブル３０は、同図に示すように、項目として、差分ＩＤ３００と、ファイル名３０２と、追加モード３０４と、差分説明３０６とを有する。
【００７３】
差分ＩＤ３００は、コンテナ差分テーブル３０の中で一意に割り当てられる識別子である。
【００７４】
ファイル名３０２は、比較対象の第１のコンテナ（元コンテナ９０）及び第２のコンテナ（改変コンテナ９２）のいずれか一方、あるいはその両方に存在するファイルの識別子で、他方と異なる状態になっているファイルの識別子である。
【００７５】
追加モード３０４は、第２のコンテナ（改変コンテナ９２）を生成するために第１のコンテナ（元コンテナ９０）のファイルに対して加えられた差分のモードを示す識別子である。ここでは、追加モード３０４としては、元コンテナ９０と改変コンテナ９２の双方に存在するが、内容が異なる「Ｍ（変更）」と、元コンテナ９０には存在しないが改変コンテナ９２には存在する「Ａ（追加）」と、元コンテナ９０に存在するが改変コンテナ９２に存在しない「Ｄ（削除）」の３つの値を取り得る。
【００７６】
差分説明３０６は、差分の具体的な内容を示す。例えば、追加モード３０４が「Ｍ（変更）」であれば、差分説明３０６には変更された箇所（例えば、ファイルの行）、及び変更の前後の内容（例えば、変更前の記述内容及び変更後の記述内容）が記載されても良い。追加モード３０４が「Ａ（追加）」の場合は、差分説明３０６には追加された具体的な内容（例えば、ファイルの全内容）が記述されてもよい。追加モード３０４が「Ｄ（削除）」の場合は、差分説明３０６には何も設定されなくてよい。
【００７７】
コンテナ履歴管理テーブル３２は、過去に実行されたコンテナの変更履歴に関する履歴情報を記憶するためのテーブルである。例えば、コンテナ履歴管理テーブル３２には、コンテナ構築プログラム１０２がベースコンテナに対してコマンドを実行して加えた変更に係る履歴が記憶される。
【００７８】
図５は、コンテナ履歴管理テーブル３２の一例を示す。
【００７９】
コンテナ履歴管理テーブル３２は、同図に示すように、項目として、履歴ＩＤ３２０と、プロジェクトＩＤ３２２と、ベースコンテナＩＤ３２４と、コマンド３２６と、ファイル名３２８とを有する。
【００８０】
履歴ＩＤ３２０は、コンテナ履歴管理テーブル３２の中で一意に割り当てられる識別子である。例えば、履歴ＩＤ３２０は、‘ｄ’＋［プロジェクトＩＤ３２２］+‘−’＋通番の形式とすることでその一意性が保障される。
【００８１】
プロジェクトＩＤ３２２は、プロジェクトごとに割り当てられる識別子である。ここで、一つのプロジェクトに対して一つの定義ファイルが作成されてもよい。１プロジェクトにおいて複数の定義ファイルが作成される場合には、履歴ＩＤ３２０に定義ファイルのＩＤを含めるなどすればよい。プロジェクトＩＤ３２２は、各プロジェクトが実行された順序で連番が割り当てられていてもよい。つまり、プロジェクトＩＤ３２２の番号が小さいほど過去に実行されたものであり、大きいほど最近に実行されたものである。
【００８２】
ベースコンテナＩＤ３２４は、対象とするプロジェクトで用いられたベースコンテナを識別するための識別子である。
【００８３】
コマンド３２６は、定義ファイルに記載されているコマンドである。コンテナ構築において実行されるコマンドは、例えば、コンテナの状況を変化させるコマンドであるＲＵＮ、開発している環境からファイルをコンテナに複写するコマンドであるＣＯＰＹなどがある。
【００８４】
ファイル名３２８は、コマンド３２６によって変更され、差分が発生したファイルの名称である。コマンド３２６の実行によって変更されるファイルがないときは、ファイル名３２８には何も設定されない。変更されるファイルが一以上のときは、その一以上のすべてのファイル名がファイル名３２８に設定される。例えば、コマンド３２６があるファイルを異なるディレクトリに移動するコマンドであった場合、元々あったファイルが削除されるとともに、新しいディレクトリにファイルが作成される。従って、この場合はファイル名３２８には２件のファイル名（ファイルパス）が記載される。
【００８５】
本実施形態では、コンテナの履歴としてコマンド及びそのコマンドにより変更されたファイル名のみを管理しているが、変更の内容をさらに管理するようにしても良い。その場合、コンテナ差分テーブル３０の差分ＩＤ３００とリンクするようにしてもよい。
【００８６】
定義ファイルに含まれるコマンドが一つ実行されるたびに、そのコマンドの実行によって生じた差分が抽出されて、コンテナ履歴管理テーブル３２に一つのレコードが追加される。従って、一つの定義ファイルに複数のコマンドが含まれるときは、コンテナ履歴管理テーブル３２に各コマンドに対応するレコードが追加される。
【００８７】
図５に記載されているコンテナ履歴管理テーブル３２を参照すると、プロジェクトＩＤ３２２が「１」のレコードが４つある。従って、プロジェクトＩＤ３２２が「１」のプロジェクトに対応する定義ファイルには、４つのコマンドが含まれていることがわかる。この定義ファイルに含まれる各コマンドは、定義ファイルに記載された順序に従って実行され、その順序でコンテナ履歴管理テーブル３２に登録される（履歴ＩＤ３２０がｄ０１−０１からｄ０１−０４）。
＜コンテナ型仮想コンピュータ管理装置１の動作例＞
【００８８】
次に、図６〜図１１を用いて、コンテナ型仮想コンピュータ管理装置１の処理手順について説明する。
【００８９】
図６は、コンテナ型仮想コンピュータ管理装置１がコンテナの差分を生じさせた改変コマンドを推定するための処理を説明するためのブロック図である。
【００９０】
コンテナ型仮想コンピュータ管理装置１が生成する定義ファイル修正画面８０（図７参照）に対して、開発環境の担当者（以下、開発ＳＥ７０と呼ぶ）が所定の情報を入力する。同様に、コンテナ型仮想コンピュータ管理装置１が生成するコマンド選択画面８２（図８参照）に対して、ユーザ環境の運用担当者（以下、現場ＳＥ７２と呼ぶ）が所定の情報を入力する。コンテナ型仮想コンピュータ管理装置１は、定義ファイル修正画面８０及びコマンド選択画面８２に対して入力された情報に基づいて処理を行う。
【００９１】
図７は、開発ＳＥ７０が操作する定義ファイル修正画面８０の一例を示す。定義ファイル修正画面８０は、開発ＳＥ７０から修正したい定義ファイル及びその定義ファイルから構築されたコンテナの指定を受け付ける。
【００９２】
定義ファイル修正画面８０は、プロジェクトＩＤ欄８０２と、元定義ファイル覧８０４と、元コンテナ覧８０６と、送信ボタン８０８とを有する。
【００９３】
プロジェクトＩＤ欄８０２には、修正したい定義ファイルに係るプロジェクトのプロジェクトＩＤが入力される。
【００９４】
元定義ファイル欄８０４には、修正したい定義ファイル（元定義ファイル４２）のファイルパスが入力される。
【００９５】
元コンテナ欄８０６には、元定義ファイル欄８０４で指定されたファイルパスに係る元定義ファイル４２をベースコンテナに適用して構築される元コンテナ９０のイメージ名が入力される。
【００９６】
送信ボタン８０８が押下されると、プロジェクトＩＤ欄８０２に入力されたプロジェクトＩＤ及び元コンテナ欄８０６に入力された元コンテナ９０のイメージ名がコンテナ差分分析プログラム１０４に引き渡される。さらに、元定義ファイル欄８０４に入力された元定義ファイル４２のファイルパスが定義ファイル更新プログラム１１０に引き渡される。
【００９７】
図８は、現場ＳＥ７２が操作するコマンド選択画面８２の一例を示す。コマンド選択画面８２は、現場ＳＥ７２から現場対応を実施した改変コンテナ９２の指定を受け付ける。さらに、コマンド選択画面８２は、改変コンテナ９２を生成するために定義ファイルに追加するコマンドを決定するために、複数のコマンド候補の中から選択を受け付ける。
【００９８】
コマンド選択画面８２は、プロジェクトＩＤ欄８２２と、改変コンテナ欄８２４と、コマンド候補一覧８２６と、送信ボタン８２８とを有する。
【００９９】
プロジェクトＩＤ欄８２２は、対象とするプロジェクトのプロジェクトＩＤが入力される。
【０１００】
改変コンテナ欄８２４には、処理対象の改変コンテナ９２のイメージ名が入力される。
【０１０１】
コマンド候補一覧８２６には、元定義ファイル４２に追加されるコマンドの候補が表示される。現場ＳＥ７２がコマンド候補一覧８２６に表示されている一以上の候補のコマンドの中からいずれかのコマンドを選択できる。
【０１０２】
送信ボタン８２８が押下されると、プロジェクトＩＤ欄８２２に入力されたプロジェクトＩＤ及び改変コンテナ欄８２４に入力された改変コンテナ９２のイメージ名がコンテナ差分分析プログラム１０４に引き渡される。
＜コンテナ差分テーブル３０の生成＞
【０１０３】
コンテナ差分分析プログラム１０４は、定義ファイル修正画面８０及びコマンド選択画面８２に入力された情報に基づいてコンテナ差分テーブル３０を生成する。例えば、定義ファイル修正画面８０から通知されたプロジェクトＩＤとコマンド選択画面８２から通知されたプロジェクトＩＤとが一致する場合、コンテナ差分分析プログラム１０４は、定義ファイル修正画面８０で指定された元コンテナ９０と、コマンド選択画面８２で指定された改変コンテナ９２との差分を抽出して、コンテナ差分テーブル３０を生成する。つまり、プロジェクトＩＤごとにコンテナ差分テーブル３０が生成される。
＜コマンド推定及び定義ファイルの更新処理＞
【０１０４】
コマンド推定プログラム１０６及びスコア計算プログラム１０８が、元定義ファイル４２に追加または削除するコマンドを推定する。さらに、定義ファイル更新プログラム１１０が推定されたコマンドを元定義ファイル４２に追加または元定義ファイル４２から削除する。図９及び図１０を用いて、コマンドの推定及び定義ファイルの更新手順について説明する。
【０１０５】
図９は、コマンドの推定処理の手順を示すフローチャートである。
【０１０６】
まず、コマンド推定プログラム１０６が定義ファイル修正画面８０とコマンド選択画面８２で入力されたプロジェクトＩＤを取得する。コマンド推定プログラム１０６は、このプロジェクトＩＤを処理対象のプロジェクトＩＤとし、このプロジェクトＩＤに対応するコンテナ差分テーブル３０を特定する（Ｓ１００）。
【０１０７】
コマンド推定プログラム１０６は、処理対象のプロジェクトＩＤに係るコンテナ差分テーブル３０の差分情報について、Ｌ１０−ｓからＬ１０−ｅまでの処理を繰り返す。
【０１０８】
すなわち、コマンド推定プログラム１０６は、コンテナ履歴管理テーブル３２を参照し、Ｓ１００で特定されたコンテナ差分テーブル３０と同じプロジェクトＩＤに係る履歴情報のレコードを特定する。そして特定された履歴情報のレコードの中に、コンテナ差分テーブル３０で差分があるファイルについて変更したレコードがあるか否かを判定する（Ｃ１００）。例えば、コマンド推定プログラム１０６は、コンテナ差分テーブル３０に含まれるレコードのファイル名３０２と、特定された履歴情報のレコードのファイル名３２８とが一致するものの有無を判定する。つまり、コマンド推定プログラム１０６は、同一ファイルについて、変更履歴があるとともに差分が生じているものの有無を判定する。
【０１０９】
例えば、図４に示したコンテナ差分テーブル３０と図５に示したコンテナ履歴管理テーブル３２において、処理対象プロジェクトＩＤが「１」であれば、コンテナ履歴管理テーブル３２ではプロジェクトＩＤ３２２が「１」のレコード群が対象となる。そして、コンテナ差分テーブル３０のファイル３０２と、コンテナ履歴管理テーブル３２の対象のレコード群でファイル名３２８とが一致するものを特定する。つまり、図４及び図５の例では、コンテナ差分テーブル３０の差分ＩＤ３００が「１」のレコードと、コンテナ履歴管理テーブル３２の履歴ＩＤ３２０が「ｄ０１−０４」のレコードが、いずれもファイル名（ファイルパス）が「／ｅｔｃ／ｎｇｉｎｘ．ｃｏｎｆ」で共通する。
【０１１０】
これは、「／ｅｔｃ／ｎｇｉｎｘ．ｃｏｎｆ」のファイルが、元定義ファイル４２に従って元コンテナ９０を構築する過程において変更されるとともに、その後、現場ＳＥ７２による現場対応によって再度変更されていることを示す。つまり、元定義ファイル４２に従って「／ｅｔｃ／ｎｇｉｎｘ．ｃｏｎｆ」を変更する処理が本来必要なかった可能性がある。そこで、コマンド推定プログラム１０６は、元定義ファイル４２での「／ｅｔｃ／ｎｇｉｎｘ．ｃｏｎｆ」に対するコマンドが必要であったか否かを判定する。
【０１１１】
コマンド推定プログラム１０６は、元定義ファイル４２において、Ｃ１００で特定されたコンテナ履歴管理テーブル３２のレコードに対応するコマンド３２６を特定する。このコマンド３２６を、以下、判定対象コマンドと呼ぶ。そして、コマンド推定プログラム１０６は、ベースコンテナに対して、元定義ファイル４２に含まれるコマンドのうち、判定対象コマンドの直前のコマンドまでを適用したコンテナと、判定対象コマンドまでを適用したコンテナを生成する。そして、コンテナ差分分析プログラム１０４がこれらのコンテナの差分を抽出する（Ｓ１０３）。
【０１１２】
図４及び図５の例では、コマンド推定プログラム１０６がコンテナ履歴管理テーブル３２の「ｄ０１−０３」までのコマンドをベースコンテナ「Ｂａｓｅ  Ｃ」に適用したコンテナと、コンテナ履歴管理テーブル３２の「ｄ０１−０４」までのコマンドをベースコンテナ「Ｂａｓｅ  Ｃ」に適用したコンテナとを生成する。そして、コンテナ差分分析プログラム１０４が両者の差分を抽出する。
【０１１３】
コマンド推定プログラム１０６は、Ｓ１０３で抽出された差分と、コンテナ差分テーブル３０の差分とが一致するか否かを判定する（Ｃ１０２）。
【０１１４】
「ｄ０１−０３」までのコマンドを適用して生成されたコンテナは、「／ｅｔｃ／ｎｇｉｎｘ．ｃｏｎｆ」を変更するコマンドを行う直前のコンテナである。「ｄ０１−０４」までのコマンドを適用して生成されたコンテナは、「／ｅｔｃ／ｎｇｉｎｘ．ｃｏｎｆ」を変更するコマンドを行った直後のコンテナである。つまり、これらの差分がコンテナ差分テーブル３０の差分ＩＤ「１」のレコードと一致するならば、「ｄ０１−０４」に対応するコマンドは不要であった可能性が高い。
【０１１５】
Ｃ１０２の判定で差分が一致する場合は（Ｃ１０２：Ｙｅｓ）、元定義ファイル４２から判定対象コマンドが削除される（Ｓ１０４）。
【０１１６】
図４及び図５の例では、「ｄ０１−０４」の差分を生成したコマンド「ＲＵＮ  ＳＥd ‘ｓ／＃ｐｒｏｘｙ／ｐｒｏｘｙ／’  ｎｇｉｎｘ．ｃｏｎｆ」が判定対象コマンドであり、Ｃ１０２の判定で差分が一致する場合は、定義ファイル更新プログラム１１０によりこのコマンドが元定義ファイル４２から削除される。
【０１１７】
本実施形態では、コンテナの差分情報を分析することによって、元コンテナ９０を生成する際に実行したコマンドのうち、本来不要であったと考えられるコマンドを元定義ファイル４２から削除できる。
【０１１８】
次に、Ｃ１００でコンテナ差分テーブル３０とコンテナ履歴管理テーブル３２に同一のファイル名が存在しない場合（Ｃ１００：Ｎｏ）、及びＣ１０２の判定で差分が一致しない場合（Ｃ１０２：Ｎｏ）は、コマンド推定プログラム１０６が他のプロジェクトも含めたコンテナ履歴情報に基づいてコマンドを推定する。すなわち、コマンド推定プログラム１０６は、コンテナ履歴管理テーブル３２を参照し、処理対象プロジェクトとベースコンテナが同一の履歴情報に係るレコードを抽出する（Ｓ１０６）。
【０１１９】
図４及び図５の例では、コンテナ履歴管理テーブル３２において、ベースコンテナＩＤ３２４が「Ｂａｓｅ  Ｃ」であるレコードが全て抽出される。
【０１２０】
コマンド推定プログラム１０６は、Ｓ１０６で抽出されたレコードの中から、コンテナ差分テーブル３０のファイル名３０２と一致するファイル名３２８を有するレコードを特定する。そして、ここで特定されたレコードのコマンド３２６を抽出する（Ｓ１０８）。
【０１２１】
図４及び図５の例では、ファイル名３０２「／ｅｔｃ／ＳＥＬｉｎｕｘ」（Ｌｉｎｕｘは登録商標）を変更している履歴ＩＤ３２０「ｄ０２−０１」、「ｄ０９−０２」、「ｄ１０−０２」の履歴レコードが抽出される。
【０１２２】
こうして抽出された各履歴レコードに対して、スコア計算プログラム１０８が、各履歴レコードのコマンドに対するスコア付け処理を行う（Ｐ２）。
【０１２３】
次に、図１０は、コマンドスコア付け処理Ｐ２のフローチャートを示す。
【０１２４】
コマンドスコア付け処理Ｐ２は、スコア割当処理Ｐ２０と、それらのスコア統合処理Ｐ２２とを含む。
【０１２５】
スコア計算プログラム１０８がスコア計算モジュール５０を用いて、図９のＳ１０８で抽出されたレコードを処理対象として、設定ファイル４０の設定に基づいてスコア付け処理を行う。例えば、設定ファイル４０の使用モジュール決定層４０４で指定されたスコア計算モジュール５０が、それぞれスコア付け処理を行う。さらに、スコア統合方法決定層４０６では、スコアの統合方法として「ｈａｒｍｏｎｙ」が指定されている。
【０１２６】
図２に示す例では、使用モジュール決定層４０４においてスコア計算モジュールA（５０−ａ）及びＢ（５０−ｂ）が指定されている。図１０にはそれぞれの処理フローが記載されている。
【０１２７】
スコア計算モジュールＡ（５０−ａ）は、処理対象レコードのコマンド３２６をその種類別に出現回数をカウントし、その回数が最大のコマンドに最高スコアを割当てる。
【０１２８】
まず、スコア計算モジュールＡ（５０−ａ）は、処理対象レコードについて、コマンドの種類別に履歴のレコード数をカウントする（Ｓ２０２）。
【０１２９】
例えば、図５の例では、履歴ＩＤ３２０「ｄ０２−０１」、「ｄ０９−０２」、「ｄ１０−０２」の履歴レコードが対象であれば、コマンド「ＲＵＮ  ＳＥｔｅｎｆｏｒｃｅ  ０」が２回、「ＲＵＮ  ＳＥd  'ＳＥｎａｂｌｅ／ｄｉｓａｂｌｅ／ｇ‘  ／ｅｔｃ／ＳＥＬｉｎｕｘ」は１回となる。
【０１３０】
スコア計算モジュールＡ（５０−ａ）は、最大のカウント数を抽出し、Ｃとする（Ｓ２０４）。本例ではＣ＝２となる。
【０１３１】
スコア計算モジュールＡ（５０−ａ）は、各コマンドのカウント数をＣで除算する（Ｓ２０６）。この例では、「ＲＵＮ  ＳＥｔｅｎｆｏｒｃｅ  ０」のスコアの１．０に、「ＲＵＮ  ＳＥd  'ＳＥｎａｂｌｅ／ｄｉｓａｂｌｅ／ｇ‘  ／ｅｔｃ／ＳＥＬｉｎｕｘ」のスコアは０．５となる。
【０１３２】
次に、スコア計算モジュールＢ（５０−ｂ）は、最近実行されたコマンドほど高スコアを割り当てる。つまり、スコア計算モジュールＢ（５０−ｂ）は、実行された時期がこの処理を行う時点に近いほどコマンドに高いスコアを割当てる。実行された時期は、プロジェクトＩＤ３２２で判定する。すなわち、プロジェクトＩＤ３２２は、各プロジェクトが実行された順序で連番が割り当てられている。従って、プロジェクトＩＤ３２２の番号が大きいほど実行された時刻が遅い、すなわち最近に実行されたものである。
【０１３３】
まず、スコア計算モジュールＢ（５０−ｂ）は、プロジェクトＩＤ３２２の最大値Ｐｍａｘと最小値Ｐｍｉｎを抽出する（Ｓ２２２）。この例では、Ｐｍａｘ＝１０、Ｐｍｉｎ＝２となる。
【０１３４】
次に、スコア計算モジュールＢ（５０−ｂ）は、各プロジェクトＩＤ３２２からＰｍｉｎを減算した値をＰｍａｘからＰｍｉｎを減算した値で除算する（Ｓ２２４）。これにより、最も古いプロジェクトで実行されたコマンドはスコアが0に、最新プロジェクトで実行されたコマンドはスコアが１に正規化される。
【０１３５】
スコア計算モジュールＢ（５０−ｂ）は、同一の命令に複数のスコアが割り当てられた場合は、最大スコアを採用する（Ｓ２２６）。この例の場合、「ＲＵＮ  ＳＥｔｅｎｆｏｒｃｅ  ０」については、スコアが０．０（ｄ０２−０１）と、１．０（ｄ１０−０２）がある。「ＲＵＮ  ＳＥd  'ＳＥｎａｂｌｅ／ｄｉｓａｂｌｅ／ｇ‘  ／ｅｔｃ／ＳＥＬｉｎｕｘ」のスコアは０．８７５となる。この例のように一つのコマンドが複数回発行され、同一コマンドに複数のスコアが算出される場合は、最大のスコアを採用するようにしてもよい。これによれば「ＲＵＮ  ＳＥｔｅｎｆｏｒｃｅ  ０」のスコアは１．０（ｄ１０−０２）が採用される。
【０１３６】
スコア割当処理Ｐ２０において、各スコア計算モジュール５０により算出されたスコアはスコア統合処理Ｐ２２に引き渡される。
【０１３７】
スコア計算プログラム１０８が、スコア統合方法決定層４０６で指定された統合方法で、スコア計算モジュールＡ（５０−ａ）及びＢ（５０−ｂ）がそれぞれ算出したコマンドごとのスコアを統合する。この例では、統合方法は平均（ｈａｒｍｏｎｙ）であるので、スコア計算プログラム１０８各コマンドのスコアを平均する（Ｓ２４０）。この例では、「ＲＵＮ  ＳＥｔｅｎｆｏｒｃｅ  ０」は（１．０＋１．０）÷２＝１．０、「ＲＵＮ  ＳＥd  'ＳＥｎａｂｌｅ／ｄｉｓａｂｌｅ／ｇ‘  ／ｅｔｃ／ＳＥＬｉｎｕｘ」は（０．５＋０．８７５）÷２＝０．６８７５が最終的なスコアとなる。
【０１３８】
Ｌ１０−ｓ〜Ｌ１０−ｅの処理をコンテナ差分テーブル３０のすべてのレコードに対して実行した後、コマンド推定プログラム１０６はコマンド選択画面８２にコマンド候補を表示させる（Ｓ１１２）。
【０１３９】
図１１は、コマンド候補を表示させたコマンド選択画面８２の一例を示す。
【０１４０】
コマンド候補一覧欄８２６には、差分ごとに推定されたコマンドがコマンド候補８３０として表示される。なお、コマンド候補一覧欄８２６内の表示態様は任意である。つまり、コマンドの表記順序はスコアの降順ですべて表示しても良いし、スコアが一定以下のコマンドは表示しなくてもよいし、あるいはスコアが上位及び下位の数件のコマンドのみを表示するようにしても良い。スコアの活用方法も任意である。
【０１４１】
現場ＳＥ７２は、コマンド候補一覧欄８２６に表示されたコマンドから一つのコマンドを選択し、決定ボタン８３２を押下する。現場ＳＥ７２は、例えば、差分を生じさせた原因と考えられるコマンドを選択するようにしても良い。
【０１４２】
ここで、図９に戻ると、決定ボタン８３２の押下を契機として、コマンド選択画面８２からコマンド推定プログラム１０６に選択されたコマンドが通知される。コマンド推定プログラム１０６は、選択されたコマンドを定義ファイル更新プログラム１１０に送信する。定義ファイル更新プログラム１１０は、通知されたコマンドを元定義ファイル４２に追記する（Ｓ１１４）。これにより、差分を生じさせた原因と考えられるコマンドが元定義ファイル４２に追加される。
【０１４３】
ここで、図６に戻ると、上記の処理によって修正された元定義ファイル４２は、修正定義ファイル４４として保存される。
【０１４４】
これにより、ユーザ環境において行われたコンテナの改変が定義ファイルに反映される。つまり、元定義ファイルにおいて余剰なコマンドは削除され、不足していたコマンドは追加される。その結果、これ以降は修正定義ファイル４４を用いることによって、ユーザ環境で新たにコンテナを構築しても改変が反映された改変コンテナが自動生成される。
【符号の説明】
【０１４５】
１．コンテナ型仮想コンピュータ管理装置
４．ネットワーク
７０．開発ＳＥ
７２．現場ＳＥ
７４．装置管理者
【図１】
0006706684.tif 000002
【図２】
0006706684.tif 000003
【図３】
0006706684.tif 000004
【図４】
0006706684.tif 000005
【図５】
0006706684.tif 000006
【図６】
0006706684.tif 000007
【図７】
0006706684.tif 000008
【図８】
0006706684.tif 000009
【図９】
0006706684.tif 000010
【図１０】
0006706684.tif 000011
【図１１】
0006706684.tif 000012