オブジェクトであるディレクトリ及びファイル、を含む1以上のマスタファイルシステム、を提供するマスタサーバと、それぞれが、前記マスタサーバにより提供されるマスタファイルシステムの一部又は全部のコピーファイルシステムを取得する、1以上のスレーブサーバと、を含み、前記1以上のスレーブサーバのうちの第1のスレーブサーバは、マスタファイルシステム識別子と当該マスタファイルシステム識別子が示すマスタファイルシステムの一部又は全部のコピーファイルシステムを有するスレーブサーバの識別子とを関連付けるコピー管理情報を備え、前記第1スレーブサーバは、スタブ状態のオブジェクトを含む、前記1以上のマスタファイルシステムにおける第1マスタファイルシステムの一部の第1コピーファイルシステム、を取得し、前記第1スレーブサーバは、前記第1マスタファイルシステムの識別子を使用して、前記コピー管理情報において、前記スタブ状態のオブジェクトの実体化のための情報のキャッシュの問い合わせを行うスレーブサーバを検索し、前記検索結果が、前記1以上のスレーブサーバにおける問い合わせ先のスレーブサーバを示す場合、前記第1スレーブサーバは、前記問い合わせ先のスレーブサーバに対して前記実体化のための情報のキャッシュの問い合わせを行い、前記問い合わせ先のスレーブサーバが前記実体化のための情報を有している場合に、前記第1スレーブサーバは、前記問い合わせ先のスレーブサーバから取得した実体化のための情報を使用して前記スタブ状態のオブジェクトを実体化する、ファイル共有システム。前記コピー管理情報に登録されているいずれのスレーブサーバからも前記実体化のための情報を取得することができない場合、前記第1のスレーブサーバは、前記第1のマスタファイルシステムのマスタサーバから前記実体化のための情報を取得する、請求項1に記載のファイル共有システム。前記コピー管理情報のエントリは、前記マスタファイルシステム識別子と、前記スレーブサーバ識別子と、コピーファイルシステムを識別する識別子とを有し、前記コピー管理情報において、1つのコピーファイルシステムに対して単一エントリが割り当てられている、請求項2に記載のファイル共有システム。前記第1スレーブサーバにおける前記第1コピーファイルシステムは、前記第1マスタファイルシステムの作業コピーであり、前記第1スレーブサーバは、前記作業コピーにおいて更新されたオブジェクトを前記マスタサーバにコピーする、請求項3に記載のファイル共有システム。前記コピー管理情報は、登録されているマスタファイルシステムのバージョンを特定する識別子をさらに有し、前記問い合わせ先スレーブサーバは、前記コピー管理情報において、前記第1マスタファイルシステムのバージョンと同一バーションのマスタファイルシステムに関連付けられている、請求項3に記載のファイル共有システム。前記問い合わせ先スレーブサーバは、問い合わせ対象を更新済みの場合、前記実体化のための情報を有していないことを示す応答を返す、請求項5に記載のファイル共有システム。前記マスタサーバは、マスタコピー管理情報を備え、前記1以上のスレーブサーバのそれぞれは、前記マスタコピー管理情報のコピーであるコピー管理情報を備え、前記1以上のスレーブサーバのそれぞれは、マスタファイルシステムの全部又は一部のコピーファイルシステムを取得すると、前記マスタコピー管理情報にエントリを追加する、請求項6に記載のファイル共有システム。前記第1スレーブサーバは、前記検索の範囲を規定するユーザ設定可能な検索ポリシを備え、前記第1スレーブサーバは、前記検索ポリシが示す検索範囲内で、前記コピー管理情報における前記問い合わせ先スレーブサーバの検索を行う、請求項7に記載のファイル共有システム。前記コピー管理情報は、登録されているスレーブサーバのロケーションを示す情報をさらに有し、前記第1スレーブサーバは、前記ロケーションの情報を参照して、前記問い合わせを行うスレーブサーバを決定する、請求項8に記載のファイル共有システム。前記コピー管理情報は、前記コピーファイルシステム識別子と関連づけられ、当該コピーファイルシステム識別子が示すコピーファイルシステムへのアクセス性能を示す性能情報をさらに有し、前記第1のスレーブサーバは、前記性能情報を参照して、前記問い合わせを行うスレーブサーバを決定する、請求項9に記載のファイル共有システム。前記検索結果が前記問い合わせ先のスレーブサーバとして前記第1のスレーブサーバを示す場合、前記第1のスレーブサーバは自身に前記問い合わせを行う、請求項10に記載のファイル共有システム。オブジェクトであるディレクトリ及びファイルを含む1以上のマスタファイルシステムを提供するマスタサーバと、それぞれが前記マスタサーバにより提供されるマスタファイルシステムの一部又は全部のコピーを取得する1以上のスレーブサーバと、を含む計算機システムにおいて、前記1以上のスレーブサーバの第1スレーブサーバが、前記1以上のマスタファイルシステムにおけるマスタファイルシステムの一部又は全部のコピーファイルシステムを取得する、ファイル共有方法であって、前記第1スレーブサーバが、スタブ状態のオブジェクトを含む、第1マスタファイルシステムの一部の第1コピーファイルシステム、を取得し、前記第1スレーブサーバが、マスタファイルシステムの識別子と当該マスタファイルシステムの識別子が示すマスタファイルシステムの一部又は全部のコピーファイルシステムを有するスレーブサーバの識別子とを関連付けるコピー管理情報を参照し、前記第1スレーブサーバが、前記第1マスタファイルシステムの識別子を使用して、前記コピー管理情報において前記スタブ状態のオブジェクトの実体化のための情報のキャッシュの問い合わせを行うスレーブサーバを検索し、前記第1スレーブサーバが、前記検索結果が前記1以上のスレーブサーバにおける問い合わせ先スレーブサーバを示す場合、前記問い合わせ先スレーブサーバに対して前記実体化のための情報の問い合わせを行い、前記第1スレーブサーバが、前記問い合わせ先スレーブサーバが前記実体化のための情報を取得した場合、当該取得した実体化のための情報を使用して前記スタブ状態のオブジェクトを実体化する、ファイル共有方法。前記第1スレーブサーバが、前記検索の範囲を規定するユーザ設定可能な検索ポリシを参照し、前記第1スレーブサーバが、前記検索ポリシが示す検索範囲内で、前記コピー管理情報における前記問い合わせ先スレーブサーバの検索を行う、請求項12に記載のファイル共有方法。前記コピー管理情報は、登録されているスレーブサーバのロケーションを示す情報をさらに有し、前記第1スレーブサーバが、前記ロケーションの情報を参照して、前記問い合わせを行うスレーブサーバを決定する、請求項12に記載のファイル共有方法。前記第1スレーブサーバが、スタブ状態のオブジェクトの実体化のための情報についての問い合わせ受け、前記第1スレーブサーバが、問い合わせ対象のオブジェクトを更新済みの場合、前記実体化のための情報を有していないことを示す応答を返す、請求項12に記載のファイル共有方法。しかしながら、これまで、バージョン管理システムのようなシステムで使用されているオンデマンドコピー技術と、ネットワーク間を仲介するプロキシサーバ技術とを、同時にシステムに適用することについて、具体的な検討はなされていなかった。また、データセンタのリポジトリはディレクトリとファイルとを含むファイルシステムであり、バージョン管理システムのようなシステムにおいては、ディレクトリ及びファイルを含むデータの分散キャッシュについて具体的な検討を行うことが必要となる。この他、特許文献1で開示されている分散キャッシュ技術には課題がある。特許文献1の分散キャッシュ技術は、プロキシサーバ名とURLとから一意にキャッシュファイルを格納するサーバを決定するため、キャッシュファイルの格納先は必然的に1つのプロキシサーバとなる。したがって、クライアントから問合せを受けたプロキシサーバがそのキャッシュファイルを保持していない確率が高く、多くの場合、他のプロキシサーバにキャッシュファイルの有無を問い合わせる必要がある。そのため、クライアントへの応答が遅延する。本発明はこのような状況を鑑みてなされたものであり、その1つの目的は、マスタデータであるファイルシステムのファイルを共有するための処理において、ネットワーク遅延を低減することである。本発明の一態様のファイル共有システムは、オブジェクトであるディレクトリ及びファイル、を含む1以上のマスタファイルシステム、を提供するマスタサーバと、それぞれが、前記マスタサーバにより提供されるマスタファイルシステムの一部又は全部のコピーファイルシステムを取得する、1以上のスレーブサーバとを含む。前記1以上のスレーブサーバのうちの1つのスレーブサーバは、マスタファイルシステム識別子と当該マスタファイルシステム識別子が示すマスタファイルシステムの一部又は全部のコピーファイルシステムを有するスレーブサーバの識別子とを関連付けるコピー管理情報を備える。前記1つのスレーブサーバは、スタブ状態のオブジェクトを含む、前記1以上のマスタファイルシステムの1つのマスタファイルシステムの一部のコピーファイルシステムを取得する。前記1つのスレーブサーバは、前記1つのマスタファイルシステムの識別子を使用して、前記コピー管理情報において前記スタブ状態のオブジェクトの実体化のための情報の問い合わせを行うスレーブサーバを検索する。前記検索結果が前記1以上のスレーブサーバにおける問い合わせ先スレーブサーバを示す場合、前記1つのスレーブサーバは、前記問い合わせ先スレーブサーバに対して前記実体化のための情報のキャッシュの問い合わせを行う。前記問い合わせ先スレーブサーバが前記実体化のための情報を有している場合に、前記1つのスレーブサーバは、前記問い合わせ先スレーブサーバから取得した実体化のための情報を使用して前記スタブ状態のオブジェクトを実体化する。本発明の一態様によれば、マスタデータであるファイルシステムのファイルを共有するための処理において、ネットワーク遅延を低減することができる。以下において、本発明を実施するための形態を説明する。説明の明確化のため、以下の記載及び図面は、適宜、省略及び簡略化がなされている。又、各図面において、同一要素には同一の符号が付されており、説明の明確化のため、必要に応じて重複説明は省略されている。本実施形態で説明する構成例は、バージョン管理機能を備えるファイル共有システムである。このシステムは、主にソフトウェア開発において使用される。サーバスレーブサーバは、クライアントからの要求に応答して、マスタサーバに格納されているリポジトリファイルシステムの一部のコピー作業コピーを取得する。このコピーファイルシステム作業コピーは、スタブ状態のファイル又はディレクトリを含む。スタブ状態のファイル又はディレクトリは、メタ情報を有するが、その実体情報を有していない。サーバは、スタブ状態のファイル又はディレクトリを実体化するため、必要な情報のキャッシュの有無を、自身又は他のサーバに問い合わせする。サーバは、実体化のための問い合わせにおいて、作業コピー管理テーブルを参照する。作業コピー管理テーブルは、マスタサーバのリポジトリからチェックアウトしたコピーファイルシステムである作業コピー、を管理する。作業コピー管理テーブルは、サーバ間で共有される。サーバは、作業コピー管理テーブルにおいて、スタブ状態のファイル又はディレクトリの実体化のため、キャッシュされたファイル又はディレクトリの有無の問合せを行うサーバを検索する。この構成により、リポジトリのファイル及びディレクトリのキャッシュデータを複数のサーバが保持し、サーバ間でそのキャッシュデータを共有することができると共に、キャッシュデータのためのサーバ間の問合せ回数を削減することができる。作業コピー管理テーブルにおいて、1つの作業コピーに1つエントリのみが割り当てられている。このように、作業コピー単位でキャッシュデータを管理することで、作業管理テーブルのサイズを小さくすると共に、作業管理テーブルを管理、共有同期するための処理及びデータ転送量を低減する。以下においては、バージョン管理機能によりファイルサービスを提供するマスタサーバから、作業コピーをチェックアウトして、作業コピーにおけるファイルを読み書きする例を中心に、本実施形態を説明する。ただし、本実施形態は本発明を実現するための一例に過ぎず、本発明の技術的範囲を限定するものではない。図1は、本実施形態のファイル共有システムの概略構成を示すブロック図である。ファイル共有システムは、端末100A、100Bと、ネットワーク110を介して端末100A、100Bと接続されたサーバ200A、200Bと、ネットワーク120を介してサーバ200A、200Bと接続されたマスタサーバ300と、を備えている。図1が示す端末の数、サーバの数及びマスタサーバの数は一例であって、それぞれの数はシステムに設計により適切な値に設定される。例えば、システムは複数のマスタサーバを含むことができる。端末100A、100Bは同様の構成を備え、以下において、端末100は端末100A、100Bの任意の一つを意味する。サーバ200A、200Bは同様の構成を備え、以下において、サーバ200はサーバ200A、200Bの任意の一つを意味する。端末100は、サーバ200にログインして、マスタサーバ300とサーバ200によって提供されるバージョン管理サービスを利用するユーザ開発者が使用する計算機である。サーバ200は、マスタサーバ300と連携し、ユーザに対してバージョン管理サービスを提供する計算機である。マスタサーバ300は、サーバ200がユーザに対してバージョン管理サービスを提供する上で必要な、ファイル共有サービスとチェックインサービスとチェックアウトサービスとを提供する計算機である。ネットワーク110は、端末100とサーバ200とを、相互に接続するネットワークである。ネットワーク110は、例えばLocalAreaNetworkLANである。ネットワーク120は、サーバ200とマスタサーバ300とを相互に接続するネットワークである。ネットワーク120は、例えば、WideAreaNetworkWANやインターネットである。図2は、サーバ200の概略構成を示すブロック図である。図2に示されるように、サーバ200は、プログラムやデータを格納する一次記憶装置であるメモリ220と、メモリ220に格納されたプログラムを実行するプロセッサであるCPU210とを備える。プロセッサは、1又は複数のコアを備え、複数のパッケージで構成されていてもよい。この点は、他の計算機において同様である。サーバ200は、さらに、端末100及び他のサーバ200との通信に使用されるネットワークインタフェース230と、マスタサーバ300との通信に使用されるネットワークインタフェース240と、不揮発性記憶媒体を備える二次記憶装置であるディスクドライブ260と、ディスクドライブ260への入出力を制御するディスクコントローラ250と、を備え、それらを内部通信路例えば、バスによって接続している計算機である。サーバ200が使用するディスクドライブは、ディスクドライブ260のようにサーバ200直接接続してもよいし、サーバ200は、StorageAreaNetworkSANに接続されたディスクアレイ装置上のディスクドライブに、ディスクインタフェースを介して接続してもよい。サーバ200のメモリ220には、プログラム及びデータが格納される。それらは、例えば、アプリケーションプログラム285、バージョン管理クライアントプログラム600、バージョン管理インタフェースプログラム290、ファイルシステムプログラム500などである。典型的には、プログラムはディスクドライブ260からメモリ220にロードされ、ディスクドライブ260とメモリ220のセットも一つの記憶装置を構成する。これらの点は、他の計算機において同様である。アプリケーションプログラム285は、例えば、サーバ200にログインしているユーザがファイルを読み書きするために使用するエディタである。バージョン管理クライアントプログラム600は、サーバ200にログインしているユーザがマスタサーバ300から作業コピーをチェックアウトしチェックインするためのプログラムである。バージョン管理インタフェースプログラム290は、ユーザが作業コピーをチェックアウトしチェックインするインタフェース、を提供するためのプログラムである。バージョン管理インタフェースプログラム290は、マスタサーバ300のリポジトリ380の管理権限を有するユーザが、現在チェックアウトされている作業コピーの一覧を参照し、あるファイルのキャッシュデータを検索する際に、作業コピーを検索するポリシを設定するためのインタフェースも提供する。ファイルシステムプログラム500は、ディスクドライブ260に格納されているファイルシステム270を管理するためのプログラムである。ディスクコントローラ250は、メモリ220に格納された各種プログラムの入出力要求に基づいて、ディスクドライブ260のデータを例えばブロック単位で入出力する。ディスクドライブ260は、上記プログラムの他、メモリ220に格納された各種プログラムが読み書きするデータを格納する。ディスクドライブ260には、作業コピー280が格納される。作業コピー280は、ディスクドライブ260からメモリ220にロードされ処理される。上記各プログラムはプロセッサによって実行されることで、定められた処理をメモリ220及びポートを用いながら行う。以下においてプログラムを主語とする説明は、プロセッサを主語とした説明でもよい。また、プログラムが実行する処理は、そのプログラムが動作する計算機及び計算機システムが行う処理である。この点は、他の計算機におけるプログラム実行についても同様である。図3は、マスタサーバ300の概略構成を示すブロック図である。図3に示すように、マスタサーバ300は、プログラムやデータを格納するメモリ320と、メモリ320に格納されたプログラムを実行するプロセッサであるCPU310と、サーバ200との通信に使用するネットワークインタフェース330と、ディスクドライブ360と、ディスクドライブ360への入出力を制御するディスクコントローラ350と、を備え、それらを内部的な通信路例えば、バスによって接続している計算機である。マスタサーバ300のメモリ320には、プログラム及びデータが格納される。それらは、例えば、バージョン管理サーバプログラム700及びファイルシステムプログラム390である。バージョン管理サーバプログラム700は、サーバ200に対してファイル共有サービスとチェックインサービスとチェックアウトサービスとを提供するプログラムである。ファイルシステムプログラム390は、ディスクドライブ360に格納されているファイルシステム370を管理するためのプログラムである。ディスクコントローラ350は、メモリ320に格納された各種プログラムの入出力要求に基づいて、ディスクドライブ360のデータを例えばブロック単位で入出力する。ディスクドライブ360は、メモリ320に格納された各種プログラムが読み書きするデータを格納する。ディスクドライブ360には、リポジトリ380が格納される。なお、マスタサーバ300が使用するディスクドライブは、ディスクドライブ360のようにマスタサーバ300に直接接続してもよいし、マスタサーバ300は、SANに接続されたディスクアレイ装置上のディスクドライブに、ディスクインタフェースを介して接続してもよい。端末100は、計算機としての基本構成を備え、入出力装置、メモリ、メモリ上のプログラムに従って動作するプロセッサを備える。入力装置は、典型的には、マウス及びキーボードであり、出力装置はディスプレイである。端末100は、不揮発性の二次記憶装置を備えていてもて備えていなくともよい。典型的な二次記憶装置は、磁気ディスクドライブである。ユーザは、端末100によりサーバ200にログインし、端末100から、サーバ上のプログラム285により作業コピー280を処理する。本構成において、ユーザは、クライアント端末100を使用して、サーバ200にアクセスする。これと異なり、サーバ200が端末100のように入力装置及び表示装置を備え、ユーザは、それらを使用してサーバ200を操作してもよい。図4は、本実施形態において、スタブ状態のファイルファイルのスタブの実体化におけるデータの流れを模式的に示す図である。本システムは、ディレクトリのスタブ及びファイルのスタブを利用する。本明細書において、ディレクトリとファイルの双方を包含する言葉としてオブジェクトを使用する。スタブは、オブジェクトの位置情報参照情報及びメタ情報属性情報を備えるが、その実体情報は備えていない。例えば、ディレクトリのスタブは、位置情報ポインタの他、属性情報メタ情報として、ディレクトリ名、ディレクトリサイズ、タイムスタンプ及びアクセス権限などの情報を備える。ファイルのスタブは、位置情報ポインタの他、属性情報メタ情報として、ファイル名、ファイルサイズ及びアクセス権限などの情報を含む。スタブの具体的構成は、図11を参照して後述する。サーバ200Aは、作業コピー280A及び作業コピー管理テーブル400Aを備えている。作業コピー280Aは、ディレクトリ及びそのディレクトリにおける2つのファイル410A、420Aを含む。同様に、サーバ200Bは、作業コピー280B及び作業コピー管理テーブル400Bを備えている。作業コピー280Bは、ディレクトリ及びそのディレクトリにおける2つのファイル410B、420Bを含む。サーバ200A及び200Bは、作業コピーを備えるスレーブサーバである。作業コピー管理テーブル400A、400Bは、マスタサーバ300における作業コピー管理テーブル400Cと同じ情報を格納している。作業コピー管理テーブルの詳細は後述する。サーバ200Aの作業コピー280Aは、マスタサーバ300のリポジトリ380からチェックアウトされている。そして、作業コピー280Aのディレクトリ、ファイル410A、そしてファイル420Aは、既にスタブから実体化済みであり、かつ、ファイル420Aには変更が加えられている。ファイル410Aには変更が加えられていない。サーバ200Bの作業コピー280Bも同様に、マスタサーバ300のリポジトリ380からチェックアウトされている。ただし、ディレクトリは実体化されているが、作業コピー280Bのファイル410Bとファイル420Bは、いずれもスタブ状態のファイルである。例えば、このスタブ状態のファイル410B又はファイル420Bを、サーバ200Bにログインしているユーザがエディタなどのアプリケーションプログラム285で読み出すと、サーバ200Bは、作業コピー管理テーブル400Bを参照し、サーバ200Aが同じリポジトリ380からチェックアウトした作業コピー280Aを保持していることを認識して、サーバ200Aにキャッシュがあるかどうかを確認する。サーバ200Aのファイル410Aは、既にスタブから実体化済みであり、かつ変更が加えられていないため、キャッシュファイルとして利用可能である。そのため、サーバ200Bは、サーバ200Aからファイル410Aをコピーする。一方、サーバ200Aのファイル420Aは、実体化済みであるものの、変更が加えられているため、キャッシュファイルとしては利用できない。そのため、サーバ200Bは、マスタサーバ300からファイル420Cをコピーする。以下において、本ファイル共有システムにおいて動作するプログラムを、図5から図7を参照して説明する。図5は、サーバ200におけるファイルシステムプログラム500の機能構成を示すブロック図である。図5に示すように、ファイルシステムプログラム500は、OPEN処理モジュール510と、READ処理モジュール520と、WRITE処理モジュール530とを備える。端末100を操作してサーバ200にログインしているユーザが、例えばエディタなどのアプリケーションプログラム285で、ファイルシステム270に格納されているディレクトリ又はファイルを開いた場合に、アプリケーションプログラム285は、ファイルシステムプログラム500にOPEN要求を発行する。OPEN処理モジュール510は、OPEN要求を契機として、サーバ200のCPU210によって実行される。OPEN処理モジュール510は、ディレクトリ又はファイルのパス名を与えると、当該ディレクトリを読み出す又は当該ファイルを読み書きする準備を行い、OPEN要求を発行したアプリケーションプログラム285に対して、OPEN済みのディレクトリ又はファイルを識別するためのディスクリプタを返す。また、OPEN処理モジュール510は、OPEN対象のファイルシステム270内のディレクトリがスタブ状態だった場合に、そのスタブの実体化処理を行う。スタブ実体化処理は、スタブの位置情報が示す位置からファイル又はディレクトリの実体情報ファイルの内容又はディレクトリの構成情報を取得して、スタブスタブ状態のファイル又はディレクトリに書き込み、実体化されたフィル又はディレクトリを生成する。スタブ実体化処理の詳細は、図17を参照して後述する。ユーザがアプリケーションプログラム285で、ファイルシステム270に格納されているファイルを読み出した場合に、アプリケーションプログラム285はファイルシステムプログラム500にREAD要求を発行する。READ処理モジュール520は、このREAD要求を契機として、サーバ200のCPU210によって実行される。READ処理モジュール520は、OPEN処理モジュール510を実行した結果得られたディスクリプタを使用して、ディレクトリ又はファイルにアクセスし、データを読み出して、READ要求を発行したアプリケーションプログラム285に対してデータを応答する。また、READ対象のファイルシステム270内のファイルがスタブ状態だった場合に、そのスタブ実体化処理を行う。ユーザが、アプリケーションプログラム285で、ファイルシステム270に格納されているファイルに書き込みを行う場合に、アプリケーションプログラム285はファイルシステムプログラム500にWRITE要求を発行する。WRITE処理モジュール530は、このWRITE要求を契機として、サーバ200のCPU210によって実行される。WRITE処理モジュール530は、OPEN処理モジュール510を実行した結果得られたディスクリプタを使用して、ファイルにアクセスしてデータを書き込んで、WRITE要求を発行したアプリケーションプログラム285に対して結果を応答する。また、WRITE対象のファイルがスタブ状態だった場合に、ファイルシステム270内のそのスタブの実体化処理を行う。図6は、サーバ200におけるバージョン管理クライアントプログラム600の機能構成を示すブロック図である。図6に示すように、バージョン管理クライアントプログラム600は、スタブ実体化モジュール610と、チェックアウトモジュール620と、チェックインモジュール630と、作業コピー管理モジュール640と、ファイル共有サービスモジュール650と、作業コピー管理テーブル900と、作業コピー検索ポリシ680と、マスタサーバ情報690とを備える。スタブ実体化モジュール610は、自身のサーバ200又は他のサーバ200のファイルシステムプログラム500からの要求を受けて、サーバ200のCPU210によって実行される。スタブ実体化モジュール610は、作業コピー検索ポリシ680に基づいて、作業コピー管理テーブル900を検索し、適合するエントリがあった場合に、自身のサーバ200又は、他のサーバ200にキャッシュオブジェクトの有無を問い合わせる。利用可能な実体化済みのファイル又はディレクトリがキャッシュされている場合には、スタブ実体化モジュール610は、サーバ200から実体化済みのファイル又はディレクトリを取得する。キャッシュされた実体化済みのファイル又はディレクトリが存在しない場合には、スタブ実体化モジュール610は、マスタサーバ300からファイル又はディレクトリの実体情報を取得して、スタブ状態のファイルやディレクトリを実体化する。チェックアウトモジュール620は、ユーザがバージョン管理インタフェースプログラム290を介して送信するチェックアウト要求を契機として、サーバ200のCPU210によって実行される。チェックアウトモジュール620は、どのリポジトリのどのバージョンを作業コピーとしてチェックアウトするかを示すチェックアウト要求を、マスタサーバ300に送信する。チェックアウトモジュール620は、さらに、リポジトリ内の、特定のディレクトリを指定してもよい。リポジトリとバージョンを指定したチェックアウト要求に対して、チェックアウトモジュール620は、マスタサーバ300から、リポジトリ380のルートディレクトリの構成情報を取得し、この構成情報に基づいて、作業コピー280のルートディレクトリにスタブ状態のファイル及びディレクトリを作成する。本例においては、チェックアウトにより、作業コピーのトップディレクトリ本例でリポジトリのルートディレクトリが実体化されているが、チェックアウトは、トップディレクトリのスタブのみを作成し、その後のユーザ操作に応じて、ファイルシステムプログラム500が、そのスタブ状態のディレクトリを実体化してもよい。チェックアウトモジュール620は、作業コピーのチェックアウトに付随して、マスタサーバ300の作業コピー管理テーブル770図7を参照に新たなエントリを追加する。さらに、その作業コピー管理テーブル770を取得し、サーバ200の作業コピー管理テーブル900を更新する。チェックインモジュール630は、ユーザがバージョン管理インタフェースプログラム290を介して送信するチェックイン要求を契機として、サーバ200のCPU210によって実行される。チェックインモジュール630は、作業コピー280の中で更新されたファイルやディレクトリのリストを作成する。そして、そのリストをチェックイン要求としてマスタサーバ300に送信し、他のユーザによって同じファイルが更新されていないかを確認する。このような競合が発生した場合、チェックインモジュール630は、バージョン管理インタフェースプログラム290を介して警告を端末100に表示し、待機する。警告を受けたユーザが、ファイルをマージしたり、リポジトリに残すファイルを選択したりするなどして、手作業で競合を解消したら、チェックインモジュール630は、更新のあったファイルおよびディレクトリをマスタサーバ300にコピーする。作業コピー管理モジュール640は、チェックアウトモジュール620からの要求を契機として、サーバ200のCPU210によって実行される。また、それ以外にも、定期的にサーバ200のCPU210によって実行される。作業コピー管理モジュール640は、予め設定されている事象例えば所定の時間経過に応答して、マスタサーバ300に作業コピー管理テーブル同期要求を発行し、マスタサーバ300の作業コピー管理テーブル770と、サーバ200の作業コピー管理テーブル900とを同期する。つまり、作業コピー管理モジュール640は、作業コピー管理テーブル900を更新して、マスタサーバ300の作業コピー管理テーブル770と一致させる。また、各作業コピーの性能情報を取得し、作業コピー管理テーブル900に記録する。作業コピーの性能情報は、その作業コピーへのアクセス性能を示す。性能情報については、図9を参照して後に詳述する。ファイル共有サービスモジュール650は、スタブ実体化モジュール610からの、キャッシュオブジェクトキャッシュされているファイル又はディレクトリ有無確認要求又はオブジェクト取得要求を契機として、サーバ200のCPU210によって実行される。スタブ実体化モジュール610は、作業コピー検索ポリシ680に従って、実体化のための情報の問い合わせを行う。作業コピー検索ポリシ680については、後述する。ファイル共有サービスモジュール650は、自身のサーバ200におけるスタブ実体化モジュール610からキャッシュオブジェクト有無確認要求およびオブジェクト取得要求を受ける他、ネットワークインタフェース230を介して、他のサーバ200におけるスタブ実体化モジュール610からも受ける。キャッシュオブジェクト有無確認要求を受けた場合、ファイル共有サービスモジュール650は、確認対象のオブジェクトファイル又はディレクトリが実体化済みのオブジェクトであり、かつ、更新されていないならば、ファイル共有サービスモジュール650は、キャッシュオブジェクト有を応答する。確認対象のオブジェクトがスタブ状態のオブジェクトか、更新されているならば、ファイル共有サービスモジュール650は、キャッシュオブジェクト無を応答する。オブジェクト取得要求を受けた場合、ファイル共有サービスモジュール650は、キャッシュされているオブジェクトを応答する。作業コピー管理テーブル900は、サーバ200にチェックアウトされた作業コピー280を管理するためのテーブルである。作業コピー検索ポリシ680は、スタブ実体化モジュール610が作業コピー管理テーブル900を検索する際のポリシを規定する。ユーザ開発者又は管理者は、作業コピー検索ポリシ680を設定することで、キャッシュオブジェクトの検索範囲を設定することができる。本構成においては、ユーザは、検索範囲を規定する要素として、作業コピー280のバージョン及びサーバ200を変更することができる。例えば、バージョンについての検索範囲の設定が、作業コピーのバージョンに関係なく、同一リポジトリの全てのバージョンの作業コピーを検索範囲に含めると、キャッシュオブジェクトの検索範囲は広がる。しかし、検索範囲が異なるバージョンの作業コピーを含むため、キャッシュオブジェクトとして利用できないデータが増加する。そのため、検索ターゲットを取得するまでの問い合わせが増加し、検索処理効率の低下及びネットワーク遅延を招く。サーバについての検索範囲の設定が、全てのサーバを検索範囲に含めれば、キャッシュヒット率は高めることができるが、マスタサーバ300と同程度にネットワーク的に遠い場所にあるサーバ200にキャッシュオブジェクトの有無を問い合わせることが必要となり、検索処理効率の低下およびネットワークの遅延の可能性が高まる。また、本構成において、作業コピー検索ポリシ680は、キャッシュオブジェクトの有無を問い合わせる件数の上限値を規定する情報も保持する。例えば、この規定された件数が2の場合、スタブ実体化モジュール610は、2つのサーバ200に対してキャッシュオブジェクト有無を問い合わせる。この数字を大きくすれば、キャッシュヒット率は向上するが、ネットワークトラフィックは増大する。作業コピー検索ポリシ680の他の条件に合致するエントリ数が、この数字よりも大きかった場合には、スタブ実体化モジュール610は、性能情報970を使用して、最も性能が高いエントリを選択する。これにより、最も短い時間高速に必要な情報を取得できる。性能情報970については、図9を参照して後述する。作業コピー検索ポリシ680において設定可能な条件として、設計により適切な条件が選択される。好ましい構成において、上記全ての条件が設定可能であるが、それらの一部又はそれらと異なる条件が設定可能であってもよい。ユーザ開発者又は管理者は、作業コピー検索ポリシ680を、バージョン管理インタフェースプログラム290が提供する作業コピー検索ポリシ設定画面を用いて設定することができる。ユーザによる作業コピー検索ポリシ設定画面を使用した検索ポリシの設定については、図13を参照して後述する。バージョン管理クライアントプログラム600に含まれるマスタサーバ情報690は、サーバ200がマスタサーバ300と通信するために必要なホスト名などの情報を含む。図7は、マスタサーバ300におけるバージョン管理サーバプログラム700の機能構成を示すブロック図である。図7に示すように、バージョン管理サーバプログラム700は、ファイル共有サービスモジュール710と、チェックアウトサービスモジュール720と、チェックインサービスモジュール730と、作業コピー管理モジュール740と、バージョン管理モジュール750と、バージョン管理テーブル800と、作業コピー管理テーブル770とを備える。ファイル共有サービスモジュール710は、サーバ200のスタブ実体化モジュール610からのオブジェクト取得要求を契機として、マスタサーバ300のCPU310によって実行される。オブジェクト取得要求を受けた場合、ファイル共有サービスモジュール710はオブジェクトを、スタブ実体化モジュール610に応答する。チェックアウトサービスモジュール720は、サーバ200のチェックアウトモジュール620からのチェックアウト要求を契機として、マスタサーバ300のCPU310によって実行される。チェックアウトサービスモジュール720は、要求に含まれるサイトID、サーバID、リポジトリID、バージョンID、作業コピーIDと、現在の日時を組としてエントリを作成し、そのエントリを作業コピー管理テーブル770に追加する。そして、チェックアウトサービスモジュール720は、要求されたリポジトリのルートディレクトリ構成情報を応答する。チェックインサービスモジュール730は、サーバ200のチェックインモジュール630からのチェックイン要求を契機として、マスタサーバ300のCPU310によって実行される。チェックインサービスモジュール730は、要求に含まれる更新対象のオブジェクトのリストに基づき、競合がないかを確認する。競合の確認は、作業コピー管理テーブル770を参照し、当該作業コピーがチェックアウトされた時刻以降に、当該オブジェクトが更新されているかどうか調べる。チェックインサービスモジュール730は、競合していたオブジェクトをリスト化して応答する。作業コピー管理モジュール740は、サーバ200の作業コピー管理モジュール640又はチェックアウトモジュール620から送信される作業コピー管理テーブル同期要求を契機に、マスタサーバ300のCPU310によって実行される。作業コピー管理モジュール740は、マスタサーバ300の作業コピー管理テーブル770と、サーバ200の作業コピー管理テーブル900とを同期する。作業コピー管理テーブル770、900は、サーバ200にチェックアウトされた作業コピー280を管理するためのテーブルである。作業コピー管理モジュール740は、作業コピー管理テーブルの同期において、サーバ300の作業コピー管理テーブル770を、要求元のサーバ200に送信する。バージョン管理モジュール750は、バージョン管理インタフェースプログラム290からのバージョン作成要求を契機として、マスタサーバ300のCPU310によって実行される。バージョン管理モジュール750は、バージョン作成要求受信時点のリポジトリの状態を固定したスナップショットイメージをバージョンとして作成する。また、リポジトリIDとバージョンIDと現在時刻を含むエントリを作成し、バージョン管理テーブル800に追加する。バージョン管理テーブル800は、マスタサーバ300にあるリポジトリとそのバージョンを管理するためのテーブルである。以下において、図8から図10を参照して、本ファイルシステムが使用する情報について説明する。図8は、バージョン管理テーブル800の構成例を示す図である。バージョン管理テーブル800は、リポジトリID810、バージョンID820、そして作成日時830のカラムを有している。これらのフィールドが、1つのエントリレコードを構成する。リポジトリID810はリポジトリの識別子であり、バージョンID820はリポジトリのバージョンを識別するための情報であり、作成日時830はそのバージョンが作成された日時を示す。識別子として、名前又は数字など、対象を識別するためのどのようなデータを使用してもよい。この点は、他の識別子についても同様である。バージョン管理テーブル800は、例えば、バージョン管理インタフェースプログラム290を通じて、端末100に表示される。ユーザは、バージョン管理テーブル800からチェックアウトしたいバージョンを選択し、バージョン管理インタフェースプログラム290を通じて、それをチェックアウトする。図9は、作業コピー管理テーブル900の構成例を示す図である。作業コピー管理テーブル900は、サイトID910、サーバID920、リポジトリID930、バージョンID940、作業コピーID950、チェックアウト日時960、そして性能情報970のカラムを有している。これらのフィールドが、1つのエントリレコードを構成する。サイトID910は、作業コピー280をチェックアウトしたサイトを識別するための情報であり、サーバ200のロケーションを示す識別子である。サーバ200のロケーションをどの範囲で特定するかは、設計に依存する。サーバID920は、作業コピー280をチェックアウトしたサーバを識別するための情報である。リポジトリID930は、作業コピー280のチェックアウト元であるリポジトリを識別するための情報である。バージョンID940は、作業コピー280のチェックアウト元であるリポジトリのバージョンを識別するための情報である。作業コピーID950は、チェックアウトした作業コピー280を識別するための情報である。チェックアウト日時960は、作業コピー280をチェックアウトした日時を示す。性能情報970は、チェックアウトした作業コピー290へのアクセス性能を示す情報である。各IDはそれぞれが一意な識別子であれば何でもよいが、例えば、サイトIDには国名、サーバIDにはホスト名やIPアドレスが使用される。また、リポジトリIDやバージョンIDとしては、リポジトリやバージョンを作成する際に、ユーザが指定したリポジトリ名やバージョン名が使用される。さらに、作業コピーIDとしては、チェックアウト先のパスが使用される。性能情報970として、例えば、サーバ200に対してpingコマンドを実行して得られるネットワーク応答時間が使用される。これは、同一のサーバ200に格納されている作業コピーに共通である。性能情報970は、さらに、作業コピー290単位の詳細な情報として、作業コピー290が格納されているディスクドライブ260の性能や、負荷状況を含めてもよい。これらにより表されるアクセス性能は、同一のサーバ200の作業コピーに対して、異なる値を示し得る。サーバ200は、作業コピー290単位の性能情報970に基づいて、最も高速にキャッシュを取得できる作業コピー290を選択することができる。上述のように、作業コピー管理テーブル900は、各作業コピーに対して1つのエントリを与える。作業コピー管理テーブル900において、エントリは異なる作業コピーIDを有し、作業コピーIDによりエントリが一意に特定される。作業コピー管理テーブル900のエントリは、リポジトリID及びバージョンIDを有しているが、リポジトリ内のディレクトリ及びファイルについての情報は有していない。なお、作業コピー管理テーブル900において、サーバIDと作業コピーIDとの組によりエントリを一意に特定してもよい。この場合、作業コピーIDは、同一のサーバ200において一意であればよい。作業コピー管理テーブルが作業コピー単位でキャッシュ情報を管理することで、サーバ200、300間で作業コピー管理テーブルを同期するための情報は、チェックアウトした作業コピーの数に比例する。このため、キャッシュ対象のファイル数が増大しても、サーバ200間で同期する情報を低減し、そのためのネットワークトラフィックを抑えることができる。次に、図10を参照してディレクトリ構成情報1000を説明する。図10は、ディレクトリ構成情報1000の構成例を示す図である。ディレクトリ構成情報1000は、あるディレクトリ以下に存在するファイル及びディレクトリに関する情報を所定の形式でまとめたものである。ディレクトリ構成情報1000は、チェックアウトモジュール620がマスタサーバ300から取得するルートディレクトリ構成情報のフォーマットとして使用される他、スタブ実体化モジュール610が、サーバ200又はマスタサーバ300からディレクトリを取得する際のフォーマットとして使用される。ディレクトリ構成情報1000は、オブジェクトを識別するためのオブジェクトID1010と、オブジェクト名1020と、オブジェクト種別1030のカラムを有している。これらのフィールドが、1つのエントリレコードを構成する。オブジェクト種別1030は、例えばファイル又はディレクトリである。図8から図10を参照して本システムが使用する情報の一部の例を具体的に説明したが、本実施形態において、データ記憶装置例えばメモリ220、320、ディスクドライブ260、360に格納されており、各プログラムが使用する情報例えば、バージョン管理テーブル800、作業コピー管理テーブル900、ディレクトリ構成情報1000、作業コピー検索ポリシ680等は、どのようなデータ構造を有していてもよい。例えば、データベース、テーブル、リスト又はキューなどから、情報の格納に適したデータ構造が選択される。図11は、ファイル1100の構成例を示す図である。図11に示すように、ファイル1100は、データ領域1110と、属性領域1120と、拡張属性領域1130とを有する。データ領域1110は実データ、属性領域1120と拡張属性領域1130の情報データは合わせてメタ情報メタデータとも呼ぶ。ディレクトリも、図11に示す構成と同様の構成を有している。データ領域1110には、ファイルやディレクトリのデータ本体が格納される。なお、ファイルのデータ本体とは、ユーザがアプリケーションプログラム285を通じて読み書きする任意のデータである。また、ディレクトリのデータ本体とは、例えば、ディレクトリ構成情報1000である。スタブは、メタ情報領域1120と1130の情報と参照情報不図示のみを有し、データ領域1110に格納されるデータ本体を有していない。属性領域1120は、アクセス権限情報1121、更新日時1122などファイルシステムプログラム500が使用する属性情報を有する。図示していないが、これ以外の情報をもってもよい。拡張属性領域1130は、ハッシュ値1132と、スタブフラグ1133と、更新フラグ1134とを有する。ハッシュ値1132は、当該ファイルからハッシュ関数を用いて算出されるハッシュ値であり、ファイル共有サービスモジュール650がキャッシュオブジェクト有無確認要求を処理する際に、ファイル又はディレクトリが一致しているかどうかを簡単に判断するために使用する。ハッシュ値1132は、WRITE処理モジュール530が更新する。スタブフラグ1133は、OPEN処理モジュール510、READ処理モジュール520及びWRITE処理モジュール530が、オブジェクトファイル又はディレクトリがスタブ状態か実体化済み状態かを判定するために使用する。スタブフラグ1133がONであれば当該オブジェクトはスタブ状態であり、OFFであれば、当該オブジェクトは実体化済み状態である。更新フラグ1134は、ファイル共有サービスモジュール650がキャッシュオブジェクト有無確認要求を処理する際に、当該オブジェクトの更新有無を判定するために使用する。更新フラグ1134は、ファイルを更新する際、WRITE処理モジュール530が、OFFからONに変更する。図12は、マスタサーバ300のリポジトリ380の管理権限をもつユーザが、チェックアウトされた作業コピーを確認したり、作業コピー検索ポリシ680を設定する対象の作業コピーを選択したりするため、バージョン管理インタフェースプログラム290が端末100に表示する作業コピー一覧画面1200の一例を示す図である。作業コピー一覧画面1200は、作業コピーを排他的に選択するためのラジオボタン1210と、作業コピー検索ポリシ680を設定する画面である作業コピー検索ポリシ設定画面1300に遷移するためのボタン1220とを備える。図13は、マスタサーバ300のリポジトリ380の管理権限をもつユーザが、作業コピー検索ポリシ680を設定するため、バージョン管理インタフェースプログラム290が端末100に表示する作業コピー検索ポリシ設定画面1300の一例を示す図である。作業コピー検索ポリシ設定画面1300は、スタブ実体化モジュール610による作業コピー管理テーブルの検索における検索範囲のバージョンを排他的に選択するためのラジオボタン1310と、検索範囲のサーバを排他的に選択するためのラジオボタン1320と、検索範囲の件数検索を行うサーバの数を選択するためのプルダウンリスト1330とを備える。以下では、本実施形態におけるシステムサーバ200が、ファイルサービスを提供するマスタサーバ300から作業コピーをチェックアウトして、ファイルを読み書きし、チェックインする処理について、図14から図19を用いて説明する。最初に、処理の概略を説明する。サーバ200は、ユーザ指定に従って、指定リポジトリの指定スナップショットバージョンのチェックアウトを行う。サーバ200は、作業コピー管理テーブル770に、サイトID、サーバID、リポジトリID、スナップショットID、作業コピーIDを含むエントリを追加し、作業コピー管理テーブル770により自身の作業コピー管理テーブル900を更新する。その後、サーバ200は、作業コピーのルートディレクトリに、スタブを作成する。その後、READ要求が来た際に、サーバ200は、対象ファイルが自サーバの作業コピーに実体化済みファイルとして存在する場合、そのままREAD処理を行う。対象ファイルが自サーバの作業コピーにスタブファイルとして存在する場合、サーバ200は、作業コピー管理テーブル900を参照し、例えば、同一リポジトリからチェックアウトした作業コピーを有する他のサーバに当該ファイルのキャッシュがあるかを検索する。サーバ200は、作業コピー管理テーブル900により、どの拠点どのサーバ200が、どのリポジトリのどのスナップショットバージョンの作業コピーチェックアウトしたファイル及びディレクトリの集合を保持しているかを管理する。サーバ200は、作業コピー管理テーブル900情報に基づいて、キャッシュ有無を問い合わせる先を決定する。キャッシュが存在する場合、サーバ200は、それを使用してオンデマンドコピーを行う。キャッシュが存在しない場合、サーバ200は、マスタサーバ300のスナップショットからオンデマンドコピーを行う。問い合わせ先のサーバ200は、キャッシュが存在するかどうか確認する際には、当該ファイルが更新されているかどうかを確認する。WRITE要求に対するWRITE処理は、キャッシュを検索してオンデマンドコピーを行う点は、READ処理と同様である。READ処理と異なりファイルが更新されるため、サーバ200は、更新フラグやハッシュ値を更新する。チェックイン処理において、サーバ200は、変更があったファイルのみをリストアップし、マスタサーバ300へコピーする。サーバ200は、変更のあったファイルリストをマスタサーバ300へ送る。マスタサーバ300は、他の作業コピーから送られた変更ファイルリストと比較し、競合した場合には警告を表示し、ユーザが手動でマージする。以下において、各プログラムの具体的な処理を、図14から図19のフローチャートを参照して説明する。図14は、OPEN処理モジュール510がCPU210と恊働して実行するOPEN処理の詳細を説明するためのフローチャートの一例である。OPEN処理モジュール510は、ファイルシステムプログラム500がアプリケーションプログラム285から、OPEN処理要求を受信したときに実行する。OPEN処理要求は、例えば、UNIX系のオペレーティングシステムにおける、OPENシステムコールである。OPEN処理要求は、開こうとしているオブジェクトのパスを含む。まず、OPEN処理モジュール510は、処理対象のパスがまだ存在するかを調べるS1410。解析対象のパスがまだ存在する場合S1410がYESの場合、パスから先頭のオブジェクト名を切り出すS1420。例えば、/MNT/FS00/DIR/FILEというパスのオブジェクトが処理対象の場合、先頭から順にオブジェクト名は、/ルートディレクトリ、MNT/、FS00/、DIR/、FILEであり、切り出されるオブジェクト名は、/ルートディレクトリであり、残るパスは、MNT/FS00/DIR/FILEである。そして、OPEN処理モジュール510は、S1420で切り出したオブジェクトが、ディレクトリであるかどうかを確認するS1430。オブジェクトがディレクトリである場合S1430がYESの場合、OPEN処理モジュール510は、さらに、当該オブジェクトがスタブ状態かどうかを確認するS1440。OPEN処理モジュール510は、スタブ状態かどうかを確認するために、ファイル1100の拡張属性領域1130にあるスタブフラグ1133を調べる。オブジェクトがスタブ状態である場合S1440がYESの場合、OPEN処理モジュール510は、当該オブジェクトのパスを指定してスタブ実体化処理を行いS1450、スタブ状態のオブジェクトを実体化する。スタブ実体化処理の詳細については後述する。オブジェクトがスタブ状態でない場合S1440がNOの場合、処理は再びS1410に遷移して、処理対象のパスが存在するかを確認する。例えば、/MNT/FS00/DIRというパスのうち、S1420で/ルートディレクトリが切り出された段階では、MNT/FS00/DIRというパスが残っているため、再びS1410はYESであり、処理が継続する。一方、/ルートディレクトリ、MNT/、FS00/、DIRの全ての要素が切り出された段階では、もはや処理対象のパスは存在しないためS1410はNOである。処理対象のパスが存在しない場合S1410がNOの場合、及び、切り出したオブジェクトがディレクトリでなかった場合S1430がNOの場合、OPEN処理モジュール510は、空きディスクリプタを取得するS1460。ディスクリプタは、ファイルシステムプログラム500が、OPEN済みのファイルやディレクトリを管理するための識別子である。アプリケーションプログラム285はこのディスクリプタを指定してREAD処理およびWRITE処理を行う。ディスクリプタは、例えば有限な整数である。また、空きディスクリプタは、他のOPEN済みのファイルやディレクトリに対して割り当てられていない識別子である。そして、OPEN処理モジュール510は、S1460で取得した空きディスクリプタと、S1420で切り出した最後のオブジェクトを関連づけた上でS1470、OPEN処理を要求したアプリケーションプログラム285にディスクリプタを応答するS1480。S1420で切り出した最後のオブジェクトは、例えば、/MNT/FS00/DIRというパスの場合、DIRディレクトリである。また、/MNT/FS00/DIR/FILEというパスの場合、FILEファイルである。図15は、READ処理モジュール520がCPU210と恊働して実行するREAD処理の詳細を説明するためのフローチャートの一例である。READ処理モジュール520は、ファイルシステムプログラム500が、アプリケーションプログラム285から、READ処理要求を受信したときに実行する。READ処理要求は、例えば、UNIX系のオペレーティングシステムにおけるREADシステムコールである。READ処理要求は、OPEN処理要求によりあらかじめ取得されたディスクリプタと、読み出すデータサイズとを含む。まず、READ処理モジュール520は、READ処理要求に含まれるディスクリプタに対応するオブジェクトを取得するS1510。そして、取得したオブジェクトがスタブ状態であるかどうかを確認するS1520。オブジェクトがスタブ状態の場合S1520がYESの場合、READ処理モジュール520は、当該オブジェクトのパスを指定してスタブ実体化処理を行いS1530、スタブ状態のオブジェクトを実体化する。スタブ実体化処理の詳細については後述する。オブジェクトがスタブ状態でない場合S1520がNOの場合、又は、スタブ実体化処理が終わった後S1530の後、READ処理モジュール520は、ファイル1100のデータ領域1110からREAD処理要求で指定されたサイズのデータを読み出し、オフセット情報を読み出した位置に更新するS1540。オフセット情報は、ファイルをどこまで読んだり書いたりしたかを管理するための位置情報で、ファイルシステムプログラム500が内部的に管理する情報である。そして、READ処理モジュール520は、READ処理を要求したアプリケーションプログラム285に、S1540で読み出したデータを応答するS1550。図16は、WRITE処理モジュール530がCPU210と恊働して実行するWRITE処理の詳細を説明するためのフローチャートの一例である。WRITE処理モジュール530は、ファイルシステムプログラム500が、アプリケーションプログラム285から、WRITE処理要求を受信したときに実行する。WRITE処理要求は、例えば、UNIX系のオペレーティングシステムにおけるWRITEシステムコールである。WRITE処理要求は、OPEN処理要求によりあらかじめ取得されたディスクリプタ、書き込むデータ、そしてデータサイズを含む。まず、WRITE処理モジュール530は、WRITE処理要求に含まれるディスクリプタに対応するオブジェクトを取得するS1610。そして、WRITE処理モジュール530は、取得したオブジェクトがスタブ状態であるかどうかを確認するS1620。オブジェクトがスタブ状態の場合S1620がYESの場合、WRITE処理モジュール530は、当該オブジェクトのパスを指定してスタブ実体化処理を行いS1630、スタブ状態のオブジェクトを実体化する。スタブ実体化処理の詳細については後述する。オブジェクトがスタブ状態でない場合S1620がNOの場合、又は、スタブ実体化処理が終わった後S1630の後、WRITE処理モジュール530は、ファイル1100のデータ領域1110に、WRITE処理要求で指定されたデータを、指定されたサイズ分書き込み、オフセット情報を書き込んだ位置に更新するS1640。さらに、WRITE処理モジュール530は、データを書き込んだ際、ハッシュ値1132や更新フラグ1134も更新する。図17は、図14から図16におけるスタブ実体化処理S1450、S1530、S1630の詳細を説明するためのフローチャートである。まず、OPEN処理モジュール510、READ処理モジュール520、WRITE処理モジュール530以降、各ファイルシステムモジュールは、作業コピー検索ポリシ680に基づいて、作業コピー管理テーブル900を検索するS1710。作業コピー検索ポリシ680は、例えば、実体化する対象のオブジェクトが属する作業コピーと、同一リポジトリ、かつ、同一バージョン、かつ、同一のサイトにある作業コピーを検索するという検索ポリシを格納している。このような作業コピー検索ポリシが設定されている場合に、サーバSERVER00において、/MNT/COPY00/DIR/FILEというファイルを実体化する例について説明する。/MNT/COPY00/DIR/FILEは、そのパスから、作業コピーIDが/MNT/COPY00である作業コピーにあるファイルであることがわかる。作業コピー管理テーブル900において、作業コピー/MNT/COPY00と同一リポジトリREPOS00、かつ、同一バージョンVERSION03、かつ、同一サイトJAPANにある作業コピーは、サーバSERVER01にある、作業コピーID950が/MNT/COPY01の作業コピーである。次に、各ファイルシステムモジュールは、S1710の検索の結果、該当するエントリがあるかどうかを確認するS1720。該当するエントリがある場合S1720がYESの場合、各ファイルシステムモジュールは、当該エントリのサーバID920が示すサーバ200のファイル共有サービスモジュール650に対して、作業コピーID950とオブジェクトパスから導出したパスを含むキャッシュ有無確認要求を発行し、当該オブジェクトのキャッシュとして使用可能な、実体化済でかつ未更新のオブジェクトがあるかどうかを確認するS1730。例えば、作業コピーID950が/MNT/COPY01、実体化ようとしているオブジェクトパスが/MNT/COPY00/DIR/FILEの場合、各ファイルシステムモジュールは、キャッシュが存在する可能性があるパスとして、/MNT/COPY01/DIR/FILEを指定し、ファイル共有サービスモジュール650に問い合わせる。ファイル共有サービスモジュール650は、指定されオブジェクトパスにあるオブジェクトのスタブフラグ1133と更新フラグ1134を参照し、実体化済み、かつ、未更新であるかどうかを確認する。なお、キャッシュ有無を確認する際、各ファイルシステムモジュールは、キャッシュ有無確認要求に実体化しようとしているオブジェクトのハッシュ値1132を含め、ファイル共有サービスモジュール650は、そのハッシュ値と指定されたオブジェクトパスにあるオブジェクトのハッシュ値1132と比較することで、未更新であるかを確認してもよい。あるいは、ファイル共有サービスモジュール650は、作業コピー管理テーブル900のエントリにあるチェックアウト日時960と、更新日時1122を比較することで、未更新であるかを確認してもよい。S1730におけるキャッシュ有無確認の結果、実体化済でかつ未更新のオブジェクトがあった場合、すなわち、ファイル共有サービスモジュール650からキャッシュ有の応答を受け取った場合S1740がYESの場合、各ファイルシステムモジュールは、キャッシュを保持しているサーバのファイル共有サービスモジュール650に対して、キャッシュが存在しているパスを指定してオブジェクト取得要求を発行し、オブジェクトを取得するS1750。S1730におけるキャッシュ有無確認の結果、実体化済でかつ未更新のオブジェクトがなかった場合、すなわち、各ファイルシステムモジュールは、ファイル共有サービスモジュール650からキャッシュ無の応答を受け取った場合S1740がNOの場合、再びS1720に遷移し、S1710で見つかったエントリのうち、まだキャッシュ有無を確認していないエントリがあるかを調べる。エントリがある場合には、各ファイルシステムモジュールは、当該エントリに基づいて、再度キャッシュの有無を確認する。すなわち、各ファイルシステムモジュールは、S1710で該当したエントリを順次選択し、キャッシュが見つかるまでキャッシュ有無を確認する。なお、各ファイルシステムモジュールは、該当エントリについて、このように順次キャッシュ有無を確認するのではなく、全てのエントリについて同時にキャッシュ有無を確認してもよい。その場合は、各ファイルシステムモジュールは、最も早くキャッシュ有を応答したサーバ200に対して、オブジェクト取得要求を発行する。S1710の検索の結果、該当するエントリがなかった場合、又は、該当するエントリ全てについてキャッシュ有無を確認したが、キャッシュが見つからなかった場合S1720がNOの場合、各ファイルシステムモジュールは、マスタサーバ情報690に基づいて、マスタサーバ300のファイル共有サービスモジュール710に対して、オブジェクト取得要求を発行し、オブジェクトを取得するS1790。オブジェクト取得要求は、リポジトリID930、バージョンID940、及び実体化しようとしているオブジェクトのパスから導出した、当該オブジェクトのマスタサーバ300上でのパスを含む。S1750又はS1790の工程によりオブジェクトを取得したら、各ファイルシステムモジュールは、実体化しようとしているオブジェクトがディレクトリであるかどうかを確認するS1760。オブジェクトがディレクトリの場合S1760がYESの場合、各ファイルシステムモジュールは、取得したオブジェクトのディレクトリ構成情報1000に基づいて、実体化しようとしているディレクトリ以下に、スタブ状態のオブジェクトを作成することで、ディレクトリを実体化するS1770。例えば、取得した構成情報が図10のディレクトリ構成情報1000の場合、各ファイルシステムモジュールは、それぞれobj00、obj01という名前のファイル2つと、obj02という名前のディレクトリとを、スタブ状態で作成する。オブジェクトがディレクトリでない場合S1760がNOの場合、各ファイルシステムモジュールは、取得したオブジェクトのデータ領域1110のデータを、スタブ状態のオブジェクトのデータ領域1110に書き込むことで、ファイルを実体化するS1780。図18は、チェックアウトモジュール620がCPU210と恊働して実行するチェックアウト処理の詳細を説明するためのフローチャートの一例である。チェックアウトモジュール620は、バージョン管理クライアントプログラム600がバージョン管理インタフェースプログラム290から、チェックアウト要求を受信したときに実行する。チェックアウト要求は、チェックアウトモジュール620のサーバのサイトID、サーバID、チェックアウト対象のリポジトリID、バージョンID、作業コピーIDを含む。まず、チェックアウトモジュール620は、マスタサーバ情報690に基づいて、マスタサーバ300のチェックアウトサービスモジュール720に対して、チェックアウト要求を発行し、所望のリポジトリバージョンのルートディレクトリのディレクトリ構成情報1000を取得するS1810。このとき、チェックアウトサービスモジュール720は、チェックアウト要求に含まれるサイトID、サーバID、リポジトリID、バージョンID、作業コピーIDと、現在の日時を組としてエントリを作成し、そのエントリをマスタサーバ300の作業コピー管理テーブル770に追加する。そして、チェックアウトサービスモジュール720は、要求されたリポジトリのルートディレクトリ構成情報を応答する。次に、チェックアウトモジュール620は、作業コピーIDにより指定されたパスに、当該作業コピーのルートディレクトリを作成し、S1810で取得したディレクトリ構成情報1000に基づいて、そのルートディレクトリに、スタブ状態のオブジェクトを作成するS1820。チェックアウトモジュール620は、マスタサーバ300の作業コピー管理モジュール740に対し、作業コピー管理テーブル同期要求を発行し、マスタサーバ300の作業コピー管理テーブル770と、サーバ200の作業コピー管理テーブル900とを同期するS1830。図19は、チェックインモジュール630がCPU210と恊働して実行するチェックイン処理の詳細を説明するためのフローチャートの一例である。チェックインモジュール630は、バージョン管理クライアントプログラム600がバージョン管理インタフェースプログラム290から、チェックイン処理要求を受信したときに実行する。チェックイン処理要求は、チェックインする作業コピーIDと、チェックインする先のリポジトリIDとを含む。まず、チェックインモジュール630は、作業コピーIDが示す作業コピーのディレクトリツリーの中から、更新されたオブジェクトのリストを作成するS1910。次に、チェックインモジュール630は、マスタサーバ情報690に基づいて、マスタサーバ300のチェックインサービスモジュール730に対して、チェックイン要求を発行し、競合がないかどうかを確認するS1920。チェックイン要求は、S1910で作成した更新オブジェクトのリストを含む。S1920で発行したチェックイン要求の応答として、競合しているオブジェクトのリストが得られた場合S1930がYESの場合、チェックインモジュール630は、バージョン管理インタフェースプログラム290を介して、ユーザに警告を表示するS1940。そして、ユーザが競合を解消するためのマージ作業を行って、バージョン管理インタフェースプログラム290を通じて、マージ作業完了を通知するまで、チェックインモジュール630は待機するS1950。最後に、チェックインモジュール630は、ユーザによってマージされたオブジェクトを含む更新対象のオブジェクトを、マスタサーバ300の対象リポジトリに対してコピーするS1960。S1920で発行したチェックイン要求の応答として、競合しているオブジェクトのリストが得られなかった場合S1930がNOの場合、チェックインモジュール630は、更新対象のオブジェクトを、マスタサーバ300の対象リポジトリに対してコピーするS1960。以上本実施形態によれば、コピーされたファイルシステムである作業コピーにおいて、実体情報を有していないスタブと作業コピー管理テーブル900とを使用することで、ユーザが作業コピーにおいて必要とするオブジェクトをスタブにより指定することができ、システムが作業コピー管理テーブル900により、指定オブジェクトのキャッシュを、少ない問合せ回数で効率よく発見することができる。このように、スタブと作業コピー管理テーブルを使用した分散キャッシュにより、より高速に作業コピーにおける必要なデータをユーザが取得することができる。さらに、作業コピー管理テーブルは、作業コピー単位でキャッシュデータの管理を行うため、キャッシュ管理のための作業コピー管理テーブルのサイズを小さくすると共に、そのテーブルをサーバマスタサーバ含む間で同期するための転送情報を小さくすることができる。以上、本発明の実施形態を説明したが、本発明が上記の実施形態に限定されるものではない。当業者であれば、上記の実施形態の各要素を、本発明の範囲において容易に変更、追加、変換することが可能である。例えば、ユーザが端末100からサーバ200にログインして、チェックアウトした作業コピーを直接読み書きする例を説明したが、サーバ200のファイル共有サービスモジュール650で、NetworkFileSystemNFSプロトコルや、CommonInternetFileSystemCIFSプロトコルに準拠したファイル共有機能を提供し、複数の端末上で作業コピーを共有してもよい。その場合、チェックインやチェックアウトの操作は、その作業コピーを管理するユーザが実施する。スタブ実体化処理として、オブジェクト単位でサーバ200やマスタサーバ300からデータを取得する例を示したが、ファイルシステムプログラム500が保持するファイルのオフセット情報と、READ処理要求やWRITE処理要求に含まれる読み書き対象のサイズに基づいて、必要な部分を、例えば、ブロック単位でデータを取得してもよい。上述のように、作業コピー管理テーブルのエントリは、作業コピーと一対一で対応していることが好ましいが、作業コピー管理テーブルは、作業コピーに対して複数のエントリを有していていもよい。例えば、ディレクトリ又はファイルを特定するフィールドを追加し、同一作業コピーエントリがこれらのフィールドの異なる値を格納することができる。このようなフィールドが存在する場合は、そのオブジェクトの更新の有無を示すフィールドも有していてもよい。リポジトリIDとサーバIDによりオブジェクトのキャッシュの問い合わせ先を特定することができる。そのため、作業コピー管理テーブルは、バージョンID及び作業コピーID及び他のフィールドを含まなくてもよい。上述のように、問い合わせ回数低減のためにはバージョンIDを含むことが好ましい。上記構成において、マスタサーバ300が作業コピー管理テーブルのマスタテーブルを備え、それをサーバ200がコピーする。マスタサーバ300がマスタテーブルを有することで作業コピー管理テーブルの同期管理をより適切に行うことがきると共に、各サーバ間で発生する同期のためのデータ転送を低減することができる。これと異なり、各サーバ200間において、作業コピー管理テーブルの同期処理を行ってもよい。上記構成は、1つのマスタサーバのみを有するが、本発明は、複数のマスタサーバを有するシステムに適用でき、また、1つのサーバと1又は複数のマスタサーバからなるシステムにも適用することができる。上記構成において、作業コピーはリポジトリのルートディレクトリを含むが、作業コピーは、ルートディレクトリより下層のディレクトリをトップディレクトリとするファイルシステムであってもよい。例えば、ユーザは、チェックアウトにおいて、リポジトリの特定のディレクトリをトップディレクトリとして指定する。本発明は、上述のように、バージョン管理機能を有するファイルシステムに特に好適であるが、これとは異なるファイルシステムに適用することができる。例えば、ユーザは、マスタサーバよりファイルシステムのコピーを取得のみで、マスタサーバが更新データを受け付けないシステムに適用してもよい。上記の各構成、機能、処理、処理部等は、それらの一部を、ハードウェアで実現してもよい。各機能を実現するためのプログラム及びデータを含む情報は、不揮発性半導体メモリ、ハードディスク、SSDSolidStateDrive等の記憶装置、又は、ICカード、SDカード、DVD等の、計算機読み取り可能な非一時的記録媒体に格納することができる。