(57)【特許請求の範囲】
【請求項１】
ソースファイルを作成・編集するユーザ端末と、当該ソースファイルの版数管理を行う版数管理装置と、を有してなる版数管理システムであって、
前記ユーザ端末は、
前記ソースファイルに含まれるデータのハッシュ値と、当該ソースファイルの版数管理に用いる版数管理情報のハッシュ値と、を計算し、当該計算結果を接続することで前記ソースファイルのハッシュファイルを作成する手段と、
前記ハッシュファイルを添付した前記ソースファイルと当該ソースファイルの版数管理情報とを前記版数管理装置に送信する手段と、を有し、
前記版数管理装置は、
前記ユーザ端末から前記ソースファイルと当該ソースファイルの版数管理情報とを受信すると、当該ソースファイルと当該ソースファイルに添付されたハッシュファイルとをセットで記憶手段に保存すると共に、当該ソースファイルの版数管理情報を前記記憶手段に保存するファイル管理手段を有する、版数管理システム。
【請求項２】
前記版数管理装置は、
前記ユーザ端末から初版のソースファイルを受信すると、当該ソースファイルに含まれるデータのハッシュ値と、当該ソースファイルの版数管理情報のハッシュ値と、を計算し、当該計算結果を接続して当該ソースファイルのハッシュファイルを作成する手段と、
前記ユーザ端末から受信した前記初版のソースファイルに添付されているハッシュファイルと、当該ソースファイルを基に自装置で作成したハッシュファイルと、に含まれる全てのハッシュ値を比較する差分分析手段をさらに有し、
前記ファイル管理手段は、前記ハッシュファイルに含まれる全てのハッシュ値が一致する場合に、前記初版のソースファイルが改ざんされていないと判定し、当該ソースファイルと当該ソースファイルに添付されたハッシュファイルとをセットで前記記憶手段に保存すると共に、当該ソースファイルの版数管理情報を前記記憶手段に保存する、請求項１に記載の版数管理システム。
【請求項３】
前記版数管理情報の項目には、前記ソースファイルの編集の可否を表すフラグが含まれており、
前記ファイル管理手段は、前記ユーザ端末から前記ソースファイルの編集が要求されると、当該ソースファイルの版数管理情報を前記記憶手段から抽出し、前記フラグが編集可を示す場合に、当該ソースファイルを前記記憶手段から抽出して要求元のユーザ端末に送信するとともに、前記フラグを編集不可に更新した上で当該ソースファイルの版数管理情報を要求元のユーザ端末に送信する、請求項２に記載の版数管理システム。
【請求項４】
前記差分分析手段は、前記要求元のユーザ端末から前記ソースファイルを受信すると、前記フラグが編集不可を示す場合に、当該ソースファイルに添付されているハッシュファイルと、前記記憶手段に記憶されているハッシュファイルと、に含まれる前記データのハッシュ値を比較し、
前記ファイル管理手段は、前記ハッシュファイルに含まれる前記データのハッシュ値が異なる場合に、前記ソースファイルが編集されたと判定し、当該ソースファイルの版数を更新し、当該ソースファイルと当該ソースファイルに添付されているハッシュファイルのファイル名を更新後の版数に合わせてリネームし前記記憶手段に保存する、請求項３に記載の版数管理システム。
【請求項５】
前記ファイル管理手段は、前記ユーザ端末から前記ソースファイルの参照が要求されると、前記フラグとは無関係に、当該ソースファイルを前記記憶手段から抽出して要求元のユーザ端末に送信し、前記フラグは更新しない、請求項３または４に記載の版数管理システム。
【請求項６】
前記ファイル管理手段は、前記ハッシュファイルを保存する際に、当該ハッシュファイルに含まれるハッシュ値を、前記データおよび前記版数管理情報の項目ごとに区分して前記記憶手段のデータベースに保存する、請求項１から５のいずれか１項に記載の版数管理システム。
【請求項７】
ソースファイルを作成・編集するユーザ端末と、当該ソースファイルの版数管理を行う版数管理装置と、による版数管理方法であって、
前記ユーザ端末が、前記ソースファイルに含まれるデータのハッシュ値と、当該ソースファイルの版数管理に用いる版数管理情報のハッシュ値と、を計算し、当該計算結果を接続することで前記ソースファイルのハッシュファイルを作成するステップと、
前記ユーザ端末が、前記ハッシュファイルを添付した前記ソースファイルと当該ソースファイルの版数管理情報とを前記版数管理装置に送信するステップと、
前記版数管理装置が、前記ユーザ端末から前記ソースファイルと当該ソースファイルの版数管理情報とを受信すると、当該ソースファイルと当該ソースファイルに添付されたハッシュファイルとをセットで記憶手段に保存すると共に、当該ソースファイルの版数管理情報を前記記憶手段に保存するステップと、を有する、版数管理方法。
【請求項８】
前記版数管理装置が、前記ユーザ端末から初版のソースファイルを受信すると、当該ソースファイルに含まれるデータのハッシュ値と、当該ソースファイルの版数管理情報のハッシュ値と、を計算し、当該計算結果を接続して当該ソースファイルのハッシュファイルを作成するステップと、
前記版数管理装置が、前記ユーザ端末から受信した前記初版のソースファイルに添付されているハッシュファイルと、当該ソースファイルを基に自装置で作成したハッシュファイルと、に含まれる全てのハッシュ値を比較するステップと、をさらに有し、
前記保存ステップでは、前記ハッシュファイルに含まれる全てのハッシュ値が一致する場合に、前記初版のソースファイルが改ざんされていないと判定し、当該ソースファイルと当該ソースファイルに添付されたハッシュファイルとをセットで前記記憶手段に保存すると共に、当該ソースファイルの版数管理情報を前記記憶手段に保存する、請求項７に記載の版数管理方法。
【請求項９】
前記版数管理情報の項目には、前記ソースファイルの編集の可否を表すフラグが含まれており、
前記版数管理装置が、前記ユーザ端末から前記ソースファイルの編集が要求されると、当該ソースファイルの版数管理情報を前記記憶手段から抽出し、前記フラグが編集可を示す場合に、当該ソースファイルを前記記憶手段から抽出して要求元のユーザ端末に送信するとともに、前記フラグを編集不可に更新した上で当該ソースファイルの版数管理情報を要求元のユーザ端末に送信するステップをさらに有する、請求項８に記載の版数管理方法。
【請求項１０】
前記版数管理装置が、前記要求元のユーザ端末から前記ソースファイルを受信すると、前記フラグが編集不可を示す場合に、当該ソースファイルに添付されているハッシュファイルと、前記記憶手段に記憶されているハッシュファイルと、に含まれる前記データのハッシュ値を比較するステップと、
前記版数管理装置が、前記ハッシュファイルに含まれる前記データのハッシュ値が異なる場合に、前記ソースファイルが編集されたと判定し、当該ソースファイルの版数を更新し、当該ソースファイルと当該ソースファイルに添付されているハッシュファイルのファイル名を更新後の版数に合わせてリネームし前記記憶手段に保存するステップと、をさらに有する、請求項９に記載の版数管理方法。
【請求項１１】
前記版数管理装置が、前記ユーザ端末から前記ソースファイルの参照が要求されると、前記フラグとは無関係に、当該ソースファイルを前記記憶手段から抽出して要求元のユーザ端末に送信し、前記フラグは更新しない、請求項９または１０に記載の版数管理方法。
【請求項１２】
前記保存ステップでは、前記ハッシュファイルに含まれるハッシュ値を、前記データおよび前記版数管理情報の項目ごとに区分して前記記憶手段のデータベースに保存する、請求項７から１１のいずれか１項に記載の版数管理方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ファイルの版数管理を行う版数管理システムおよび版数管理方法に関する。
【背景技術】
【０００２】
従来、ファイルの版数管理では、ファイルに含まれるデータの内容そのものを比較して、差分分析を行う手法が用いられていた。
【０００３】
しかしながら、上記の手法では、データのサイズが大きなファイルを検索する場合や多数のファイルを検索する場合に、差分分析を行う時間が増大してしまうという問題があった。また、昨今、プログラム開発を海外や遠隔地の会社に発注する、いわゆるオフショア開発が増加する中で、ファイル送受信時の情報漏洩を予防する必要性が高まっており、セキュリティ面でもファイルを平文のまま送受信していることは問題であった。
【０００４】
そこで、別の手法として、ハッシュ関数を利用して差分分析を行う装置が、特許文献１に開示されている。
【特許文献１】特開２００６−１３３９５４号公報
【発明の開示】
【発明が解決しようとする課題】
【０００５】
しかしながら、特許文献１に開示された装置では、デジタル文書データとそれに基づくハッシュ値などをそれぞれ作成し、版数管理に用いる版数管理情報は異なる独立したデータとして持つ必要があるという課題があった。
【０００６】
そこで、本発明の目的は、上述した課題を解決する版数管理システムおよび版数管理方法を提供することにある。
【課題を解決するための手段】
【０００７】
上記目的を達成するために本発明の版数管理システムは、
ソースファイルを作成・編集するユーザ端末と、当該ソースファイルの版数管理を行う版数管理装置と、を有してなる版数管理システムであって、
前記ユーザ端末は、
前記ソースファイルに含まれるデータのハッシュ値と、当該ソースファイルの版数管理に用いる版数管理情報のハッシュ値と、を計算し、当該計算結果を接続することで前記ソースファイルのハッシュファイルを作成する手段と、
前記ハッシュファイルを添付した前記ソースファイルを前記版数管理装置に送信する手段と、を有し、
前記版数管理装置は、
前記ユーザ端末から前記ソースファイルを受信すると、当該ソースファイルと当該ソースファイルに添付されたハッシュファイルとをセットで記憶手段に保存するファイル管理手段を有する、ことを特徴とする。
【０００８】
上記目的を達成するために本発明の版数管理方法は、
ソースファイルを作成・編集するユーザ端末と、当該ソースファイルの版数管理を行う版数管理装置と、による版数管理方法であって、
前記ユーザ端末が、前記ソースファイルに含まれるデータのハッシュ値と、当該ソースファイルの版数管理に用いる版数管理情報のハッシュ値と、を計算し、当該計算結果を接続することで前記ソースファイルのハッシュファイルを作成するステップと、
前記ユーザ端末が、前記ハッシュファイルを添付した前記ソースファイルを前記版数管理装置に送信するステップと、
前記版数管理装置が、前記ユーザ端末から前記ソースファイルを受信すると、当該ソースファイルと当該ソースファイルに添付されたハッシュファイルとをセットで記憶手段に保存するステップと、を有する、ことを特徴とする。
【発明の効果】
【０００９】
上述のように本発明によれば、版数管理装置は、ソースファイルに含まれるデータのハッシュ値とそのソースファイルの版数管理情報のハッシュ値とを接続したハッシュファイルを、そのソースファイルとセットで保存している。
【００１０】
そのため、ソースファイルの版数管理情報を、そのソースファイルに含まれるデータとは異なる独立したデータとして持つ必要がないという効果が得られる。
【発明を実施するための最良の形態】
【００１１】
以下に、本発明を実施するための最良の形態について図面を参照して説明する。
【００１２】
（第１の実施形態）
図１は、本発明の第１の実施形態の版数管理システムの構成を示す図である。
【００１３】
図１を参照すると、本実施形態の版数管理システムは、ユーザ端末１０と、版数管理装置２０と、を有している。なお、図１においては、ユーザ端末１０が１つだけ示されているが、ユーザ端末１０は、同様のものを複数設けることも可能である。
【００１４】
ユーザ端末１０および版数管理装置２０は、プログラム制御により動作し、インターネットやイントラネットなどであるネットワーク１００を介して相互に接続されている。
【００１５】
ユーザ端末１０は、プログラム開発者が使用するパーソナルコンピュータやワークステーションなどの情報処理装置である。
【００１６】
ユーザ端末１０は、記憶部１１と、ファイル管理部１２と、ハッシュ値計算部１３と、差分分析部１４と、インターフェイス１５と、暗号化復号化部１６と、を有している。
【００１７】
記憶部１１は、ソースファイルやソースファイルの版数管理に用いる版数管理情報などを保存する。版数管理情報の項目には、ソースファイルの作成日、更新日、最終更新者の他、ソースファイルの編集の可否を表す排他制御状態フラグなどが含まれる。
【００１８】
ファイル管理部１２は、版数管理装置２０との間で送受信するソースファイルやハッシュファイルのファイル管理を行う。
【００１９】
ハッシュ値計算部１３は、ハッシュ関数を利用して、版数管理装置２０との間で送受信するソースファイルのハッシュファイルを作成する。
【００２０】
差分分析部１４は、版数管理装置２０から受信したソースファイルに添付されているハッシュファイルと、ハッシュ値計算部１３で作成したハッシュファイルと、に含まれるハッシュ値を比較して、その差分を分析する。この比較結果を基に、ファイル管理部１２は、版数管理装置２０から受信したソースファイルの改ざんの有無などを検証する。
【００２１】
インターフェイス１５は、ハッシュファイルを添付したソースファイルなどを、ネットワーク１００を介して、版数管理装置２０との間で送受信する。
【００２２】
暗号化復号化部１６は、版数管理装置２０との間で送受信するソースファイルやハッシュファイルの暗号化／復号化を行う。
【００２３】
版数管理装置２０は、ファイルを保存するファイルサーバやデータベースも併せて搭載する複合サーバなどの情報処理装置である。
【００２４】
版数管理装置２０は、記憶部２１と、ファイル管理部２４と、ハッシュ値計算部２５と、差分分析部２６と、インターフェイス２７と、暗号化復号化部２８と、を有している。
【００２５】
記憶部２１は、ユーザ端末１０との間で送受信するソースファイル２２やソースファイル２２のハッシュファイル２３などを保存する。
【００２６】
ファイル管理部２４は、ユーザ端末１０との間で送受信するソースファイルやハッシュファイルのファイル管理を行う。
【００２７】
ハッシュ値計算部２５は、ユーザ端末１０との間で送受信するソースファイルのハッシュファイルを作成する。
【００２８】
差分分析部２６は、ユーザ端末１０から受信したソースファイルに添付されているハッシュファイルと、ハッシュ値計算部２５で作成したハッシュファイルと、に含まれるハッシュ値を比較して、その差分を分析する。この比較結果を基に、ファイル管理部１２は、版数管理装置２０から受信したソースファイルの改ざんの有無などを検証する。
【００２９】
また、差分分析部２６は、ユーザ端末１０から受信したソースファイルに添付されているハッシュファイルと、記憶部２１に記憶されているハッシュファイルと、に含まれるハッシュ値を比較して、その差分を分析する。この比較結果を基に、ファイル管理部１２は、版数管理装置２０から受信したソースファイルの編集の有無などを判定する。
【００３０】
インターフェイス２７は、ハッシュファイルが添付されているソースファイルなどを、ネットワーク１００を介して、ユーザ端末１０との間で送受信する。
【００３１】
暗号化復号化部２８は、ユーザ端末１０との間で送受信するソースファイルやハッシュファイルの暗号化／復号化を行う。
【００３２】
ここで、ハッシュ値計算部１３，２５で作成されるハッシュファイルについて、詳細に説明する。
【００３３】
図２は、ハッシュ値計算部１３，２５で作成されるハッシュファイルの一例を示す図である。
【００３４】
図２を参照すると、ハッシュファイルは、ソースファイルに含まれるデータのハッシュ値の他、そのソースファイルの版数管理情報の各項目（作成日、更新日、最終更新者、および排他制御状態フラグ）のハッシュ値を含んでいる。
【００３５】
ハッシュ値計算部１３，２５は、ソースファイルを基にハッシュファイルを作成する場合、ハッシュ関数を利用して、まず、ソースファイルに含まれるデータのハッシュ値を計算する。図２では、ハッシュ値となったデータを＊＊＊と表記している。次に、版数管理情報である、作成日、更新日、最終更新者、および排他制御状態フラグのハッシュ値をそれぞれ計算し、これを＊＊＊のヘッダ部分に接続してハッシュファイルとする。なお、図２では、説明の便宜のため、版数管理情報を元データのままで表記している。
【００３６】
ハッシュ関数とは、あるデータに対して一定の桁数内の固定長テキストによる代表値を出力する関数であり、異なったデータからは常に異なったハッシュ値が得られることが望ましい。これをソースファイルに適用することで、ユニークな情報を持つデータを作成することができるため、ファイルの差分分析を行う場合に内容そのものを参照する必要がなく、高速に処理できる。標準化されたハッシュ関数のアルゴリズムにはＳＨＡ−１、ＭＤ５などがあり、本実施形態でもこれらのハッシュ関数の利用を想定している。
【００３７】
図３は、ソースファイルProgram01.apiの新規保存、編集用抽出、書戻、および参照用抽出を実行した場合のハッシュファイルの内容の履歴の一例を示す図である。なお、図３の詳細な説明は、図５以降の説明時に併せて行う。
【００３８】
図４は、図２に示したハッシュファイルを拡張した例を示す図である。
【００３９】
図４を参照すると、ハッシュファイルには、プログラム開発環境に依存するような情報を付与する必要がある場合に、任意に利用可能なオプションフィールドを追加することもできる。このように、本実施形態では、ソースファイルに含まれるデータに付加される情報に加え、多数の情報を付加することが可能である。これは、ハッシュ値によって最終的に固定長のテキストファイルに圧縮されるため、多数の情報を付与してもハッシュファイルのサイズは大きく増加することがないことから得られる利点である。
【００４０】
以下、本実施形態の版数管理システムの動作について説明する。
【００４１】
ここでは、ソースファイルの新規保存、編集用抽出、書戻、参照用抽出、および検索の動作を順番に説明する。
【００４２】
（１）新規保存
まず、ＵＳＥＲ０１が、新規に作成したソースファイルProgram01.apiを版数管理装置２０に新規保存する場合の動作について、図５および図６を参照して説明する。
【００４３】
図５を参照すると、ＵＳＥＲ０１のユーザ端末１０（送信側）では、まず、ファイル管理部１２は、記憶部１１から、ソースファイルProgram01.apiと、ソースファイルProgram01.apiの版数管理情報と、を読み出す。なお、ソースファイルProgram01.apiには、データのみが含まれている。
【００４４】
次に、ハッシュ値計算部１３は、ハッシュ関数を利用して、ソースファイルProgram01.apiに含まれるデータのハッシュ値と、ソースファイルProgram01.apiの版数管理情報の各項目（作成日、更新日、最終更新者、および排他制御状態フラグ）のハッシュ値と、を計算し、これらを接続してハッシュファイルProgram01.hashを作成する（ステップＡ１）。このとき、排他制御状態フラグは、編集用抽出が可能な０に設定されている。
【００４５】
次に、暗号化復号化部１６は、ソースファイルProgram01.apiとハッシュファイルProgram01.hashを公開鍵暗号などで暗号化する。
【００４６】
次に、インターフェイス１５は、ソースファイルProgram01.apiに、ハッシュファイルProgram01.hashを電子署名として添付し、ＳＳＬ（Secure Sockets Layer）などのセキュリティプロトコルを用いて、版数管理装置２０へ送信する（ステップＡ２）。このとき、ソースファイルProgram01.apiの版数管理情報も併せて送信する。
【００４７】
版数管理装置２０（受信側）では、まず、暗号化復号化部２８は、ソースファイルProgram01.apiと、ソースファイルProgram01.apに添付されたハッシュファイルProgram01.hashを復号化する。
【００４８】
次に、ハッシュ値計算部２５は、ユーザ端末１０と同じハッシュ関数を利用して、ソースファイルProgram01.apiのハッシュファイルProgram01a.hashを作成する（ステップＡ３）。このとき、ユーザ端末１０と同じハッシュ関数を利用するため、内容が全く同一のファイルであれば、ハッシュ値は変化しない。
【００４９】
そこで、差分分析部２６は、ハッシュファイルProgram01.hashと、ハッシュファイルProgram01a.hashと、に含まれる全てのハッシュ値を比較する。
【００５０】
そして、ファイル管理部２４は、全てのハッシュ値が一致すれば、ソースファイルProgram01.apiが改ざんされていないと判定し、いずれかのハッシュ値が不一致であれば、改ざんされたと判定する（ステップＡ４）。
【００５１】
図６を参照すると、版数管理装置２０では、図５のステップＡ４でソースファイルProgram01.apiが改ざんされていないと判定されると（ステップＢ１）、ファイル管理部２４は、ソースファイルProgram01.apiとハッシュファイルProgram01.hashとをセットで記憶部２１に保存する。このとき、ソースファイルProgram01.apiの版数管理情報も併せて、記憶部２１に保存する（ステップＢ２）。このときのハッシュファイルProgram01.hashは、図３の行１に示される内容であり、排他制御状態フラグが０に設定されている。また、ソースファイルProgram01.apiの版数は、初版に設定される。
【００５２】
（２）編集用抽出
続いて、ＵＳＥＲ０２が、版数管理装置２０からソースファイルProgram01.apiを編集用に抽出する場合の動作について、図７を参照して説明する。
【００５３】
図７を参照すると、ＵＳＥＲ０２のユーザ端末１０では、インターフェイス１５は、版数管理装置２０に対し、ソースファイルProgram01.apiの編集用抽出を要求する（ステップＣ１）。
【００５４】
版数管理装置２０では、まず、ファイル管理部２４は、ソースファイルProgram01.apiとセットで記憶部２１に保存されているハッシュファイルProgram01.hashに含まれる排他制御状態フラグのハッシュ値を確認する（ステップＣ２）。
【００５５】
もし、排他制御状態フラグが０でなければ（ステップＣ３）、他のユーザがソースファイルProgram01.apiを編集用に抽出しているために、ファイル管理部２４は、エラーを返す（ステップＣ４）。一方、排他制御状態フラグが０であれば（ステップＣ３）、ファイル管理部２４は、ソースファイルProgram01.apiを抽出する（ステップＣ５）。
【００５６】
次に、新たなハッシュ値処理を行う（ステップＣ６）。このハッシュ値処理では、ファイル管理部２４は、ソースファイルProgram01.apiが編集用に抽出されたことを示すために、排他制御状態フラグを１に更新するとともに、更新日と最終更新者を更新し（ステップＣ７）、ハッシュ値計算部２５は、更新された排他制御状態フラグ、更新日、および最終更新者のハッシュ値を新たに計算し、ハッシュファイルProgram01.hashを更新する。このときのハッシュファイルProgram01.hashは、図３の行２に示される内容である。
【００５７】
ハッシュ値計算部２５からハッシュファイルProgram01.hashが出力されると（ステップＣ８）、ファイル管理部２４は、ハッシュファイルProgram01.hashを上書きして記憶部２１に保存する（ステップＣ９）。
【００５８】
また、インターフェイス２７は、ソースファイルProgram01.apiにハッシュファイルProgram01.hashを電子署名として添付し、セキュリティプロトコルを用いて、ＵＳＥＲ０２のユーザ端末１０へ送信する（ステップＣ１０）。このとき、ソースファイルProgram01.apiの版数管理情報も併せて送信する。
【００５９】
その後、ＵＳＥＲ０２のユーザ端末１０では、ソースファイルProgram01.apiの改ざんの有無の検証を行う。このときの検証処理は、図５の受信側の処理と同様である（ただし、この場合は、送信側が版数管理装置２０、受信側がＵＳＥＲ０２のユーザ端末１０となる）。以上で、編集用抽出動作が完了する。
【００６０】
（３）書戻
続いて、ＵＳＥＲ０２が、編集後のソースファイルProgram01.apiを版数管理装置２０に書き戻す動作について、図８を参照して説明する。
【００６１】
図８を参照すると、ＵＳＥＲ０２のユーザ端末１０では、編集後のソースファイルProgram01.apiを版数管理装置２０に送信する。このときの送信処理は、図５の送信側の処理と同様である。
【００６２】
版数管理装置２０では、まず、編集後のソースファイルProgram01.apiの改ざんの有無を検証する（ステップＤ１）。このときの検証処理は、図５の受信側の処理と同様である。
【００６３】
次に、ファイル管理部２４は、ソースファイルProgram01.apiとセットで記憶部２１に保存されているハッシュファイルProgram01.hashに含まれる排他制御状態フラグのハッシュ値を確認する（ステップＤ２）。
【００６４】
もし、排他制御状態フラグが０であった場合は（ステップＤ３）、ソースファイルProgram01.apiが編集用抽出の処理をされないで入手されたものである可能性があるため、ファイル管理部２４は、エラーを返す（ステップＤ４）。また、ファイル管理部２４は、最終更新者のハッシュ値も確認し（ステップＤ２）、最終更新者がＵＳＥＲ０２ではない場合も（ステップＤ３）、同様にエラーを返す（ステップＤ４）。
【００６５】
排他制御状態フラグが１で、かつ、最終更新者がＵＳＥＲ０２であった場合、差分分析部２６は、ソースファイルProgram01.apiに含まれるデータ自体に変更があるかどうかを確認する差分チェックを行う（ステップＤ５）。この処理も、ソースファイルProgram01.apiに添付されたハッシュファイルProgram01.hashと、ソースファイルProgram01.apiとセットで記憶部２１に保存されているハッシュファイルProgram01.hashと、に含まれるデータのハッシュ値を比較することで行うことができる。データのハッシュ値は、ハッシュ関数によって固定長となっているため、照合にかかる時間は、ファイルサイズや形式（テキストもしくはバイナリ）で左右されず、高速である。
【００６６】
もし、差分がない場合は（ステップＤ６）、ファイル管理部２４は、その旨のメッセージを出力する（ステップＤ７）。差分がある場合は（ステップＤ６）、ファイル管理部２４は、データが更新（編集）されたと判定し、前バージョンのソースファイルProgram01.apiおよびハッシュファイルProgram01.hashを、それぞれソースファイルProgram01-01.apiおよびハッシュファイルProgram01-01.hashにリネームする（ステップＤ８）。
【００６７】
次に、新たなハッシュ値処理を行う（ステップＤ９）。
【００６８】
差分がある場合、ハッシュ値処理では、ファイル管理部２４は、ソースファイルProgram01.apiが編集用抽出が可能になったことを示すために、排他制御状態フラグを０に更新するとともに、更新日、最終更新者、およびデータを更新し（ステップＤ１０）、ハッシュ値計算部２５は、更新された排他制御状態フラグ、更新日、最終更新者、およびデータのハッシュ値を新たに計算し、ハッシュファイルProgram01-1.hashを更新する。このときのハッシュファイルProgram01-1.hashは、図３の行３に示される内容である。これにより、ソースファイルProgram01.apiの版数は、第二版に更新される。
【００６９】
ハッシュ値計算部２５からハッシュファイルProgram01-1.hashが出力されると（ステップＤ１１）、ファイル管理部２４は、ハッシュファイルProgram01-1.hashを、ソースファイルProgram01-01.apiとセットで記憶部２１に保存する（ステップＤ１２）。
【００７０】
なお、差分がない場合、ハッシュ値処理では、ハッシュファイルProgram01.hashの更新に際し、データの更新は行われない。また、更新後のハッシュファイルProgram01.hashは、ソースファイルProgram01.apiとセットで記憶部２１に保存される
（４）参照用抽出
続いて、ＵＳＥＲ０２が、版数管理装置２０からソースファイルProgram01-1.apiを参照用に抽出する場合の動作について、図９を参照して説明する。
【００７１】
参照用抽出は、ソースファイルProgram01-1.apiの内容を参照することのみが目的であり、書き戻しは行わない。参照用抽出が、編集用抽出とは大きく異なる点は、ソースファイルProgram01-1.apiの抽出の際に排他制御状態フラグを更新しないことである。
【００７２】
図９を参照すると、ＵＳＥＲ０２のユーザ端末１０では、インターフェイス１５は、版数管理装置２０に対し、ソースファイルProgram01-1.apiの参照用抽出を要求する（ステップＥ１）。
【００７３】
版数管理装置２０では、まず、ファイル管理部２４は、ソースファイルProgram01-1.apiを抽出する（ステップＥ２）。次に、新たなハッシュ値処理を行うが（ステップＥ３）、ここでは、ハッシュ値計算部２５からは、ハッシュファイルProgram01-01.hashが、版数管理情報のいずれの項目も更新されずに出力される（ステップＥ４）。
【００７４】
次に、インターフェイス２７は、ソースファイルProgram01-1.apiをＵＳＥＲ０２のユーザ端末１０に送信する（ステップＥ５）。このときの送信処理は、図５の送信側の処理と同様である。
【００７５】
ＵＳＥＲ０２のユーザ端末１０に向けて送信されたソースファイルProgram01-1.apiは、それ以降、版数管理装置２０で利用されることはない。このソースファイルProgram01-1.apiをユーザ端末１０で編集し書き戻そうとしても、排他制御状態フラグが１に更新されていないため、図８のステップＤ３，Ｄ４の処理を経てエラーが返される。このときのハッシュファイルProgram01-1.hashは、図３の行４に示される内容である。
【００７６】
なお、参照用抽出は、排他制御状態フラグが１に更新されないため、その後に、ＵＳＥＲ０３が編集用抽出をすることは当然に可能である（図３の行５参照）。また、行６は、排他制御状態フラグが１である状態で、編集用抽出が要求されてエラーが返された例である。行７では、排他制御状態フラグが１であるが、要求が参照用抽出であるため、エラーにはならない。行８では、ＵＳＥＲ０３が書き戻しを行って、排他制御状態フラグ、更新日、データが更新され、版数が第三版に更新される。
【００７７】
（５）検索
続いて、ＵＳＥＲが、版数管理装置２０からソースファイルを検索する場合の動作について説明する。
【００７８】
上記の（１）〜（４）の動作では、ユーザ端末１０と版数管理装置２０との間の通信の中に、ファイルの移動を伴う通信が含まれており、ファイルの移動を伴う通信の場合は、暗号化復号化部１６，２８を利用して暗号化通信を行っていた。
【００７９】
これに対して、ソースファイルの検索時には、ファイルの移動を伴う通信は一切含まれない。ファイル管理部２４は、ファイル検索時にはハッシュファイルを参照するが、ファイルの検索結果は暗号化せずにユーザ端末１０に送信する。
【００８０】
本実施形態においては、一方向性ハッシュ関数を利用することを前提に考えており、ファイルは固定長のデータに変換され、元のファイルへの復元が計算量的に不可能である。そのため、ファイル検索時には安全性を保ちつつ、通信量の増加やユーザ端末１０および版数管理装置２０の処理量を抑えることができる。
【００８１】
上述したように本実施形態においては、版数管理装置２０は、ソースファイルに含まれるデータのハッシュ値とそのソースファイルの版数管理情報のハッシュ値とを接続したハッシュファイルを、そのソースファイルとセットで保存している。そのため、ソースファイルの版数管理情報を、そのソースファイルに含まれるデータとは異なる独立したデータとして持つ必要がないという効果が得られる。
【００８２】
また、版数管理装置２０は、ソースファイルの更新（編集）や改ざんの有無を判定するための差分分析を、そのソースファイルのハッシュファイルに含まれるハッシュ値を利用して行うため、これらの判定処理の高速化が図れるという効果が得られる。
【００８３】
また、版数管理装置２０およびユーザ端末１０は、ソースファイルを暗号化して送信するため、ソースファイルに含まれるデータの覗き見を防ぐことができるという効果が得られる。
【００８４】
また、版数管理装置２０およびユーザ端末１０は、ソースファイルを基にハッシュ関数を利用してハッシュファイルを作成し、そのハッシュファイルを電子署名としてソースファイルに添付するため、データの改ざんなどを防ぐことができるという効果が得られる。      
【００８５】
よって、プログラム開発を、自社内オフィスでの作業ではなく、オフショア開発で行う場合でも、セキュリティ性を保つことができる。
【００８６】
（第２の実施形態）
図１０は、本発明の第２の実施形態の版数管理システムの構成を示す図である。
【００８７】
図１０を参照すると、本実施形態の版数管理システムは、図１に示した第１の実施形態と比較して、記憶部２１の内部に、ハッシュ用データベース２９を設けた点が異なる。
【００８８】
ハッシュ用データベース２９には、ハッシュファイルが保存されるが、その際に、ファイル管理部２４は、ハッシュファイルに含まれるハッシュ値を、データおよび版数管理情報の項目ごとに区分して保存する。
【００８９】
本実施形態が第１の実施形態と異なる点は、版数管理装置２０が、ユーザ端末１０へソースファイルを送信する際に、そのソースファイルのハッシュファイルをハッシュ用データベース２９から読み出す処理が必要になる点と、ユーザ端末１０からソースファイルを受信した際に、そのソースファイルのハッシュファイルに含まれるハッシュ値をハッシュ用データベース２９に書き込む処理が必要になる点である。
【００９０】
上述したように本実施形態においては、ハッシュファイルに含まれるハッシュ値をハッシュ用データベース２９に保存しているため、高速化は差分分析だけでなく、版数管理全体に及ぶという効果が得られる。
【００９１】
ハッシュ値は、固定長のデータであるため、バイト単位での指定が可能である。例えば、図２において、排他制御状態フラグのハッシュ値のみを参照する場合に、排他制御状態フラグを示す文字列を直接指定することができる。これは、排他制御状態フラグより前にある作成日、更新日、最終更新者のフィールドが全て固定長となるからである。特に、最終更新者のフィールドは可変長となるので、より多くの情報を付加したハッシュファイルとなった場合に有効性は大きくなる。また、ハッシュ値はユニークなデータを持つために、索引機能を利用した高速検索も可能となる。
【００９２】
本実施形態のその他の効果は、第１の実施形態と同様である。
【００９３】
なお、第１および第２の実施形態においては、版数管理の対象をソースファイル以外とする応用も可能である。版数管理を目的とするファイルならば、ファイルの種類を選ぶことはない。より大きなサイズのファイルの差分管理を行う際にその有用性は大きくなる。
【産業上の利用可能性】
【００９４】
本発明は、プログラムファイルや文書ファイルなどの版数管理を必要とするファイルに、ファイル形式を問わずに適用できる。また、本発明は、ファイルの送受信時には暗号化も併せて行うため、セキュリティも保証される。
【図面の簡単な説明】
【００９５】
【図１】本発明の第１の実施形態の版数管理システムの構成を示す図である。
【図２】本発明に係るハッシュファイルの一例を示す図である。
【図３】本発明に係るハッシュファイルの内容の履歴の一例を示す図である。
【図４】図２に示したハッシュファイルを拡張した例を示す図である。
【図５】図１に示した版数管理システムにおける送受信動作を説明するフローチャートである。
【図６】図１に示した版数管理システムにおける新規保存動作を説明するフローチャートである。
【図７】図１に示した版数管理システムにおける編集用抽出動作を説明するフローチャートである。
【図８】図１に示した版数管理システムにおける書戻動作を説明するフローチャートである。
【図９】図１に示した版数管理システムにおける参照用抽出動作を説明するフローチャートである。
【図１０】本発明の第２の実施形態の版数管理システムの構成を示す図である。
【符号の説明】
【００９６】
１０    ユーザ端末
１１    記憶部
１２    ファイル管理部
１３    ハッシュ値計算部
１４    差分分析部
１５    インターフェイス
１６    暗号化復号化部
２０    版数管理装置
２１    記憶部
２２    ソースファイル
２３    ハッシュファイル
２４    ファイル管理部
２５    ハッシュ値計算部
２６    差分分析部
２７    インターフェイス
２８    暗号化復号化部
２９    ハッシュ用データベース
【図１】
0004877193.tif 000002
【図２】
0004877193.tif 000003
【図３】
0004877193.tif 000004
【図４】
0004877193.tif 000005
【図５】
0004877193.tif 000006
【図６】
0004877193.tif 000007
【図７】
0004877193.tif 000008
【図８】
0004877193.tif 000009
【図９】
0004877193.tif 000010
【図１０】
0004877193.tif 000011