(57)【要約】【課題】パッチの適用作業の負担を抑制すること。【解決手段】生成装置は、パッチプログラムの適用処理中に行なわれた操作を検出し、前記操作の履歴情報を記憶部に記録する記録部と、前記履歴情報に示される操作を実行させる命令を含むスクリプトを生成する第一の生成部と、生成した前記スクリプトに基づいて前記パッチプログラムを実行させる実行プログラムを生成する第二の生成部とを有する。【選択図】図３
2013077085.tif 000002
【特許請求の範囲】
【請求項１】
パッチプログラムの適用処理中に行なわれた操作を検出し、前記操作の履歴情報を記憶部に記録する記録部と、
前記履歴情報に示される操作を実行させる命令を含むスクリプトを生成する第一の生成部と、
生成した前記スクリプトに基づいて前記パッチプログラムを実行させる実行プログラムを生成する第二の生成部と、
を有する生成装置。
【請求項２】
前記記録部は、複数の前記パッチプログラムの適用処理中における前記操作の履歴情報を記憶部に記録する請求項１記載の生成装置。
【請求項３】
前記記録部は、前記パッチプログラムの適用処理中におけるソフトウェア資源の追加又は置き換えを検出し、追加された又は置き換えられたソフトウェア資源の識別名を前記記憶部に記録し、
前記第二の生成部は、前記記憶部が記憶する前記識別名に係るソフトウェア資源を含む前記実行プログラムを生成する請求項１又は２記載の生成装置。
【請求項４】
前記記録部は、前記パッチプログラムの適用処理中におけるプログラムの停止を検出し、停止されたプログラムの識別名を前記記憶部に記録し、
前記第一の生成部は、前記プログラムの識別名を含む前記スクリプトを生成する請求項１乃至３いずれか一項記載の生成装置。
【請求項５】
前記記録部は、前記パッチプログラムの適用処理中におけるオペレーティングシステムの再起動の実行を検出し、該再起動が実行されたことを示す情報を前記記憶部に記録し、
前記第一の生成部は、前記情報に基づいて、オペレーティングシステムの再起動命令を含む前記スクリプトを生成する請求項１乃至４いずれか一項記載の生成装置。
【請求項６】
パッチプログラムの適用処理中に行なわれた操作を検出し、前記操作の履歴情報を記憶部に記録し、
前記履歴情報に示される操作を実行させる命令を含むスクリプトを生成し、
生成した前記スクリプトに基づいて前記パッチプログラムを実行させる実行プログラムを生成する処理をコンピュータが実行する生成方法。
【請求項７】
パッチプログラムの適用処理中に行なわれた操作を検出し、前記操作の履歴情報を記憶部に記録し、
前記履歴情報に示される操作を実行させる命令を含むスクリプトを生成し、
生成した前記スクリプトに基づいて前記パッチプログラムを実行させる実行プログラムを生成する処理をコンピュータに実行させる生成プログラム。
【請求項８】
請求項６記載のパッチ生成方法によって生成された前記実行プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、生成装置、生成方法、生成プログラム、及び実行プログラムに関する。
【背景技術】
【０００２】
ソフトウェアに関して、パッチとは、既にリリース済みのソフトウェアの一部を更新するためのデータをいう。パッチは、バグの修正や、機能拡張等を目的として、パッチの適用対象となるソフトウェアのベンダよりリリースされる。
【０００３】
パッチの形式及び適用方法等は、ソフトウェアごと又はベンダごとに異なるのが一般的である。換言すれば、パッチの形式や適用方法等は、標準化されておらず、ユーザは、パッチの適用に関して、パッチごとに異なる作業が要求される。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２０１０−２３７８５２号公報
【特許文献２】特開２０１０−７９４３８号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
データセンタ等、同様のソフトウェア構成を有する多数のコンピュータが管理されている環境では、多数のコンピュータに対してパッチの適用作業が必要とされる。しかし、上記のように、パッチの形式や適用方法等は、パッチごと又はベンダごとに異なるため、パッチの適用作業を自動化するのは困難であった。
【０００６】
特に、近年では、クラウドシステムの運用環境において、同様のソフトウェア構成を有する多数の仮想サーバを展開することが一般的となっている。したがって、同様のソフトウェア構成を有する多数のコンピュータに対するパッチの適用作業の負担が益々大きくなることが予想される。
【０００７】
そこで、一側面では、パッチの適用作業の負担を抑制することを目的とする。
【課題を解決するための手段】
【０００８】
一つの案では、生成装置は、パッチプログラムの適用処理中に行なわれた操作を検出し、前記操作の履歴情報を記憶部に記録する記録部と、前記履歴情報に示される操作を実行させる命令を含むスクリプトを生成する第一の生成部と、生成した前記スクリプトに基づいて前記パッチプログラムを実行させる実行プログラムを生成する第二の生成部とを有する。
【発明の効果】
【０００９】
一態様によれば、パッチの適用作業の負担を抑制することができる。
【図面の簡単な説明】
【００１０】
【図１】本発明の実施の形態におけるパッチ生成装置のハードウェア構成例を示す図である。
【図２】本発明の実施の形態におけるパッチ生成装置のソフトウェア構成例を示す図である。
【図３】パッチ変換部に含まれる各部の機能を説明するための図である。
【図４】共通形式パッチの構造の一例を示す図である。
【図５】共通形式パッチの生成処理の処理手順の概要の一例を説明するためのフローチャートである。
【図６】処理シーケンスログの記録処理の処理手順の一例を説明するためのフローチャートである。
【図７】停止対象サービスリストの一例を示す図である。
【図８】ファイル操作記録処理の処理手順の一例を説明するためのフローチャートである。
【図９】操作対象ファイルリストの一例を示す図である。
【図１０】リソース操作記録リストの一例を示す図である。
【図１１】レジストリ操作記録処理の処理手順の一例を説明するためのフローチャートである。
【図１２】操作対象レジストリキーリストの一例を示す図である。
【図１３】リソース操作記録リストへのレジストリキーに関するレコードの記録例を示す図である。
【図１４】共通形式パッチの生成処理の処理手順の一例を説明するためのフローチャートである。
【図１５】スクリプトファイルの生成処理の処理手順の一例を説明するためのフローチャートである。
【図１６】スクリプトファイルの記述内容の一例を示す図である。
【図１７】ファイル操作スクリプトの追記処理の処理手順の一例を説明するためのフローチャートである。
【図１８】レジストリ操作スクリプトの追記処理の処理手順の一例を説明するためのフローチャートである。
【図１９】本発明の実施の形態におけるパッチ適用装置のソフトウェア構成例を示す図である。
【図２０】共通形式パッチの適用処理の処理手順の概要の一例を説明するためのフローチャートである。
【図２１】スクリプトの実行処理の処理手順の一例を説明するためのフローチャートである。
【図２２】スクリプトファイルの定義部分の解析処理の処理手順の一例を説明するためのフローチャートである。
【図２３】サービスの停止処理の処理手順の一例を説明するためのフローチャートである。
【図２４】レジストリキーの退避処理の処理手順の一例を説明するためのフローチャートである。
【図２５】レジストリキー退避リストの一例を示す図である。
【図２６】ファイルの退避処理の処理手順の一例を説明するためのフローチャートである。
【図２７】スクリプトのコマンドの実行処理の処理手順の一例を説明するためのフローチャートである。
【図２８】サービスの起動処理の処理手順の一例を説明するためのフローチャートである。
【図２９】ロールバック処理の処理手順の一例を説明するためのフローチャートである。
【図３０】本発明の実施の形態の情報処理システムの一例を示す図である。
【発明を実施するための形態】
【００１１】
以下、図面に基づいて本発明の実施の形態を説明する。図１は、本発明の実施の形態におけるパッチ生成装置のハードウェア構成例を示す図である。図１のパッチ生成装置１０は、それぞれバスＢで相互に接続されているドライブ装置１００、補助記憶装置１０２、メモリ装置１０３、ＣＰＵ１０４、及びインタフェース装置１０５等を有する。
【００１２】
パッチ生成装置１０での処理を実現するプログラムは、記録媒体１０１によって提供される。プログラムを記録した記録媒体１０１がドライブ装置１００にセットされると、プログラムが記録媒体１０１からドライブ装置１００を介して補助記憶装置１０２にインストールされる。但し、プログラムのインストールは必ずしも記録媒体１０１より行う必要はなく、ネットワークを介して他のコンピュータよりダウンロードするようにしてもよい。補助記憶装置１０２は、インストールされたプログラムを格納すると共に、必要なファイルやデータ等を格納する。
【００１３】
メモリ装置１０３は、プログラムの起動指示があった場合に、補助記憶装置１０２からプログラムを読み出して格納する。ＣＰＵ１０４は、メモリ装置１０３に格納されたプログラムに従ってパッチ生成装置１０に係る機能を実行する。インタフェース装置１０５は、ネットワークに接続するためのインタフェースとして用いられる。
【００１４】
なお、記録媒体１０１の一例としては、ＣＤ−ＲＯＭ、ＤＶＤディスク、又はＵＳＢメモリ等の可搬型の記録媒体が挙げられる。また、補助記憶装置１０２の一例としては、ＨＤＤ（Hard Disk Drive）又はフラッシュメモリ等が挙げられる。記録媒体１０１及び補助記憶装置１０２のいずれについても、コンピュータ読み取り可能な記録媒体に相当する。
【００１５】
図２は、本発明の実施の形態におけるパッチ生成装置のソフトウェア構成例を示す図である。同図において、パッチ生成装置は、ＯＳ（Operating System：オペレーティングシステム）１１、ミドルウェア１２、及びパッチ変換部１３等を有する。
【００１６】
ＯＳ１１及びミドルウェア１２は、本実施の形態においてパッチの適用対象とされるソフトウェアの一例である。ＯＳ１１の種類や、ミドルウェア１２の機能等は特定のものに限定されない。また、アプリケーションプログラムがパッチの適用対象であってもよい。なお、本実施の形態では、便宜上、ＯＳ１１に対するパッチの形式と、ミドルウェア１２に対するパッチの形式とは、相互に異なることとする。
【００１７】
パッチ変換部１３は、ＯＳ１１又はミドルウェア１２のベンダよりリリースされる、ベンダ固有の形式のパッチ（以下、「固有形式パッチ」という。）を、共通形式のパッチ（共通形式パッチＣＰ）に変換する。パッチ変換部１３は、パッチ生成装置１０にインストールされたプログラムが、ＣＰＵ１０４に実行させる処理により実現される。
【００１８】
同図において、パッチ変換部１３は、起動部１３１、記録部１３２、スクリプト生成部１３３、及びパッチ生成部１３４等を有する。これら各部の機能は、図３を参照しつつ説明する。
【００１９】
図３は、パッチ変換部に含まれる各部の機能を説明するための図である。起動部１３１は、共通形式パッチＣＰへの変換対象の固有形式パッチをプロセスとして起動させる。起動部１３１によって起動された固有形式パッチは、適用処理を開始する。記録部１３２は、固有形式パッチの適用処理中における、ソフトウェア資源に対する操作を検出する。本実施の形態において、ソフトウェア資源とは、ＯＳ１１又はミドルウェア１２に関するファイル、レジストリ、及び実行状態のＯＳ１１又はミドルウェア１２等である。より詳しくは、記録部１３２は、固有形式パッチの適用処理中における、システムコールの呼び出しをフック（捕捉）することにより、ファイル操作、レジストリ操作、及びＯＳ１１の再起動等の処理の実行を検出する。但し、他の方法によって、ソフトウェア資源に対する操作が検出されてもよい。また、レジストリを有さない環境では、レジストリ操作は検出対象とされなくてもよい。記録部１３２は、検出された操作の履歴情報が記録されたデータ（以下、「処理シーケンスログＳＬ」という。）を、例えば、補助記憶装置１０２に記録する。なお、システムコールとは、ＯＳ１１が備えるＡＰＩ（Application Program Interface）をいう。
【００２０】
同図では、固有形式パッチの一例として、ＯＳ１１に対するパッチであるＯＳパッチｏｐと、ミドルウェア１２に対するパッチであるミドルウェアパッチｍｐとが適用されている例が示されている。例えば、ミドルウェアパッチｍｐの適用処理において、ファイル置換、レジストリ変更、及びファイル編集等の操作が実行され、これらの操作を行うためのシステムコールの呼び出しが記録部１３２によって検出（フック）されている例が示されている。また、ＯＳパッチｏｐの適用処理において、ファイル置換、レジストリ変更、ファイル編集、及びＯＳ１１の再起動等の操作が実行され、これらの操作を行うためのシステムコールの呼び出しが記録部１３２によって検出（フック）されている例が示されている。なお、ファイル置換とは、既存のファイルが新しいファイルによって置き換えられる（上書きされる）ことをいう。ファイル編集とは、既存のファイルの一部が書き換えられることをいう。レジストリ変更とは、レジストリの内容が変更されることをいう。
【００２１】
スクリプト生成部１３３は、処理シーケンスログＳＬに記録された操作を実行させる命令（コマンド）を含むスクリプトが記述されたスクリプトファイルＳＦを生成する。すなわち、スクリプトファイルＳＦは、共通形式パッチＣＰの適用時に実行すべき処理が記述されたファイルである。当該スクリプトは、共通形式パッチＣＰの適用先のコンピュータ（後述されるパッチ適用装置２０）において解釈可能な形式であればよい。
【００２２】
パッチ生成部１３４は、スクリプトファイルＳＦや、置き換わるファイル等を含む書庫ファイル（アーカイブファイル）を生成する。生成された書庫ファイルが共通形式パッチＣＰである。本実施の形態において、共通形式パッチＣＰは、ＯＳパッチｏｐ及びミドルウェアパッチｍｐの形式が、共通化されたものである。
【００２３】
図４は、共通形式パッチの構造の一例を示す図である。同図において、共通形式パッチＣＰ内には、スクリプトファイルＳＦ、置換ファイル群ＲＦ、追加ファイル群ＡＦ、及び差分ファイル群ＤＦ等が含まれている。
【００２４】
スクリプトファイルＳＦは、上記した通りである。置換ファイル群ＲＦは、既存のファイルと置換される（既存のファイルに置き換わる）ファイル（以下、「置換ファイル」という。）の集合である。共通形式パッチＣＰの変換元となる固有形式パッチにおいて、ファイル置換が実行されない場合、共通形式パッチＣＰには、置換ファイル群ＲＦは含まれなくてもよい。追加ファイル群ＡＦは、新たに追加されるファイルの集合である。共通形式パッチＣＰの変換元となる固有形式パッチにおいて、新たなファイルの追加が実行されない場合、共通形式パッチＣＰには、追加ファイル群ＡＦは含まれなくてもよい。
【００２５】
差分ファイル群ＤＦは、ファイル編集の対象となったファイルごとに、編集前（更新前）の状態と編集後（更新後）の状態との差分が記録されたファイルの集合である。共通形式パッチＣＰの変換元となる固有形式パッチにおいて、ファイル編集が実行されない場合、共通形式パッチＣＰには、差分ファイル群ＤＦは含まれなくてもよい。
【００２６】
以下、パッチ生成装置１０が実行する処理手順について説明する。図５は、共通形式パッチの生成処理の処理手順の概要の一例を説明するためのフローチャートである。
【００２７】
ステップＳ１０１において、起動部１３１は、共通形式パッチＣＰへの変換対象の固有形式パッチの一つをプロセスとして起動させる。例えば、変換対象の固有形式パッチのファイル名の一覧が、所定のファイルに記録されており、起動部１３１は、当該ファイルより一つのファイル名を読み出して、当該ファイル名に係る固有形式パッチを起動させる。
【００２８】
固有形式パッチの起動に応じ、記録部１３２は、システムコールの呼び出しの監視を開始し、処理シーケンスログＳＬの記録処理を実行する（Ｓ１０２）。その結果、処理シーケンスログＳＬが補助記憶装置１０２に記録される。
【００２９】
ステップＳ１０１及びＳ１０２は、変換対象の固有形式パッチの数だけ繰り返される。例えば、本実施の形態では、ＯＳパッチｏｐ及びミドルウェアパッチｍｐのそれぞれに関してステップＳ１０１及びＳ１０２が実行される。
【００３０】
変換対象の全ての固有形式パッチに関してステップＳ１０１及びＳ１０２の実行が完了すると、スクリプト生成部１３３及びパッチ生成部１３４は、共通形式パッチＣＰの生成処理を実行する（Ｓ１０３）。その結果、スクリプトファイルＳＦが生成され、更に、共通形式パッチＣＰが生成される。なお、複数の固有形式パッチが変換対象である場合、複数の固有形式パッチに対して一つの共通形式パッチＣＰが生成される。但し、固有形式パッチごとに共通形式パッチＣＰが生成されてもよい。
【００３１】
続いて、ステップＳ１０２の詳細について説明する。図６は、処理シーケンスログの記録処理の処理手順の一例を説明するためのフローチャートである。
【００３２】
記録部１３２は、監視を開始した後、起動部１３１によって起動されたプロセスに係る固有形式パッチからのシステムコールの呼び出しを待機する（Ｓ１１１）。記録部１３２は、システムコールの呼び出しを検出すると（Ｓ１１１でＹｅｓ）、当該システムコールをフックして、当該システムコールの種別を判定する（Ｓ１１２）。本実施の形態において、システムコールの種別は、「ファイル操作」、「レジストリ操作」、「サービス停止」、及び「ＯＳ再起動」の４つに分類される。「ファイル操作」に分類されるシステムコールは、図３におけるファイル編集やファイル置換等、ファイルに対する操作（アクセス）を実行するシステムコールである。「レジストリ操作」に分類されるシステムコールは、図３におけるレジストリ変更等、レジストリに対する操作（アクセス）を実行するシステムコールである。「サービス停止」に分類されるシステムコールは、起動中のプロセスの停止を実行するシステムコールである。起動中のプロセスとは、例えば、ＯＳ１１によって提供されるサービスに係るプロセス等、固有形式パッチの適用対象となるソフトウェアに含まれているプログラムのプロセスである。「ＯＳ再起動」に分類されるシステムコールは、ＯＳ１１の再起動を実行させるシステムコールである。各システムコールがいずれの種別に属するか（すなわち、各システムコールと種別との対応情報）は、例えば、予め補助記憶装置１０２に記憶されていてもよい。記録部１３２は、当該対応情報を参照して、呼び出されたシステムコールの種別を判定してもよい。
【００３３】
呼び出されたシステムコールの種別が「ファイル操作」である場合、記録部１３２は、ファイルに対する操作内容を処理シーケンスログＳＬに記録する処理（ファイル操作記録処理）を実行する（Ｓ１１３）。
【００３４】
呼び出されたシステムコールの種別が「レジストリ」操作である場合、記録部１３２は、レジストリに対する操作内容を処理シーケンスログＳＬに記録する処理（レジストリ操作記録処理）を実行する（Ｓ１１４）。
【００３５】
呼び出されたシステムコールの種別が「サービス停止」である場合、記録部１３２は、停止対象とされたサービス（プログラム）の識別名（以下、「サービス名」という。）を処理シーケンスログＳＬの一部である停止対象サービスリストＳＬ１に記録する（Ｓ１１５）。
【００３６】
図７は、停止対象サービスリストの一例を示す図である。同図に示されるように、停止対象サービスリストＳＬ１には、停止対象とされたサービス名の一覧が記録される。なお、サービスの停止は、例えば、当該サービスの設定情報等が記録されたファイルやレジストリ等が固有形式パッチによって操作される場合に、当該固有形式パッチによって実行される。
【００３７】
呼び出されたシステムコールの種別が「ＯＳ再起動」である場合、記録部１３２は、ＯＳ再起動フラグの値を「ｔｒｕｅ」に設定する。ＯＳ再起動フラグとは、例えば、補助記憶装置１０２内の所定のファイルに記録される、初期値が「ｆａｌｓｅ」であるデータである。なお、ＯＳ１１の再起動は、例えば、固有形式パッチの適用処理を有効とするために実行される。
【００３８】
ステップＳ１１２〜Ｓ１１６は、監視対象の固有形式パッチに係るプロセスが起動中の間、システムコールが呼び出されるたびに実行される。当該プロセスが終了を検知すると、記録部１３２は、図６の処理を終了させる。
【００３９】
続いて、図６のステップＳ１１３の詳細について説明する。図８は、ファイル操作記録処理の処理手順の一例を説明するためのフローチャートである。
【００４０】
ステップＳ１２１において、記録部１３２は、呼び出されたシステムコールのファイル操作種別を判定する。本実施の形態において、ファイル操作種別は、「ファイル置換」、「ファイル編集」、「ファイル削除」、及び「ファイル追加」等に分類される。「ファイル置換」及び「ファイル編集」は、上述した通りである。「ファイル削除」は、既存のファイルの削除である。「ファイル追加」は、新たな（これまで存在しなかった）ファイルの追加である。
【００４１】
なお、各システムコールがいずれのファイル操作種別に属するか（すなわち、各システムコールとファイル操作種別との対応情報）は、例えば、予め補助記憶装置１０２に記憶されていてもよい。記録部１３２は、当該対応情報を参照して、呼び出されたシステムコールのファイル操作種別を判定してもよい。
【００４２】
呼び出されたシステムコールのファイル操作種別が「ファイル置換」である場合、記録部１３２は、置換対象のファイルのファイルパス名をシステムコールの呼び出し内容（引数等）より取得する（Ｓ１２２）。記録部１３２は、システムコールが呼び出しをフックしているため、システムコールが呼び出された時点で呼び出し内容（引数の値等）を取得することができる。したがって、システムコールの引数等より置換されるファイルパス名を取得することができる。なお、ファイル置換の具体例としては、例えば、ＯＳ１１又はミドルウェア１２に含まれる、実行形式ファイル又は動的リンクライブラリ等、バイナリファイルの置換が挙げられる。
【００４３】
続いて、記録部１３２は、取得されたファイルパス名を、処理シーケンスログＳＬの一部である操作対象ファイルリストＳＬ２に記録する（Ｓ１２３）。
【００４４】
図９は、操作対象ファイルリストの一例を示す図である。同図に示されるように、操作対象ファイルリストＳＬ２には、操作対象とされたファイルのファイルパス名の一覧が記録される。
【００４５】
続いて、記録部１３２は、取得されたファイルパス名に係るファイルに関して置換が行われたことを、処理シーケンスログＳＬの一部であるリソース操作記録リストＳＬ３に記録する（Ｓ１２４）。
【００４６】
図１０は、リソース操作記録リストの一例を示す図である。同図に示されるように、リソース操作記録リストＳＬ３には、操作対象とされたソフトウェア資源ごとに、操作内容の詳細が記録される。同図において、リソース種別、操作種別、及びパラメタ１〜３等が操作内容の詳細の一例である。
【００４７】
リソース種別は、操作対象とされたソフトウェア資源の種別である。操作対象がファイルの場合、「ＦＩＬＥ」と記録される。
【００４８】
操作種別は、ソフトウェア資源に対する操作の種別である。操作対象とされたソフトウェア資源がファイルの場合、ステップＳ１２１において判定されたファイル操作種別が記録される。パラメタ１〜３に記録される値は、操作種別に応じて異なる。操作種別がファイル置換である場合、パラメタ１には、置換対象とされたファイルのファイルパス名が記録される。
【００４９】
なお、ステップＳ１２４の後、呼び出されたシステムコールは、記録部１３２によるフックより解放される。その結果、当該システムコールの本来の処理（ファイル置換）が実行される。
【００５０】
呼び出されたシステムコールのファイル操作種別が「ファイル編集」である場合、記録部１３２は、編集対象のファイルのファイルパス名をシステムコールの呼び出し内容（引数等）より取得する（Ｓ１２５）。ファイル編集の具体例としては、例えば、テキストファイルに対する書き込み等が挙げられる。
【００５１】
続いて、記録部１３２は、編集対象のファイルのコピー（複製）を所定のディレクトリ（又はフォルダ）に退避する（Ｓ１２６）。上記したように、記録部１３２は、システムコールが呼び出された時点でシステムコールの補足を行うため、編集前の状態のファイルを退避することができる。続いて、記録部１３２は、ステップＳ１２５において取得されたファイルパス名を、操作対象ファイルリストＳＬ２（図９）に記録する（Ｓ１２７）。続いて、記録部１３２は、取得されたファイルパス名に係るファイルに関して編集が行われたことを、リソース操作記録リストＳＬ３（図１０）に記録する（Ｓ１２８）。この場合、リソース種別には、「ＦＩＬＥ」、操作種別には、「ファイル編集」、パラメタ１には、編集対象のファイルパス名、パラメタ２には、退避されたコピーのファイルパス名が記録される。
【００５２】
なお、ステップＳ１２７の後、呼び出されたシステムコールは、記録部１３２によるフックより解放される。その結果、当該システムコールの本来の処理（ファイル編集）が実行される。
【００５３】
呼び出されたシステムコールのファイル操作種別が「ファイル削除」である場合、記録部１３２は、削除対象のファイルのファイルパス名をシステムコールの呼び出し内容（引数等）より取得する（Ｓ１２９）。続いて、記録部１３２は、取得されたファイルパス名を、操作対象ファイルリストＳＬ２（図９）に記録する（Ｓ１３０）。続いて、記録部１３２は、取得されたファイルパス名に係るファイルに関して削除が行われたことを、リソース操作記録リストＳＬ３（図１０）に記録する（Ｓ１３１）。この場合、リソース種別には、「ＦＩＬＥ」、操作種別には、「ファイル削除」、パラメタ１には、削除対象のファイルパス名が記録される。
【００５４】
なお、ステップＳ１３１の後、呼び出されたシステムコールは、記録部１３２によるフックより解放される。その結果、当該システムコールの本来の処理（ファイル削除）が実行される。
【００５５】
呼び出されたシステムコールのファイル操作種別が「ファイル追加」である場合、記録部１３２は、追加対象のファイルのファイルパス名をシステムコールの呼び出し内容（引数等）より取得する（Ｓ１３２）。続いて、記録部１３２は、取得されたファイルパス名を、操作対象ファイルリストＳＬ２（図９）に記録する（Ｓ１３３）。続いて、記録部１３２は、取得されたファイルパス名に係るファイルが追加されたことを、リソース操作記録リストＳＬ３（図１０）に記録する（Ｓ１３４）。この場合、リソース種別には、「ＦＩＬＥ」、操作種別には、「ファイル追加」、パラメタ１には、追加対象のファイルパス名が記録される。
【００５６】
なお、ステップＳ１３４の後、呼び出されたシステムコールは、記録部１３２によるフックより解放される。その結果、当該システムコールの本来の処理（ファイル追加）が実行される。
【００５７】
続いて、図６のステップＳ１１４の詳細について説明する。図１１は、レジストリ操作記録処理の処理手順の一例を説明するためのフローチャートである。
【００５８】
ステップＳ１４１において、記録部１３２は、呼び出されたシステムコールのレジストリ操作種別を判定する。本実施の形態において、レジストリ操作種別は、「レジストリ更新」、「レジストリ削除」、及び「レジストリ追加」等に分類される。「レジストリ更新」は、既存のレジストリキーの値の更新である。「レジストリ削除」は、既存のレジストリキーの削除である。「レジストリ追加」は、新たな（これまで存在しなかった）レジストリキーの追加である。
【００５９】
なお、各システムコールがいずれのレジストリ操作種別に属するか（すなわち、各システムコールとレジストリ操作種別との対応情報）は、例えば、予め補助記憶装置１０２に記憶されていてもよい。記録部１３２は、当該対応情報を参照して、呼び出されたシステムコールのレジストリ操作種別を判定してもよい。
【００６０】
呼び出されたシステムコールのレジストリ操作種別が「レジストリ更新」である場合、記録部１３２は、更新対象のレジストリキーの情報（キー名等）をシステムコールの呼び出し内容（引数等）や、更新対象のレジストリキーより取得する（Ｓ１４２）。続いて、記録部１３２は、取得された情報を、処理シーケンスログＳＬの一部である操作対象レジストリキーリストＳＬ４に記録する（Ｓ１４３）。
【００６１】
図１２は、操作対象レジストリキーリストの一例を示す図である。同図に示されるように、操作対象レジストリキーリストＳＬ４には、操作対象とされたレジストリキーごとに、キー名及び値種別の一覧が記録される。キー名は、システムコールの呼び出し内容より取得可能である。値種別（値の型）は、キー名に係るレジストリキーより取得可能である。
【００６２】
続いて、記録部１３２は、取得されたキー名に係るレジストリキーに関して更新が行われたことを、リソース操作記録リストＳＬ３（図１０）に記録する（Ｓ１４４）。
【００６３】
図１３は、リソース操作記録リストへのレジストリキーに関するレコードの記録例を示す図である。レジストリ更新に関しては、リソース種別には「ＲＥＧＩＳＴＲＹ」が記録され、操作種別には「レジストリ更新」が記録される。また、パラメタ１には、更新対象のレジストリキーのキー名が記録され、パラメタ２には、更新対処のレジストリキーの値種別が記録される。更に、パラメタ３には、更新対象のレジストリキーの更新後の値が記録される。
【００６４】
ステップＳ１４４の後、呼び出されたシステムコールは、記録部１３２によるフックより解放される。その結果、当該システムコールの本来の処理（レジストリ更新）が実行される。
【００６５】
呼び出されたシステムコールのレジストリ操作種別が「レジストリ削除」である場合、記録部１３２は、削除対象のレジストリキーの情報（キー名等）をシステムコールの呼び出し内容（引数等）や、更新対象のレジストリキーより取得する（Ｓ１４５）。続いて、記録部１３２は、取得された情報を、操作対象レジストリキーリストＳＬ４（図１２）に記録する（Ｓ１４６）。続いて、記録部１３２は、取得されたキー名に係るレジストリキーに関して削除が行われたことを、リソース操作記録リストＳＬ３（図１３）に記録する（Ｓ１４７）。この場合、リソース種別には、「ＲＥＧＩＳＴＲＹ」、操作種別には、「レジストリ削除」、パラメタ１には、削除対象のレジストリキーのキー名が記録される。
【００６６】
なお、ステップＳ１４７の後、呼び出されたシステムコールは、記録部１３２によるフックより解放される。その結果、当該システムコールの本来の処理（レジストリ削除）が実行される。
【００６７】
呼び出されたシステムコールのレジストリ操作種別が「レジストリ追加」である場合、記録部１３２は、追加対象のレジストリキーの情報（キー名等）をシステムコールの呼び出し内容（引数等）や、更新対象のレジストリキーより取得する（Ｓ１４８）。続いて、記録部１３２は、取得された情報を、操作対象レジストリキーリストＳＬ４（図１２）に記録する（Ｓ１４９）。続いて、記録部１３２は、取得されたキー名に係るレジストリキーが追加されたことを、リソース操作記録リストＳＬ３（図１３）に記録する（Ｓ１５０）。この場合、リソース種別には、「ＲＥＧＩＳＴＲＹ」、操作種別には、「レジストリ追加」、パラメタ１には、追加対象のレジストリキーのキー名、パラメタ２には、追加対象のレジストリキーの値種別、パラメタ３には、追加対象のレジストリキーの値が記録される。
【００６８】
なお、ステップＳ１５０の後、呼び出されたシステムコールは、記録部１３２によるフックより解放される。その結果、当該システムコールの本来の処理（レジストリ追加）が実行される。
【００６９】
続いて、図５のステップＳ１０３の詳細について説明する。図１４は、共通形式パッチの生成処理の処理手順の一例を説明するためのフローチャートである。
【００７０】
ステップＳ１５１において、パッチ生成部１３４は、置換ファイルを収集する。具体的には、パッチ生成部１３４は、リソース操作記録リストＳＬ３（図１３）より、リソース種別が「ＦＩＬＥ」であり、操作種別が「ファイル置換」であるレコードを抽出する。パッチ生成部１３４は、抽出された各レコードのパラメタ１に記録されているファイルパス名に係るファイルのコピーを所定のディレクトリに保存する。
【００７１】
続いて、パッチ生成部１３４は、追加ファイルを収集する（Ｓ１５２）。具体的には、具体的には、パッチ生成部１３４は、リソース操作記録リストＳＬ３（図１３）より、リソース種別が「ＦＩＬＥ」であり、操作種別が「ファイル追加」であるレコードを抽出する。パッチ生成部１３４は、抽出された各レコードのパラメタ１に記録されているファイルパス名に係るファイルのコピーを所定のディレクトリに保存する。
【００７２】
続いて、パッチ生成部１３４は、編集対象とされたファイルごとに、編集前後の差分情報を抽出し、抽出された差分情報が記録されたファイル（以下、「差分ファイル」という。）を生成する（Ｓ１５３）。具体的には、パッチ生成部１３４は、リソース操作記録リストＳＬ３（図１３）より、リソース種別が「ＦＩＬＥ」であり、操作種別が「ファイル編集」であるレコードを抽出する。パッチ生成部１３４は、抽出されたレコードごとに、パラメタ１に記録されているファイルパス名に係るファイル（編集後のファイル）と、パラメタ２に記録されているファイルパス名に係るファイル（編集前のファイル）との差分情報を抽出する。パッチ生成部１３４は、抽出された差分情報が記録された差分ファイルを生成し、当該差分ファイルのファイルパス名を、当該レコードのパラメタ３に記録する。そうすることによって、差分ファイルのファイルパス名が、編集対象のファイルパス名に関連付けられる。
【００７３】
続いて、パッチ生成部１３４は、スクリプトファイルＳＦの生成をスクリプト生成部１３３に実行させる（Ｓ１５４）。その結果、スクリプトファイルＳＦが生成される。
【００７４】
続いて、パッチ生成部１３４は、ステップＳ１５１において収集された置換ファイル群ＲＦと、ステップＳ１５２において収集された追加ファイル群ＡＦと、ステップＳ１５３において生成された差分ファイル群ＤＦと、ステップＳ１５４において生成されたスクリプトファイルＳＦとを含む書庫ファイルを生成する（Ｓ１５５）。図４に示されるように、当該書庫ファイルが共通形式パッチＣＰである。
【００７５】
共通形式パッチＣＰに、置換ファイル群や追加ファイル群ＡＦが含まれることで、固有形式パッチによって置換されるファイル群や追加される群を、共通形式パッチＣＰの適用時にも、適用することができる。また、共通形式パッチＣＰに、差分ファイル群ＤＦが含まれることで、固有形式パッチの適用時におけるファイルの編集を、共通形式パッチＣＰの適用時に再現することができる。
【００７６】
続いて、図１４のステップＳ１５４の詳細について説明する。図１５は、スクリプトファイルの生成処理の処理手順の一例を説明するためのフローチャートである。
【００７７】
ステップＳ１６１〜Ｓ１６３において、スクリプト生成部１３３は、停止対象サービスリストＳＬ１（図７）に記録されている各サービス名を含む停止対象サービス定義を、スクリプトファイルＳＦに記録する。
【００７８】
図１６は、スクリプトファイルの記述内容の一例を示す図である。同図において、１行目から４行目までが、ステップＳ１６１〜Ｓ１６３において記録される停止対象サービス定義である。すなわち、停止対象サービス定義は、「ＳＥＲＶＩＣＥＳ＝｛＜サービス名＞｝」の形式を有し、＜サービス名＞の部分に、停止対象とされた各サービスのサービス名が列挙される。なお、同図の行番号は、便宜上付与されたものであり、実際のスクリプトファイルＳＦに記述される必要は無い。
【００７９】
続いて、スクリプト生成部１３３は、操作対象レジストリキーリストＳＬ４（図１２）に記録されている各レジストリキーのキー名及び値種別を含む操作対象レジストリキー定義を、スクリプトファイルＳＦに追記する（Ｓ１６４〜Ｓ１６６）。図１６のスクリプトファイルＳＦにおいて、６行目から９行目までが、ステップＳ１６４〜Ｓ１６６において追記される操作対象レジストリキー定義である。すなわち、操作対象レジストリキー定義は、「ＲＥＧＩＳＴＲＹＫＥＹＳ＝｛＜レジストリキー情報＞｝」の形式を有する。＜レジストリキー情報＞の部分には、操作対象とされた各レジストリキーのキー名及び値種別の組が列挙される。
【００８０】
続いて、スクリプト生成部１３３は、操作対象ファイルリストＳＬ２（図９）に記録されている各ファイルのファイルパス名を含む操作対象ファイル定義を、スクリプトファイルＳＦに追記する（Ｓ１６７〜Ｓ１６９）。図１６のスクリプトファイルＳＦにおいて、１１行目から１７行目までが、ステップＳ１６４〜Ｓ１６９において追記される操作対象ファイル定義である。すなわち、操作対象ファイル定義は、「ＦＩＬＥＳ＝｛＜ファイルパス名＞｝」の形式を有する。＜ファイルパス名＞の部分には、操作対象とされた各ファイルのファイルパス名が列挙される。
【００８１】
続いて、スクリプト生成部１３３は、ＯＳ再起動フラグの値を参照して、ＯＳ再起動定義をスクリプトファイルＳＦの追記する（Ｓ１７０）。図１６のスクリプトファイルＳＦにおいて、１９行目が、ステップＳ１７０において追記されるＯＳ再起動定義である。すなわち、ＯＳ再起動定義は、「ＲＥＳＴＡＲＴ＿ＯＳ＝＜ＯＳ再起動フラグ＞」の形式を有する。＜ＯＳ再起動フラグ＞の部分には、ＯＳ再起動フラグの値が記録される。ＯＳ再起動定義は、ＯＳの再起動命令の一例である。スクリプトファイルＳＦに、ＯＳ再起動定義が記録されることで、固有形式パッチの適用時にＯＳ１１の再起動が実行された場合に、共通形式パッチの適用時にも、ＯＳ１１の再起動を再現させることができる。また、複数の固有形式パッチのそれぞれごとにＯＳ１１の再起動が実行された場合であっても、スクリプトファイルＳＦに記録されるＯＳ再起動定義は一つである。したがって、複数の固有形式パッチごとに実行されるＯＳ１１の再起動を、一回のＯＳ１１の再起動に統合させることができる。
【００８２】
続いて、スクリプト生成部１３３は、リソース操作記録リストＳＬ３（図１３）のレコードごとに、ステップＳ１７１〜Ｓ１７３を実行する。
【００８３】
ステップＳ１７１において、スクリプト生成部１３３は、処理対象のレコードのリソース種別が「ＦＩＬＥ」であるか「ＲＥＧＥＳＴＲＹ」であるかに応じて処理を分岐させる。リソース種別が「ＦＩＬＥ」である場合、スクリプト生成部１３３は、ファイル操作に関するスクリプト（ファイル操作スクリプト）のスクリプトファイルＳＦへの追記処理を実行する（Ｓ１７２）。図１６において、２１行目から２６行目までが、ファイル操作スクリプトに該当する。
【００８４】
リソース種別が「ＲＥＧＩＳＴＲＹ」である場合、スクリプト生成部１３３は、レジストリ操作に関するスクリプト（レジストリ操作スクリプト）のスクリプトファイルＳＦへの追記処理を実行する（Ｓ１７３）。図１６において、２８行目及び２９行目が、レジストリ操作スクリプトに該当する。
【００８５】
リソース操作記録リストＳＬ３の全てのレコードに関してステップＳ１７１〜Ｓ１７３が終了すると、図１５の処理は終了する。すなわち、スクリプトファイルＳＦは完成する。
【００８６】
続いて、図１５のステップＳ１７２の詳細について説明する。図１７は、ファイル操作スクリプトの追記処理の処理手順の一例を説明するためのフローチャートである。
【００８７】
ステップＳ１８１において、スクリプト生成部１３３は、処理対象のレコード（リソース操作記録リストＳＬ３（図１３）のレコード）の操作種別に応じて、処理を分岐させる。当該レコードの操作種別が、「ファイル追加」又は「ファイル置換」である場合、スクリプト生成部１３３は、ｃｏｐｙ＿ｆｉｌｅコマンドを含む行をスクリプトファイルＳＦに追記する。図１６では、２１行目から２３行目においてｃｏｐｙ＿ｆｉｌｅコマンドが記述されている。ｃｏｐｙ＿ｆｉｌｅコマンドは、ファイルのコピー命令を示すコマンドであり、以下の形式を有する。
ｃｏｐｙ＿ｆｉｌｅ  ＜コピー元ファイルパス名＞  ＜コピー先ファイルパス名＞
スクリプト生成部１３３は、追加ファイル群ＡＦ又は置換ファイル群ＲＦに含まれているファイルのうち、当該レコードに対応するファイルのファイルパス名（共通形式パッチＣＰの書庫ファイル内のパス名）を＜コピー元ファイルパス名＞に当てはめる。スクリプト生成部１３３は、また、当該レコードのパラメタ１に記録されているファイルパス名を＜コピー先ファイルパス名＞に当てはめる。
【００８８】
当該レコードの種別が、「ファイル削除」である場合、スクリプト生成部１３３は、ｄｅｌｅｔｅ＿ｆｉｌｅコマンドを含む行をスクリプトファイルＳＦに追記する（Ｓ１８３）。ｄｅｌｅｔｅ＿ｆｉｌｅコマンドは、ファイルの削除命令を示すコマンドであり、以下の形式を有する。
ｄｅｌｅｔｅ＿ｆｉｌｅ  ＜削除対象ファイルパス名＞
スクリプト生成部１３３は、当該レコードのパラメタ１に記録されているファイルパス名を＜削除対象ファイルパス名＞に当てはめる。
【００８９】
当該レコードの種別が、「ファイル編集」である場合、スクリプト生成部１３３は、ａｐｐｌｙ＿ｄｉｆｆコマンドを含む行をスクリプトファイルＳＦに追記する（Ｓ１８４）。図１６では、２５行目及び２６行目においてａｐｐｌｙ＿ｄｉｆｆコマンドが記述されている。ａｐｐｌｙ＿ｄｉｆｆコマンドは、ファイルへの差分情報の適用命令を示すコマンドであり、以下の形式を有する。
ａｐｐｌｙ＿ｄｉｆｆ  ＜差分情報適用対象ファイルパス名＞  ＜差分ファイルパス名＞
スクリプト生成部１３３は、当該レコードのパラメタ１に記録されているファイルパス名を＜差分情報適用対象ファイルパス名＞に当てはめ、当該レコードのパラメタ３に記録されているファイルパス名を＜差分ファイルパス名＞に当てはめる。
【００９０】
続いて、図１５のステップＳ１７３の詳細について説明する。図１８は、レジストリ操作スクリプトの追記処理の処理手順の一例を説明するためのフローチャートである。
【００９１】
ステップＳ１９１において、スクリプト生成部１３３は、処理対象のレコード（リソース操作記録リストＳＬ３（図１３）のレコード）の操作種別に応じて、処理を分岐させる。当該レコードの操作種別が、「レジストリ追加」である場合、スクリプト生成部１３３は、ａｄｄ＿ｒｅｇｉｓｔｒｙコマンドを含む行をスクリプトファイルＳＦに追記する（Ｓ１９２）。図１６では、２９行目において、ａｄｄ＿ｒｅｇｉｓｔｒｙコマンドが記述されている。ａｄｄ＿ｒｅｇｉｓｔｒｙコマンドは、レジストリキーの追加命令を示すコマンドであり、以下の形式を有する。
【００９２】
ａｄｄ＿ｒｅｇｉｓｔｒｙ  ＜キー名＞  ＜値種別＞  ＜値＞
スクリプト生成部１３３は、当該レコードのパラメタ１に記録されているキー名を＜キー名＞に当てはめ、パラメタ２に記録されている値種別を＜値種別＞に当てはめ、パラメタ３に記録されている値を＜値＞に当てはめる。
【００９３】
当該レコードの操作種別が、「レジストリ削除」である場合、スクリプト生成部１３３は、ｄｅｌｅｔｅ＿ｒｅｇｉｓｔｒｙコマンドを含む行をスクリプトファイルＳＦに追記する（Ｓ１９３）。ｄｅｌｅｔｅ＿ｒｅｇｉｓｔｒｙコマンドは、レジストリキーの削除命令を示すコマンドであり、以下の形式を有する。
【００９４】
ｄｅｌｅｔｅ＿ｒｅｇｉｓｔｒｙ  ＜キー名＞
スクリプト生成部１３３は、当該レコードのパラメタ１に記録されているキー名を＜キー名＞に当てはめる。
【００９５】
当該レコードの操作種別が、「レジストリ更新」である場合、スクリプト生成部１３３は、ｕｐｄａｔｅ＿ｒｅｇｉｓｔｒｙコマンドを含む行をスクリプトファイルＳＦに追記する（Ｓ１９４）。図１６では、２８行目において、ｕｐｄａｔｅ＿ｒｅｇｉｓｔｒｙコマンドが記述されている。ｕｐｄａｔｅ＿ｒｅｇｉｓｔｒｙコマンドは、レジストリキーの更新命令を示すコマンドであり、以下の形式を有する。
ｕｐｄａｔｅ＿ｒｅｇｉｓｔｒｙ  ＜キー名＞  ＜値種別＞  ＜値＞
スクリプト生成部１３３は、当該レコードパラメタ１に記録されているキー名を＜キー名＞に当てはめ、パラメタ２に記録されている値種別を＜値種別＞に当てはめ、パラメタ３に記録されている値を＜値＞に当てはめる。
【００９６】
次に、上記のように生成された共通形式パッチＣＰが適用される装置について説明する。図１９は、本発明の実施の形態におけるパッチ適用装置のソフトウェア構成例を示す図である。図１９中、図２と同一部分には同一符号を付している。すなわち、パッチ適用装置２０は、パッチ生成装置１０と同一のＯＳ１１及びミドルウェア１２を有する。
【００９７】
パッチ適用装置２０は、更に、パッチ適用部２１を有する。パッチ適用部２１は、パッチ適用装置２０にインストールされたプログラムがパッチ適用装置２０のＣＰＵに実行させる処理により実現される。同図において、パッチ適用部２１は、受信部２１１、パッチ展開部２１２、及びスクリプト実行部２１３等を含む。
【００９８】
受信部２１１は、ネットワークを介して配信される共通形式パッチＣＰを受信する。共通形式パッチＣＰの配信は、パッチ生成装置１０によって実行されてもよいし、共通形式パッチＣＰ等の管理を行う他のコンピュータによって実行されてもよい。また、共通形式パッチＣＰは、ネットワークを介して受信されなくてもよい。例えば、携帯型の記録媒体に記録されて配布されてもよい。この場合、受信部２１１は、パッチ適用装置２０にセットされた当該記録媒体より共通形式パッチＣＰを読み込む。
【００９９】
パッチ展開部２１２は、書庫ファイルである共通形式パッチＣＰに含まれているファイル群を展開する。スクリプト実行部２１３は、共通形式パッチＣＰに含まれているスクリプトファイルＳＦに記述されているスクリプトに従った処理を実行する。
【０１００】
なお、パッチ適用装置２０のハードウェア構成は、図１に示されるものと同様でよい。
【０１０１】
以下、パッチ適用装置２０が実行する処理手順について説明する。図２０は、共通形式パッチの適用処理の処理手順の概要の一例を説明するためのフローチャートである。
【０１０２】
ステップＳ２０１において、受信部２１１は、ネットワークを介して配信される共通形式パッチＣＰを受信する。続いて、展開部は、共通形式パッチＣＰを所定のディレクトリにおいて解凍する（Ｓ２０２）。その結果、共通形式パッチＣＰに含まれている、スクリプトファイルＳＦ、置換ファイル群ＲＦ、追加ファイル群ＡＦ、及び差分ファイル群ＤＦ等が、展開される。
【０１０３】
続いて、スクリプト実行部２１３は、スクリプトファイルＳＦに記述されているスクリプトに従った処理を実行する（Ｓ２０３）。
【０１０４】
続いて、ステップＳ２０３の詳細について説明する。図２１は、スクリプトの実行処理の処理手順の一例を説明するためのフローチャートである。
【０１０５】
ステップＳ２１１において、スクリプト実行部２１３は、スクリプトファイルＳＦの定義部分の解析処理を実行する。定義部分とは、停止対象サービス定義、操作対象レジストリキー定義、操作対象ファイル定義、及びＯＳ再起動定義をいう。定義部分の解析により、具体的には、停止対象サービスリストＳＬ１（図７）、操作対象レジストリキーリストＳＬ４（図１２）、操作対象ファイルリストＳＬ２（図９）、及び再起動フラグが、パッチ適用装置２０のメモリ装置に復元される。
【０１０６】
続いて、スクリプト実行部２１３は、復元された停止対象サービスリストＳＬ１（図７）に含まれているサービス名に係るプロセスを停止させる（Ｓ２１２）。当該プロセス群が実行する処理が、置換ファイル群ＲＦ、追加ファイル群ＡＦ、及び差分ファイル群ＤＦ等の適用の妨げにならないようにするためである。
【０１０７】
続いてスクリプト実行部２１３は、操作対象レジストリキーリストＳＬ４（図１２）に含まれているキー名に係るレジストリキーを退避する（Ｓ２１３）。続いて、スクリプト実行部２１３は、操作対象ファイルリストＳＬ２（図９）に含まれているファイルパス名に係るファイルを退避する（Ｓ２１４）。ステップＳ２１３及びＳ２１４は、共通形式パッチＣＰの適用に失敗した場合に実行されるロールバック処理（リカバリ処理）のための準備処理である。
【０１０８】
続いて、スクリプト実行部２１３は、スクリプトファイルＳＦのコマンドの実行処理を実行する（Ｓ２１５）。コマンドの実行処理によって、例えば、図１６の２１行目以降に記述されている各コマンドに応じた処理が実行される。その結果、置換ファイル群ＲＦ、追加ファイル群ＡＦ、及び差分ファイル群ＤＦ等が、パッチ適用装置２０のＯＳ１１又はミドルウェア１２に適用（反映）される。続いて、スクリプト実行部２１３は、停止対象サービスリストＳＬ１（図７）に含まれているサービス名に係るプロセスを起動させる（Ｓ２１６）。
【０１０９】
ステップＳ２１５又はステップＳ２１６の実行中にエラーが発生した場合（Ｓ２１７でＮｏ）、スクリプト実行部２１３は、ロールバック処理を実行する（Ｓ２１８）。ロールバック処理により、パッチ適用装置２０のＯＳ１１及びミドルウェア１２は、ステップＳ２１５の実行前の状態に戻される。
【０１１０】
一方、ステップＳ２１５及びステップＳ２１６の実行に成功した場合（Ｓ２１７でＹｅｓ）、又はステップＳ２１８に続いて、スクリプト実行部２１３は、スクリプトの実行の成否（すなわち、共通形式パッチＣＰの適用の成否）を示す情報を、例えば、共通形式パッチＣＰの配信元のコンピュータに送信する（Ｓ２１９）。続いて、ＯＳ再起動フラグが「ｔｒｕｅ」である場合（Ｓ２２０でＹｅｓ）、スクリプト実行部２１３は、パッチ適用装置２０のＯＳ１１を再起動させる（Ｓ２２１）。ＯＳ１１の再起動により、共通形式パッチＣＰの適用は、パッチ適用装置２０において有効となる。以上でスクリプトの実行処理は終了する。
【０１１１】
続いて、ステップＳ２１１の詳細について説明する。図２２は、スクリプトファイルの定義部分の解析処理の処理手順の一例を説明するためのフローチャートである。
【０１１２】
ステップＳ２３１において、スクリプト実行部２１３は、スクリプトファイルＳＦをオープンする。続いて、スクリプト実行部２１３は、スクリプトファイルＳＦから１行ずつ読み込み、読み込んだ行の定義に応じて処理を分岐させる（Ｓ２３２）。
【０１１３】
当該行が「ＳＥＲＶＩＣＥＳ＝」で開始されている場合、すなわち、当該行が停止対象サービス定義の開始行である場合、スクリプト実行部２１３は、当該停止対象サービス定義に基づいて、停止対象サービスリストＳＬ１（図７）をメモリ装置内に復元する（Ｓ２３３）。当該行が「ＲＥＧＩＳＴＲＹ＿ＫＹＥＳ＝」で開始されている場合、すなわち、当該行が操作対象レジストリキー定義の開始行である場合、スクリプト実行部２１３は、当該操作対象レジストリキー定義に基づいて、操作対象レジストリキーリストＳＬ４（図１２）をメモリ装置内に復元する（Ｓ２３４）。
【０１１４】
当該行が「ＦＩＬＥＳ＝」で開始されている場合、すなわち、当該行が操作対象ファイル定義の開始行である場合、スクリプト実行部２１３は、当該操作対象ファイル定義に基づいて、操作対象ファイルリストＳＬ２（図９）をメモリ装置内に復元する（Ｓ２３５）。当該行が「ＲＥＳＴＡＲＴ＿ＯＳ＝」で開始されている場合、すなわち、当該行がＯＳ再起動定義の開始行である場合、スクリプト実行部２１３は、当該ＯＳ再起動定義に基づいて、ＯＳ再起動フラグを設定する（Ｓ２３６）。
【０１１５】
ステップＳ２３２〜Ｓ２３６がスクリプトファイルＳＦ内の全ての定義に関して実行されると、スクリプト実行部２１３は、スクリプトファイルＳＦをクローズする（Ｓ２３７）。
【０１１６】
続いて、図２１のステップＳ２１２の詳細について説明する。図２３は、サービスの停止処理の処理手順の一例を説明するためのフローチャートである。
【０１１７】
Ｓ２４１〜Ｓ２４３において、スクリプト実行部２１３は、復元された停止対象サービスリストＳＬ１（図７）内の順番で、各サービスのプロセスを停止させる。
【０１１８】
続いて、図２１のステップＳ２１３の詳細について説明する。図２４は、レジストリキーの退避処理の処理手順の一例を説明するためのフローチャートである。
【０１１９】
スクリプト実行部２１３は、ステップＳ２５１〜Ｓ２５６を、復元された操作対象レジストリキーリストＳＬ４（図１２）に含まれているレジストリキーごとに実行する。
【０１２０】
ステップＳ２５１において、スクリプト実行部２１３は、処理対象のレジストリキーのキー名及び値種別を、操作対象レジストリキーリストＳＬ４からレジストリキー退避リストＬ５に転記する。
【０１２１】
図２５は、レジストリキー退避リストの一例を示す図である。同図に示されるように、レジストリキー退避リストＬ５には、操作対象レジストリキーリストＳＬ４（図１２）に含まれているレジストリキーごとに、キー名、存在フラグ、値種別、及び値等が記録される。存在フラグは、レジストリキーがパッチ適用装置２０のレジストリに存在するか（ｔｒｕｅ）否か（ｆａｌｓｅ）を示す情報である。なお、値は、パッチ適用装置２０に存在するレジストリキーに関してのみ記録される。レジストリキー退避リストＬ５は、例えば、パッチ適用装置２０のメモリ装置に記憶される。
【０１２２】
続いて、スクリプト実行部２１３は、処理対象のレジストリキーと同一のキー名及び値種別を有するレジストリキーがパッチ適用装置２０のレジストリに存在するか否かを確認する（Ｓ２５２）。該当するレジストリキーが存在する場合（Ｓ２５２でＹｅｓ）、スクリプト実行部２１３は、レジストリキー退避リストＬ５において、当該レジストリキーに対応するレコードの存在フラグに「ｔｒｕｅ」を記録する（Ｓ２５３）。続いて、スクリプト実行部２１３は、当該レジストリキーの値を、パッチ適用装置２０のレジストリより取得する（Ｓ２５３）。続いて、スクリプト実行部２１３は、取得された値を、レジストリキー退避リストＬ５において、当該レジストリキーに対応するレコードに記録する（Ｓ２５５）。これによって、当該レジストリキーはレジストリキー退避リストＬ５に退避されたことになる。
【０１２３】
一方、該当するレジストリキーが存在しない場合（Ｓ２５２でＮｏ）、スクリプト実行部２１３は、レジストリキー退避リストＬ５において、当該レジストリキーに対応するレコードの存在フラグに「ｆａｌｓｅ」を記録する（Ｓ２５６）。これによって、パッチ適用装置２０のレジストリには、当該レジストリキーは存在しなかったことが、レジストリキー退避リストＬ５に記録されたことになる。
【０１２４】
続いて、図２１のステップＳ２１４の詳細について説明する。図２６は、ファイルの退避処理の処理手順の一例を説明するためのフローチャートである。
【０１２５】
スクリプト実行部２１３は、ステップＳ２６１及びＳ２６２を、復元された操作対象レジストリキーリストＳＬ４（図１２）に含まれているファイルパス名ごとに実行する。
【０１２６】
ステップＳ２６１において、スクリプト実行部２１３は、処理対象のファイルパス名と同一のファイルパス名のファイルがパッチ適用装置２０の補助記憶装置（ファイルシステム）に存在するか否かを確認する。該当するファイルが存在する場合（Ｓ２６１でＹｅｓ）、当該ファイルを、一時的なディレクトリにコピーする（Ｓ２６２）。その結果、当該ファイルは、一時的なディレクトリに退避される。
【０１２７】
一方、該当するファイルが存在しない場合（Ｓ２６２でＮｏ）、一時的なディレクトリへのコピーは実行されない。
【０１２８】
続いて、図２１のステップＳ２１５の詳細について説明する。図２７は、スクリプトのコマンドの実行処理の処理手順の一例を説明するためのフローチャートである。
【０１２９】
ステップＳ２７１において、スクリプト実行部２１３は、スクリプトファイルＳＦをオープンする。続いて、スクリプト実行部２１３は、スクリプトファイルＳＦから１行ずつ読み込み、読み込んだ行のコマンドに応じて処理を分岐させる（Ｓ２７２）。
【０１３０】
当該行のコマンドが、ｃｏｐｙ＿ｆｉｌｅコマンド又はｄｅｌｅｔｅ＿ｆｉｌｅコマンドである場合、スクリプト実行部２１３は、ファイルに関してコマンドに応じた操作を実行する（Ｓ２７３）。具体的には、ｃｏｐｙ＿ｆｉｌｅコマンドの場合、スクリプト実行部２１３は、共通形式パッチＣＰより展開された置換ファイル群ＲＦ又は追加ファイル群ＡＦの中で当該コマンドにおいてコピー元として指定されているファイルを、当該コマンドにおいて指定されているコピー先にコピーする。これにより、ファイル置換又はファイル追加が実行される。また、ｄｅｌｅｔｅ＿ｆｉｌｅコマンドの場合、スクリプト実行部２１３は、当該コマンドにおいて削除対象として指定されているファイルを、パッチ適用装置２０の補助記憶装置（ファイルシステム）より削除する。
【０１３１】
当該行のコマンドが、ａｐｐｌｙ＿ｄｉｆｆコマンドである場合、スクリプト実行部２１３は、当該コマンドに指定されている差分ファイルに格納されている差分情報を、当該コマンドに指定されている、パッチ適用装置２０の補助記憶装置（ファイルシステム）内のファイルに適用する（Ｓ２７４）。差分ファイルは、共通形式パッチＣＰより展開された差分ファイル群ＤＦのうちの一つの差分ファイルである。
【０１３２】
当該行のコマンドが、ｕｐｄａｔｅ＿ｒｅｇｉｓｔｒｙコマンド、ａｄｄ＿ｒｅｇｉｓｔｒｙコマンド、又はｄｅｌｅｔｅ＿ｒｅｇｉｓｔｒｙコマンドである場合、スクリプト実行部２１３は、パッチ適用装置２０のレジストリのレジストリキーに関してコマンドに応じた操作を実行する（Ｓ２７５）。具体的には、ｕｐｄａｔｅ＿ｒｅｇｉｓｔｒｙコマンドの場合、スクリプト実行部２１３は、当該コマンドに指定されているキー名及び値種別に係るレジストリキーの値を、当該コマンドに指定されている値に更新する。ａｄｄ＿ｒｅｇｉｓｔｒｙコマンドの場合、スクリプト実行部２１３は、該コマンドに指定されているキー名及び値種別に係るレジストリキーを生成し、当該レジストリキーに、当該コマンドに指定されている値を設定する。ｄｅｌｅｔｅ＿ｒｅｇｉｓｔｒｙコマンドの場合、スクリプト実行部２１３は、当該コマンドに指定されているキー名に係るレジストリキーを削除する。
【０１３３】
ステップＳ２７２〜Ｓ２７５がスクリプトファイルＳＦ内の全てのコマンドに関して実行されると、スクリプト実行部２１３は、スクリプトファイルＳＦをクローズする（Ｓ２７６）。
【０１３４】
続いて、図２１のステップＳ２１６の詳細について説明する。図２８は、サービスの起動処理の処理手順の一例を説明するためのフローチャートである。
【０１３５】
Ｓ２４１〜Ｓ２４３において、スクリプト実行部２１３は、復元された停止対象サービスリストＳＬ１（図７）内の逆の順番で、各サービスのプロセスを起動させる。ここで、停止対象サービスリストＳＬ１内の逆の順番ということは、各サービスの停止順に対して逆順に各サービスを起動させるとうことである。これは、サービス間の依存関係を考慮したためである。すなわち、通常、依存先（他から依存されている方）と依存元（他に依存している方）とでは、依存元が先に停止されると考えられる。依存先が先に停止してしまっては、依存元に異常が発生する可能性が有るからである。一方、起動時には、依存先が先に起動している必要がある。依存先が起動されていない状態では、依存元は正常に起動できない可能性が有るからである。斯かる事情を考慮し、依存先を先に起動させるために、停止対象サービスリストＳＬ１内の逆の順番で、各サービスが起動される。
【０１３６】
続いて、図２１のステップＳ２１８の詳細について説明する。図２９は、ロールバック処理の処理手順の一例を説明するためのフローチャートである。
【０１３７】
スクリプト実行部２１３は、復元された操作対象ファイルリストＳＬ２に含まれているファイルパス名ごとにステップＳ３０１〜Ｓ３０３を実行する。ステップＳ３０１において、スクリプト実行部２１３は、処理対象のファイルパス名に対応するファイルが、一時的なディレクトリに存在するか否かを確認する。一時的なディレクトリとは、図２６のステップＳ２６２において、ファイルの退避先として使用されたディレクトリである。
【０１３８】
当該ファイルが一時的なディレクトリに存在する場合（Ｓ３０１でＹｅｓ）、スクリプト実行部２１３は、当該ファイルを、パッチ適用装置２０の補助記憶装置（ファイルシステム）において、処理対象のファイルパス名が示す位置にコピー又は移動する（Ｓ３０２）。一方、当該ファイルが一時的なディレクトリに存在しない場合（Ｓ３０１でＮｏ）、スクリプト実行部２１３は、パッチ適用装置２０の補助記憶装置（ファイルシステム）において、処理対象のファイルパス名に係るファイルを削除する（Ｓ３０３）。一時的なディレクトリに存在しないということは、処理対象のファイルパス名に係るファイルは、スクリプトのコマンドの実行によって追加されたファイルだからである。
【０１３９】
続いて、スクリプト実行部２１３は、レジストリキー退避リストＬ５（図２５）のレコードごとに、ステップＳ３０４〜Ｓ３０６を実行する。ステップＳ３０４において、スクリプト実行部２１３は、処理対象のレコードの存在フラグは「ｔｒｕｅ」であるか否かを判定する。当該存在フラグが「ｔｒｕｅ」である場合（Ｓ３０４でＹｅｓ）、スクリプト実行部２１３は、パッチ適用装置２０のレジストリにおいて、処理対象のレコードのキー名に係るレジストリキーに当該レコードに記録されている値を設定する（Ｓ３０５）。
【０１４０】
一方、当該存在フラグが「ｆａｌｓｅ」である場合（Ｓ３０４でＮｏ）、スクリプト実行部２１３は、処理対象のレコードのキー名に係るレジストリキーを、パッチ適用装置２０のレジストリより削除する（Ｓ３０６）。当該レジストリキーは、スクリプトのコマンドの実行によって追加されたレジストリキーだからである。
【０１４１】
以上によって、パッチ適用装置２０のソフトウェア資源の状態は、共通形式パッチＣＰの適用前の状態に戻される。
【０１４２】
ところで、本実施の形態のパッチ生成装置１０及びパッチ適用装置２０は、図３０に示されるような情報処理システムに適用されてもよい。
【０１４３】
図３０は、本発明の実施の形態の情報処理システムの一例を示す図である。同図の情報処理システム１において、パッチ生成装置１０、パッチ適用装置２０ａ、２０ｂ、及び２０ｃ等の複数台のパッチ適用装置２０、並びに管理装置３０は、例えば、ＬＡＮ（Local Area Network）又はインターネット等のネットワークを介して接続されている。
【０１４４】
管理装置３０は、パッチ生成装置１０において生成される共通形式パッチＣＰの管理及び配信等を実行するコンピュータである。
【０１４５】
例えば、パッチ生成装置１０は、共通形式パッチＣＰの生成の完了に応じ、自動的に、当該共通形式パッチＣＰを管理装置３０に送信する。管理装置３０は、共通形式パッチＣＰを受信すると、当該共通形式パッチＣＰを、各パッチ適用装置２０に配信する。配信先のパッチ適用装置２０のＩＰアドレス又はＵＲＬ（Uniform Resource Locator）等は、予め管理装置３０に設定されていればよい。または、管理装置３０は、共通形式パッチＣＰの配信前に、ブロードキャスト等を利用して、パッチ適用装置２０を探索してもよい。
【０１４６】
各パッチ適用装置２０のパッチ適用部２１は、管理装置３０より配信された共通形式パッチＣＰを受信し、上記した処理を実行する。
【０１４７】
なお、パッチ生成装置１０及び各パッチ適用装置２０は、物理的なコンピュータ（物理マシン）でなくてもよく、仮想的なコンピュータ（仮想マシン）であってもよい。この場合、パッチ生成装置１０及び各パッチ適用装置２０が、同一の物理マシン上で動作する形態が採用されてもよい。
【０１４８】
また、仮想マシンとしてのパッチ生成装置１０のソフトウェア環境（ＯＳ１１及びミドルウェア１２等）が、仮想マシンとしての各パッチ適用装置２０にクローニング（複製）されることにより、各パッチ適用装置２０のソフトウェア環境が構築されてもよい。この場合、パッチ生成部１３４及びパッチ適用部２１としてコンピュータを機能させるプログラムがパッチ生成装置１０にインストールされていれば、クローニングの際に、自動的にパッチ適用装置２０にパッチ適用部２１を配備することができる。
【０１４９】
上述したように、本実施の形態によれば、適用対象とされるソフトウェアごと又はパッチをリリースするベンダごとに、データ形式又は適用方法が異なる固有形式パッチを、適用対象のソフトウェア又はベンダを問わず共通の形式のパッチに変換することができる。したがって、システム管理者等は、各固有形式パッチの適用方法を意識する必要はなく、パッチの適用作業を単純化することができ、当該作業の負担を軽減することができる。したがって、パッチの適用対象となるコンピュータが複数存在する場合であっても、パッチの配布及び適用処理の自動化を容易に行うことができる。
【０１５０】
また、複数の固有形式パッチに基づいて、一つの共有形式パッチを生成することができるため、斯かる点においても、パッチの適用作業の単純化等を図ることができる。特に、共通形式パッチＣＰでは、ＯＳ１１の再起動処理が一回で済むように、スクリプトファイルＳＦが生成されるため、ＯＳ１１の再起動処理に要する時間の削減を図ることもできる。
【０１５１】
なお、本実施の形態において、スクリプト生成部１３３は、第一の生成部の一例である。パッチ生成部１３４は、第二の生成部の一例である。共通形式パッチＣＰは、実行プログラムの一例である。
【０１５２】
以上、本発明の実施例について詳述したが、本発明は斯かる特定の実施形態に限定されるものではなく、特許請求の範囲に記載された本発明の要旨の範囲内において、種々の変形・変更が可能である。
【０１５３】
以上の説明に関し、更に以下の項を開示する。
（付記１）
パッチプログラムの適用処理中に行なわれた操作を検出し、前記操作の履歴情報を記憶部に記録する記録部と、
前記履歴情報に示される操作を実行させる命令を含むスクリプトを生成する第一の生成部と、
生成した前記スクリプトに基づいて前記パッチプログラムを実行させる実行プログラムを生成する第二の生成部と、
を有する生成装置。
（付記２）
前記記録部は、複数の前記パッチプログラムの適用処理中における前記操作の履歴情報を記憶部に記録する付記１記載の生成装置。
（付記３）
前記記録部は、前記パッチプログラムの適用処理中におけるソフトウェア資源の追加又は置き換えを検出し、追加された又は置き換えられたソフトウェア資源の識別名を前記記憶部に記録し、
前記第二の生成部は、前記記憶部が記憶する前記識別名に係るソフトウェア資源を含む前記実行プログラムを生成する付記１又は２記載の生成装置。
（付記４）
前記記録部は、前記パッチプログラムの適用処理中におけるプログラムの停止を検出し、停止されたプログラムの識別名を前記記憶部に記録し、
前記第一の生成部は、前記プログラムの識別名を含む前記スクリプトを生成する付記１乃至３いずれか一項記載の生成装置。
（付記５）
前記記録部は、前記パッチプログラムの適用処理中におけるオペレーティングシステムの再起動の実行を検出し、該再起動が実行されたことを示す情報を前記記憶部に記録し、
前記第一の生成部は、前記情報に基づいて、オペレーティングシステムの再起動命令を含む前記スクリプトを生成する付記１乃至４いずれか一項記載の生成装置。
（付記６）
パッチプログラムの適用処理中に行なわれた操作を検出し、前記操作の履歴情報を記憶部に記録し、
前記履歴情報に示される操作を実行させる命令を含むスクリプトを生成し、
生成した前記スクリプトに基づいて前記パッチプログラムを実行させる実行プログラムを生成する処理をコンピュータが実行する生成方法。
（付記７）
前記記録する処理は、複数の前記パッチプログラムの適用処理中における前記操作の履歴情報を記憶部に記録する付記６記載の生成方法。
（付記８）
前記記録する処理は、前記パッチプログラムの適用処理中におけるソフトウェア資源の追加又は置き換えを検出し、追加された又は置き換えられたソフトウェア資源の識別名を前記記憶部に記録し、
前記実行プログラムを生成する処理は、前記記憶部が記憶する前記識別名に係るソフトウェア資源を含む前記実行プログラムを生成する付記６又は７記載の生成方法。
（付記９）
前記記録する処理は、前記パッチプログラムの適用処理中におけるプログラムの停止を検出し、停止されたプログラムの識別名を前記記憶部に記録し、
前記スクリプトを生成する処理は、前記プログラムの識別名を含む前記スクリプトを生成する付記６乃至８いずれか一項記載の生成方法。
（付記１０）
前記記録する処理は、前記パッチプログラムの適用処理中におけるオペレーティングシステムの再起動の実行を検出し、該再起動が実行されたことを示す情報を前記記憶部に記録し、
前記スクリプトを生成する処理は、前記情報に基づいて、オペレーティングシステムの再起動命令を含む前記スクリプトを生成する付記６乃至９いずれか一項記載の生成方法。
（付記１１）
パッチプログラムの適用処理中に行なわれた操作を検出し、前記操作の履歴情報を記憶部に記録し、
前記履歴情報に示される操作を実行させる命令を含むスクリプトを生成し、
生成した前記スクリプトに基づいて前記パッチプログラムを実行させる実行プログラムを生成する処理をコンピュータに実行させる生成プログラム。
（付記１２）
前記記録する処理は、複数の前記パッチプログラムの適用処理中における前記操作の履歴情報を記憶部に記録する付記１１記載の生成プログラム。
（付記１３）
前記記録する処理は、前記パッチプログラムの適用処理中におけるソフトウェア資源の追加又は置き換えを検出し、追加された又は置き換えられたソフトウェア資源の識別名を前記記憶部に記録し、
前記実行プログラムを生成する処理は、前記記憶部が記憶する前記識別名に係るソフトウェア資源を含む前記実行プログラムを生成する付記１１又は１２記載の生成プログラム。
（付記１４）
前記記録する処理は、前記パッチプログラムの適用処理中におけるプログラムの停止を検出し、停止されたプログラムの識別名を前記記憶部に記録し、
前記スクリプトを生成する処理は、前記プログラムの識別名を含む前記スクリプトを生成する付記１１乃至１３いずれか一項記載の生成プログラム。
（付記１５）
前記記録する処理は、前記パッチプログラムの適用処理中におけるオペレーティングシステムの再起動の実行を検出し、該再起動が実行されたことを示す情報を前記記憶部に記録し、
前記スクリプトを生成する処理は、前記情報に基づいて、オペレーティングシステムの再起動命令を含む前記スクリプトを生成する付記１１乃至１４いずれか一項記載の生成プログラム。
（付記１６）
付記６乃至１０いずれか一項記載のパッチ生成方法によって生成された前記実行プログラム。
【符号の説明】
【０１５４】
１            情報処理システム
１０          パッチ生成装置
１１          ＯＳ
１２          ミドルウェア
１３          パッチ変換部
２０          パッチ適用装置
２１          パッチ適用部
３０          管理装置
１００        ドライブ装置
１０１        記録媒体
１０２        補助記憶装置
１０３        メモリ装置
１０４        ＣＰＵ
１０５        インタフェース装置
１３１        起動部
１３２        記録部
１３３        スクリプト生成部
１３４        パッチ生成部
２１１        受信部
２１２        パッチ展開部
２１３        スクリプト実行部
Ｂ            バス
ＣＰ          共通形式パッチ
ＳＦ          スクリプトファイル
ＲＦ          置換ファイル群
ＡＦ          追加ファイル群
ＤＦ          差分ファイル群
ＳＬ          処理シーケンスログ
ＳＬ１        停止対象サービスリスト
ＳＬ２        操作対象ファイルリスト
ＳＬ３        リソース操作記録リスト
ＳＬ４        操作対象レジストリキーリスト
Ｌ５          レジストリキー退避リスト
【図１】
2013077085.tif 000003
【図２】
2013077085.tif 000004
【図３】
2013077085.tif 000005
【図４】
2013077085.tif 000006
【図５】
2013077085.tif 000007
【図６】
2013077085.tif 000008
【図７】
2013077085.tif 000009
【図８】
2013077085.tif 000010
【図９】
2013077085.tif 000011
【図１０】
2013077085.tif 000012
【図１１】
2013077085.tif 000013
【図１２】
2013077085.tif 000014
【図１３】
2013077085.tif 000015
【図１４】
2013077085.tif 000016
【図１５】
2013077085.tif 000017
【図１６】
2013077085.tif 000018
【図１７】
2013077085.tif 000019
【図１８】
2013077085.tif 000020
【図１９】
2013077085.tif 000021
【図２０】
2013077085.tif 000022
【図２１】
2013077085.tif 000023
【図２２】
2013077085.tif 000024
【図２３】
2013077085.tif 000025
【図２４】
2013077085.tif 000026
【図２５】
2013077085.tif 000027
【図２６】
2013077085.tif 000028
【図２７】
2013077085.tif 000029
【図２８】
2013077085.tif 000030
【図２９】
2013077085.tif 000031
【図３０】
2013077085.tif 000032