(57)【要約】【課題】実行ファイルに特化し、ソースファイルを利用することなく、必要最小限のサイズの差分ファイルを生成することができる差分ファイル生成プログラムおよび差分ファイル配信プログラムを提供すること。【解決手段】旧版実行ファイルから新版実行ファイルを生成するための差分ファイルを生成する際に、両者の実行ファイルに同種同名の構造体が含まれている場合は、それらを構造体の内容を解釈して比較し、同意であればその構造体を差分ファイルに出力しない。このように構造体の内容を解釈して比較をおこなうことにより、ビット列としては異なるが実質的には同一の構造体を差分ファイルに出力してしまうことを回避でき、生成される差分ファイルのサイズを必要最小限に抑えることができる。【選択図】        図４
2006155375.tif 000002
【特許請求の範囲】
【請求項１】
第１の実行ファイルから第２の実行ファイルを生成するための差分ファイルを生成する差分ファイル生成プログラムであって、
前記第１の実行ファイルと前記第２の実行ファイルの内部構造を解析する構造解析手順と、
前記第１の実行ファイルを構成する構造体と、前記第２の実行ファイルを構成する構造体とを比較して同意であるか否かを判定する構造体比較手順と、
前記構造体比較手順の判定結果と、前記第１の実行ファイルと前記第２の実行ファイルにおける同種同名の構造体の存在の差異とに基づいて差分ファイルに必要な構造体情報を出力する構造体出力手順と
をコンピュータに実行させることを特徴とする差分ファイル生成プログラム。
【請求項２】
構造体と独立して実行ファイル内に存在する定数情報のうち、前記構造体出力手順により出力される構造体から参照される定数情報を差分ファイルに出力する被参照定数出力手順と、
前記構造体出力手順により出力される構造体の定数参照を前記被参照定数出力手順により出力される定数への参照へ更新する定数参照更新手順と
をさらにコンピュータに実行させることを特徴とする請求項１に記載の差分ファイル生成プログラム。
【請求項３】
ネットワークを介して接続されたクライアントに配設された第１の実行ファイルから第２の実行ファイルを生成するための差分ファイルを配信する差分ファイル配信プログラムであって、
前記クライアントもしくはシステム管理者（センタ）から差分ファイル配信のリクエストを受付けるリクエスト受付手順と、
前記第１の実行ファイルと前記第２の実行ファイルの内部構造を解析する構造解析手順と、
前記第１の実行ファイルを構成する構造体と、前記第２の実行ファイルを構成する構造体とを比較して同意であるか否かを判定する構造体比較手順と、
前記構造体比較手順の判定結果と、前記第１の実行ファイルと前記第２の実行ファイルにおける同種同名の構造体の存在の差異とに基づいて差分ファイルに必要な構造体情報を出力する構造体出力手順と、
生成された差分ファイルを前記クライアントへ送信する差分ファイル送信手順と
をコンピュータに実行させることを特徴とする差分ファイル配信プログラム。
【請求項４】
構造体と独立して実行ファイル内に存在する定数情報のうち、前記構造体出力手順により出力される構造体から参照される定数情報を差分ファイルに出力する被参照定数出力手順と、
前記構造体出力手順により出力される構造体の定数参照を前記被参照定数出力手順により出力される定数への参照へ更新する定数参照更新手順と
をさらにコンピュータに実行させることを特徴とする請求項３に記載の差分ファイル配信プログラム。
【請求項５】
差分ファイルに出力された実行コードに不正な処理が含まれていないかどうかを検査する検査手順をさらにコンピュータに実行させることを特徴とする請求項３または４に記載の差分ファイル配信プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
この発明は、第１のファイルから第２のファイルを生成するための差分ファイルを生成する差分ファイル生成プログラムおよび差分ファイル配信プログラムに関し、特に、実行ファイルに特化し、ソースファイルを利用することなく、必要最小限のサイズの差分ファイルを生成することができる差分ファイル生成プログラムおよび差分ファイル配信プログラムに関するものである。
【背景技術】
【０００２】
情報処理装置上で動作する実行ファイルを更新する場合、実行ファイルをそのまま提供せずに、現行ファイルに対する差分ファイルの形で提供することがしばしばおこなわれる。これは、実行ファイルを伝送するのに必要な通信費が高価であったり、実行ファイルを格納する媒体の容量が小さかったりするためである。
【０００３】
差分ファイルは、できるだけ小さいことが好ましいが、バイナリファイルである実行ファイルは、テキストファイルに比べて差分ファイルのサイズを小さくすることが難しいという問題がある。この問題を解決するため、特許文献１では、バイナリのビット列を比較する際のビット列のサイズや、差分ファイルへ差分データを記録する形式等を工夫することによって差分ファイルのサイズを小さくする技術が開示されている。また、特許文献２には、実行ファイルのソースファイルを手がかりとすることで、差分ファイルのサイズを小さくする技術が開示されている。
【０００４】
【特許文献１】特開２００４−１５２１３６号公報
【特許文献２】特開平１０−３３８３号公報
【発明の開示】
【発明が解決しようとする課題】
【０００５】
しかしながら、特許文献１に開示された技術は、バイナリファイル一般に適用することを意図しているため、実行ファイルに適用する場合に限定すると、必ずしも最適な方式であるとは言えない。また、特許文献２に開示された技術は、ソースファイルを利用できることを前提としているため、ライセンスの問題等によりソースファイルを取得できない場合には適用することができない。
【０００６】
この発明は、上述した従来技術による問題点を解消するためになされたものであり、実行ファイルに特化し、ソースファイルを利用することなく、必要最小限のサイズの差分ファイルを生成することができる差分ファイル生成プログラムおよび差分ファイル配信プログラムを提供することを目的とする。
【課題を解決するための手段】
【０００７】
上述した課題を解決し、目的を達成するため、本発明は、第１の実行ファイルから第２の実行ファイルを生成するための差分ファイルを生成する差分ファイル生成プログラムであって、前記第１の実行ファイルと前記第２の実行ファイルの内部構造を解析する構造解析手順と、前記第１の実行ファイルを構成する構造体と、前記第２の実行ファイルを構成する構造体とを比較して同意であるか否かを判定する構造体比較手順と、前記構造体比較手順の判定結果と、前記第１の実行ファイルと前記第２の実行ファイルにおける同種同名の構造体の存在の差異とに基づいて差分ファイルに必要な構造体情報を出力する構造体出力手順とをコンピュータに実行させることを特徴とする。
【０００８】
この発明によれば、実行ファイルの構造を理解し、実行ファイルを構成する構造体毎に内容を解釈した上で同意か否かを判定して差分ファイルを生成するように構成したので、生成される差分ファイルのサイズを必要最小限に抑えることができる。
【０００９】
また、本発明は、上記の発明において、構造体と独立して実行ファイル内に存在する定数情報のうち、前記構造体出力手順により出力される構造体から参照される定数情報を差分ファイルに出力する被参照定数出力手順と、前記構造体出力手順により出力される構造体の定数参照を前記被参照定数出力手順により出力される定数への参照へ更新する定数参照更新手順とをさらにコンピュータに実行させることを特徴とする。
【００１０】
この発明によれば、第２の実行ファイルの生成に必要な定数のみを差分ファイルに抽出し、差分ファイル内の各種構造体の定数参照を差分ファイルに出力した定数への参照に置き換えるように構成したので、各種構造体が適切な定数を参照する状態を保ちつつ、生成される差分ファイルのサイズを必要最小限に抑えることができる。
【００１１】
また、本発明は、ネットワークを介して接続されたクライアントに配設された第１の実行ファイルから第２の実行ファイルを生成するための差分ファイルを配信する差分ファイル配信プログラムであって、前記クライアントもしくはシステム管理者（センタ）から差分ファイル配信のリクエストを受付けるリクエスト受付手順と、前記第１の実行ファイルと前記第２の実行ファイルの内部構造を解析する構造解析手順と、前記第１の実行ファイルを構成する構造体と、前記第２の実行ファイルを構成する構造体とを比較して同意であるか否かを判定する構造体比較手順と、前記構造体比較手順の判定結果と、前記第１の実行ファイルと前記第２の実行ファイルにおける同種同名の構造体の存在の差異とに基づいて差分ファイルに必要な構造体情報を出力する構造体出力手順と、生成された差分ファイルを前記クライアントへ送信する差分ファイル送信手順とをコンピュータに実行させることを特徴とする。
【００１２】
この発明によれば、実行ファイルの構造を理解し、実行ファイルを構成する構造体毎に内容を解釈した上で同意か否かを判定して差分ファイルを生成するように構成したので、生成される差分ファイルのサイズを必要最小限に抑えることができる。
【００１３】
また、本発明は、上記の発明において、構造体と独立して実行ファイル内に存在する定数情報のうち、前記構造体出力手順により出力される構造体から参照される定数情報を差分ファイルに出力する被参照定数出力手順と、前記構造体出力手順により出力される構造体の定数参照を前記被参照定数出力手順により出力される定数への参照へ更新する定数参照更新手順とをさらにコンピュータに実行させることを特徴とする。
【００１４】
この発明によれば、第２の実行ファイルの生成に必要な定数のみを差分ファイルに抽出し、差分ファイル内の各種構造体の定数参照を差分ファイルに出力した定数への参照に置き換えるように構成したので、各種構造体が適切な定数を参照する状態を保ちつつ、生成される差分ファイルのサイズを必要最小限に抑えることができる。
【００１５】
また、本発明は、上記の発明において、差分ファイルに出力された実行コードに不正な処理が含まれていないかどうかを検査する検査手順をさらにコンピュータに実行させることを特徴とする。
【００１６】
この発明によれば、差分ファイルの生成時に差分ファイルに含まれる実行コードの安全性を検査するように構成したので、差分ファイルの適用により生成される実行ファイルの安全性を確保することができる。
【発明の効果】
【００１７】
本発明によれば、実行ファイルの構造を理解し、実行ファイルを構成する構造体毎に内容を解釈した上で同意か否かを判定して差分ファイルを生成するように構成したので、生成される差分ファイルのサイズを必要最小限に抑えることができるという効果を奏する。
【００１８】
また、本発明によれば、実行ファイルの生成に必要な定数のみを差分ファイルに抽出し、差分ファイル内の各種構造体の定数参照を差分ファイルに出力した定数への参照に置き換えるように構成したので、各種構造体が適切な定数を参照する状態を保ちつつ、生成される差分ファイルのサイズを必要最小限に抑えることができるという効果を奏する。
【００１９】
また、本発明によれば、差分ファイルの生成時に差分ファイルに含まれる実行コードの安全性を検査するように構成したので、差分ファイルの適用により生成される実行ファイルの安全性を確保することができるという効果を奏する。
【発明を実施するための最良の形態】
【００２０】
以下に添付図面を参照して、この発明に係る差分ファイル生成プログラムおよび差分ファイル配信プログラムの好適な実施の形態を詳細に説明する。ここでは、Ｊａｖａ（登録商標）の実行ファイルの差分ファイルを作成する場合について説明するが、この発明に係る差分ファイル生成プログラムおよび差分ファイル配信プログラムは、これ以外の形式の実行ファイルの差分ファイルを作成する場合にも適用することができる。
【実施例１】
【００２１】
本実施例では、まず、本実施例に係る差分ファイル生成方式および差分ファイル適用方式について説明し、その後、この差分ファイル生成方式および差分ファイル適用方式をカーナビ装置上で動作する実行ファイルを更新するための差分ファイル配信システムに適用した例について説明することとする。
【００２２】
本実施例に係る差分ファイル生成方式および差分ファイル適用方式の説明に入る前に、Ｊａｖａ（登録商標）の実行ファイルであるクラスファイルの構造について説明しておく。図１は、Ｊａｖａ（登録商標）のクラスファイルの構造を説明するためのサンプル図である。同図に示すように、クラスファイルは、定数プール１０と、インターフェース構造体部１１と、フィールド構造体部１２と、メソッド構造体部１３と、アトリビュート構造体部１４とからなる。
【００２３】
定数プール１０は、クラスファイル内で使用される定数を保持する。インターフェース構造体部１１は、ソースファイル中に記述されたインターフェースに関する情報を格納した０個以上の構造体からなる。同様に、フィールド構造体部１２は、フィールドに関する情報を格納した０個以上の構造体からなり、メソッド構造体部１３は、メソッドに関する情報を格納した０個以上の構造体からなる。そして、アトリビュート構造体部１４は、デバッグ情報やライセンス情報等を格納した０個以上の構造体からなる。
【００２４】
このように、クラスファイルは、ソースファイルに記述されていた構成要素毎に作成された構造体からなる。また、各構成要素に含まれていた定数は定数プールに抽出され、クラスファイル内の各種構造体が定数プールに抽出された定数を参照する構成をとる。
【００２５】
次に、本実施例に係る差分ファイル生成方式について説明する。図２−１は、本実施例に係る差分ファイル生成方式の処理手順を示すフローチャートである。ここでは、旧版のクラスファイルを新版のクラスファイルに更新するための差分ファイルを生成するという前提で処理手順を説明している。
【００２６】
同図に示すように、まず、旧版クラスファイルからまだ処理をしていない構造体を一つ選択し（ステップＳ１０１）、これと種別が同一でかつ名前が同一の構造体を新版クラスファイルから検索する（ステップＳ１０２）。たとえば、ステップＳ１０１で選択した構造体が、ｆｉｎｄという名前のメソッドのメソッド構造体であれば、新版クラスファイルから同じ名前のメソッドのメソッド構造体を検索する。
【００２７】
ここで、該当する構造体がみつからなかった場合は（ステップＳ１０３否定）、ステップＳ１０１で取得した構造体の名前と種別および削除フラグを差分ファイルに出力し（ステップＳ１０４）、ステップＳ１０８へ遷移する。
【００２８】
該当する構造体がみつかった場合は（ステップＳ１０３肯定）、２つの構造体を比較して同意であるか否かを判定する（ステップＳ１０５）。この２つの構造体が同意であるかどうかを判定する方式については後述することとする。そして、２つが同意でないと判定した場合は（ステップＳ１０６否定）、ステップＳ１０２で取得した新版クラスファイルの構造体を差分ファイルに出力し（ステップＳ１０７）、同意であると判定した場合は（ステップＳ１０６肯定）、何も出力しない。
【００２９】
ステップＳ１０１で選択した旧版クラスファイルの構造体に関する処理はこれで完了する。ここで、ステップＳ１０１で選択した旧版クラスファイルの構造体が、最後の未処理の構造体でなければ（ステップＳ１０８否定）、ステップＳ１０１に復帰して、次の未処理の構造体に関する処理をおこなう。
【００３０】
最後の未処理の構造体であった場合は（ステップＳ１０８肯定）、差分ファイルに新版クラスファイルの新規構造体を全て出力する（ステップＳ１０９）。新版クラスファイルの新規構造体とは、旧版クラスファイル内に種別が同一でかつ名前が同一の構造体が存在しない構造体、すなわち、ステップＳ１０２で一度も取得されなかった構造体である。
【００３１】
こうして、差分ファイルに必要な構造体情報をすべて出力したならば、差分ファイルに出力した構造体から参照されている定数を旧版クラスファイルの定数プールから抽出し、差分ファイルに出力する（ステップＳ１１０）。そして、差分ファイルに出力した各構造体の定数参照部分をステップＳ１１０で出力した定数を参照するように更新して差分ファイルの生成は完了する（ステップＳ１１１）。
【００３２】
なお、図２−２に示すように、ステップＳ１０４、Ｓ１０７、Ｓ１０９、Ｓ１１０およびＳ１１１での出力内容および変更内容を一時的にメモリ上のバッファに格納しておき、処理の最後にバッファの内容を一括して差分ファイルに書きこむように構成することもできる。
【００３３】
ここで、２つの構造体が同意であるか否かを判定する方式について説明する。図３は、Ｊａｖａ（登録商標）のソースファイルとクラスファイルの対応を説明するための説明図である。同図に示すように、ソースファイル中に「４」と「３０３」という２つの定数を含む式２０があったとする。このソースファイルをコンパイルすることにより、定数プール２１に、「４」という定数を含んだエントリと「３０３」という定数を含んだエントリが作成される。また、この式を実行するためのバイトコード列がメソッド構造体２２内に作成される。
【００３４】
メソッド構造体２２内に作成されたバイトコードは、定数プール２１内の定数をエントリ番号を使って参照する。しかし、このエントリ番号は、ソースファイルに新たな定数が追加されたり、コンパイラのバージョンが変わったりした場合に値が変わってしまう場合がある。
【００３５】
図４は、本実施例に係る差分ファイル生成方式における構造体比較方式について説明するための説明図である。この図は、式２０を含むソースファイルに新たなメソッドを追加してコンパイルした場合の例を示している。メソッドを追加したことにより、定数プール３２中の「４」と「３０３」という２つの定数のエントリ番号が変更され、それらを参照するメソッド構造体３４内のバイトコードのエントリ番号も変更されている。
【００３６】
このため、旧版クラスファイルのメソッド構造体３３と新版クラスファイルのメソッド構造体３４とを単純にビット単位で比較すると、この２つの構造体は内容が異なっていると判定され、メソッド構造体３４は、差分ファイルへ出力されることとなる。しかし、実際には、新版クラスファイルのソースファイルにおいてメソッド構造体３４の元となったメソッドは変更されておらず、メソッド構造体３４を差分ファイルへ出力する必要はない。
【００３７】
本実施例に係る差分ファイル生成方式では、このように不必要な構造体が差分ファイルに出力されることを避けるため、構造体の内容を解釈した上で比較をおこなう。具体的には、構造体内で定数を参照している部分については、その参照に用いられているエントリ番号を参照先の定数に読み替えて比較をおこなう。このように構造を解釈して比較をおこなうことにより、図４の場合においてもメソッド構造体３３とメソッド構造体３４とが同意であると判定され、メソッド構造体３４が差分ファイルに出力されることがなくなる。
【００３８】
このように、本実施例に係る差分ファイル生成方式は、クラスファイルを構成する構造体同士を、内容を解釈した上で比較し、ビット列としては異なっていても内容が同意である場合には構造体を差分ファイルに出力しないように構成したので、生成される差分ファイルを必要最小限のサイズにすることができる。
【００３９】
次に、本実施例に係る差分ファイル生成方式による差分ファイル生成の具体例を示す。図５は、本実施例に係る差分ファイル生成方式による差分ファイル生成の一例を示すサンプル図である。この図は、旧版クラスファイル４０を新版クラスファイル４１に更新するための差分ファイル４２を作成する場合の例を示している。
【００４０】
同図に示すように、旧版クラスファイル４０は、定数Ａと、定数Ｂと、定数Ｃとを定数プールに保持し、フィールド構造体Ａとフィールド構造体Ｂという２つのフィールド構造体と、メソッド構造体Ａとメソッド構造体Ｂという２つのメソッド構造体とを有している。そして、メソッド構造体Ｂ内のバイトコード列Ｂは、定数プール内の定数Ｂと定数Ｃとを参照している。
【００４１】
新版クラスファイル４１は、旧版クラスファイル４０と比較すると、定数プール内の定数Ａおよび定数Ｂに変更はなく、定数Ｃが削除され、定数Ｄが新たに追加されている。フィールド構造体Ａには変更がなく、フィールド構造体Ｂが削除され、フィールド構造体Ｃが新たに追加されている。また、メソッド構造体Ａは旧版クラスファイル４０のメソッド構造体Ａと同意であり、メソッド構造体Ｂはメソッド名に変更はないがバイトコード列が変更されており、定数プール内の定数Ｂと定数Ｄとを参照するようになっている。
【００４２】
この２つのクラスファイルから差分ファイルを生成すると、フィールド構造体Ａは、変更されていないため、差分ファイルには出力されない。フィールド構造体Ｂは、削除されているため、構造体名と削除フラグが出力される。フィールド構造体Ｃは、新規に追加されているため、構造体がそのまま出力される。メソッド構造体Ａは、同意であるため、差分ファイルには出力されない。メソッド構造体Ｂは、変更されているため、構造体がそのまま出力される。
【００４３】
また、定数プール内の定数は、各種構造体から参照されているもの、すなわち、この例では、メソッド構造体Ｂから参照されている定数Ｂと定数Ｄとが差分ファイルに出力される。そして、差分ファイル内のメソッド構造体Ｂは、差分ファイルの定数プールの定数Ｂと定数Ｄとを参照するように更新される。
【００４４】
ところで、本実施例に係る差分ファイル生成方式では、差分ファイルに出力された構造体から参照されている定数を全て差分ファイルに出力することとしているため、不要な定数が差分ファイルに出力されてしまうことがある。図５に示した例では、定数Ｂがこれに当たる。定数Ｂは、旧版クラスファイル４０中に存在しているため、本来は差分ファイルに出力する必然性はないが、メソッド構造体Ｂ内のバイトコード列Ｂ’が参照している定数を示すために差分ファイルに出力されている。
【００４５】
このように不要な定数が差分ファイルに出力されることを避け、差分ファイルのサイズをさらに小さくすることもできる。図６は、差分ファイルのサイズをさらに小さくする場合の一例を示すサンプル図である。この図は、旧版クラスファイル４０を新版クラスファイル４１に更新するための差分ファイル４３を作成する場合の例を示している。旧版クラスファイル４０と新版クラスファイル４１は、図５と同一のファイルである。
【００４６】
この図の例では、定数Ｂは、差分ファイル４３に出力されない。そのかわり、差分ファイル４３に出力された定数プール内に旧版ファイル中の定数Ｂを参照するための情報が格納される。この方式では、文字列定数のようなサイズの大きな定数が差分ファイルに出力されるのを避けられるため、図５に示した方式よりも差分ファイルのサイズを小さくすることができる。ただし、この方式では、事前にクライアント側にある旧版ファイルの定数配置を正しく把握しておく必要がある。
【００４７】
また、本実施例に係る差分ファイル生成方式においては、メソッド構造体のバイトコード列に変更はないが、バイトコード列から参照される定数が変更されている場合にも、差分ファイルに当該のメソッド構造体が出力されることになる。このような場合には、メソッド構造体を出力する代わりに、定数プール内の定数を追加するもしくは置き換えるための情報を差分ファイルに出力するように構成し、差分ファイルのサイズが大きくなることを避けるようにしてもよい。
【００４８】
次に、本実施例に係る差分ファイル適用方式について説明する。図７−１は、本実施例に係る差分ファイル適用方式の処理手順を示すフローチャートである。ここでは、旧版のクラスファイルに差分ファイルを適用して新版のクラスファイルを生成するという前提で処理手順を説明している。
【００４９】
同図に示すように、まず、旧版クラスファイルからまだ処理をしていない構造体を一つ選択し（ステップＳ２０１）、これと種別が同一でかつ名前が同一の構造体を差分ファイルから検索する（ステップＳ２０２）。たとえば、ステップＳ２０１で選択した構造体が、ｆｉｎｄという名前のメソッドのメソッド構造体であれば、差分ファイルから同じ名前のメソッドのメソッド構造体を検索する。
【００５０】
ここで、該当する構造体がみつからなかった場合は（ステップＳ２０３否定）、ステップＳ２０１で取得した構造体を新版クラスファイルに出力し（ステップＳ２０４）、ステップＳ２０８へ遷移する。
【００５１】
該当する構造体がみつかった場合は（ステップＳ２０３肯定）、その構造体に削除フラグが設定されているか否かを判定する（ステップＳ２０５）。そして、削除フラグが設定されていない場合は（ステップＳ２０６否定）、ステップＳ２０２で取得した差分ファイルの構造体を新版クラスファイルに出力し（ステップＳ２０７）、削除フラグが設定されている場合は（ステップＳ２０６肯定）、何も出力しない。
【００５２】
ステップＳ２０１で選択した旧版クラスファイルの構造体に関する処理はこれで完了する。ここで、ステップＳ２０１で選択した旧版クラスファイルの構造体が、最後の未処理の構造体でなければ（ステップＳ２０８否定）、ステップＳ２０１に復帰して、次の未処理の構造体に関する処理をおこなう。
【００５３】
最後の未処理の構造体であった場合は（ステップＳ２０８肯定）、新版クラスファイルに差分ファイルの新規構造体を全て出力する（ステップＳ２０９）。差分ファイルの新規構造体とは、旧版クラスファイル内に種別が同一でかつ名前が同一の構造体が存在しない構造体、すなわち、ステップＳ２０２で一度も取得されなかった構造体である。
【００５４】
こうして、新版クラスファイルに必要な構造体情報をすべて出力したならば、新版クラスファイルに旧版クラスファイルの定数プールを出力し（ステップＳ２１０）、さらに、旧版クラスファイルの定数プールに含まれず差分ファイルの定数プールのみに含まれる定数を新版クラスファイルの定数プールに追加する（ステップＳ２１１）。そして、新版ファイルに出力した各構造体の定数参照部分をステップＳ２１０とステップＳ２１１で出力した定数を参照するように更新して新版クラスファイルの生成は完了する（ステップＳ２１２）。
【００５５】
なお、図７−２に示すように、ステップＳ２０４、Ｓ２０７、Ｓ２０９、Ｓ２１０およびＳ２１１での出力内容および変更内容を一時的にメモリ上のバッファに格納しておき、処理の最後にバッファの内容を一括して新版ファイルに書きこむように構成することもできる。
【００５６】
次に、本実施例に係る差分ファイル適用方式による差分ファイル適用の具体例を示す。図８は、本実施例に係る差分ファイル適用方式による差分ファイル適用の一例を示すサンプル図である。この図は、旧版クラスファイル４０に差分ファイル４２を適用して新版クラスファイル４４を作成する場合の例を示している。
【００５７】
同図に示すように、旧版クラスファイル４０は、定数Ａと、定数Ｂと、定数Ｃとを定数プールに保持し、フィールド構造体Ａとフィールド構造体Ｂという２つのフィールド構造体と、メソッド構造体Ａとメソッド構造体Ｂという２つのメソッド構造体とを有している。そして、メソッド構造体Ｂ内のバイトコード列Ｂは、定数プール内の定数Ｂと定数Ｃとを参照している。この旧版クラスファイル４０は、図５で示したものと同じものである。
【００５８】
差分ファイル４２は、定数Ｂと、定数Ｄとを定数プールに保持し、フィールド構造体Ｂとフィールド構造体Ｃという２つのフィールド構造体と、メソッド構造体Ｂというメソッド構造体とを有している。そしてフィールド構造体Ｂには削除フラグが設定されており、メソッド構造体Ｂ内のバイトコード列Ｂ’は、定数プール内の定数Ｂと定数Ｄとを参照している。この差分ファイル４２は、図５で示したものと同じものである。
【００５９】
旧版クラスファイル４０に差分ファイル４２を適用すると、フィールド構造体Ａは、差分ファイル４２に存在しないため、新版クラスファイル４４に出力される。フィールド構造体Ｂは、差分ファイル４２に削除フラグが設定されているため、出力されない。フィールド構造体Ｃは、差分ファイル４２のみに存在する新規構造体のため、新版クラスファイル４４に出力される。メソッド構造体Ａは、差分ファイル４２に存在しないため、新版クラスファイル４４に出力される。そして、メソッド構造体Ｂは、旧版クラスファイル４０と差分ファイル４２の両方に存在するため、差分ファイル４２のものが出力される。
【００６０】
また、定数プール内の定数は、旧版クラスファイル４０内に含まれる定数Ａと、定数Ｂと、定数Ｃとが新版クラスファイル４４の定数プールに出力される。さらに、差分ファイル４２に含まれ、旧版クラスファイル４０に含まれない定数、すなわち、この例では定数Ｄが新版クラスファイル４４の定数プールに出力される。そして、新版クラスファイル４４内のメソッド構造体Ｂは、クラスファイル内の定数プールの定数Ｂと定数Ｄとを参照するように更新される。
【００６１】
このようにして生成された新版クラスファイル４４は、図５で示した新版クラスファイル４１と同じ要素と機能を有したものとなる。
【００６２】
なお、本実施例に係る差分ファイル適用方式では、図８に示した定数Ｃのように当初の新版クラスファイルに含まれていなかった定数が差分ファイル適用後のクラスファイルに含まれてしまうことがある。これは、処理を単純化するために、図７−１および図７−２のステップ２１０で、旧版クラスファイルの定数プールの内容をそのまま出力しているためである。差分ファイル適用後のクラスファイルのサイズを小さくしたい場合は、新版クラスファイルに必要な定数のみが出力されるようにしてもよい。
【００６３】
次に、本実施例に係る差分ファイル生成方式をカーナビ上で動作する実行ファイルを更新するための差分ファイル配信システムに適用した例について説明することとする。図９は、本実施例に係る差分ファイル生成方式を利用した差分ファイル配信システムの一例を示すサンプル図である。
【００６４】
ソフトウェア配信センタ１００ａに設置された差分ファイル配信装置３００は、通信装置２００ａを介して無線通信をおこなって、実行ファイルを更新するための差分ファイルをカーナビ装置４００へ配信する装置である。カーナビ装置４００は、Ｊａｖａ（登録商標）で作成された実行ファイルを稼動させてドライバの誘導をおこなう装置である。図示は省略しているが、カーナビ装置４００は、差分ファイル適用装置５００を内蔵する。
【００６５】
カーナビ装置４００で動作するＪａｖａ（登録商標）の実行ファイルに不具合が発生した場合、差分ファイル配信装置３００からカーナビ装置４００に更新用の差分ファイルを配信する必要があるが、無線通信は通信費が高価であるため、差分ファイルのサイズを必要最小限に抑える必要がある。
【００６６】
この差分ファイル配信システムの動作の概略は以下の通りである。カーナビ装置４００で動作している実行ファイルに不具合があることをメーカからの通知等によって知ったドライバは、カーナビ装置４００に対して実行ファイルを更新するように指示する。指示を受けたカーナビ装置４００は、自身が搭載している実行ファイルのバージョンをソフトウェア配信センタ１００ａに通知して、更新に必要な差分ファイルを配信するように要求する（ステップＳ１００１）。
【００６７】
要求を受けたソフトウェア配信センタ１００ａでは、差分ファイル配信装置３００が指定されたバージョンの旧版実行ファイルと最新版の実行ファイルとの差分ファイルを生成し（ステップＳ１００２）、生成した差分ファイルを、通信装置２００ａを介してカーナビ装置４００へ配信する（ステップＳ１００３）。配信を受けたカーナビ装置４００が、差分ファイルを自身に搭載された実行ファイルに適用して最新化して一連の処理が完了する（ステップＳ１００４）。
【００６８】
この過程の中のステップＳ１００２において上述した差分ファイル生成方式が利用され、ステップＳ１００４において上述した差分ファイル適用方式が利用される。
【００６９】
次に、図９に示した差分ファイル配信装置３００の構成について説明する。図１０−１は、図９に示した差分ファイル配信装置３００の構成を示す機能ブロック図である。同図に示すように、差分ファイル配信装置３００は、制御部３１０と、記憶部３２０とを有する。
【００７０】
制御部３１０は、差分ファイル配信装置３００を全体制御する制御部であり、リクエスト受付部３１１と、差分ファイル送信部３１２と、差分ファイル生成部３１３とを有する。リクエスト受付部３１１は、差分ファイル配信の要求を受付け、必要であれば、差分ファイル生成部３１３に差分ファイルの生成を指示する処理部である。差分ファイル送信部３１２は、差分ファイル生成部３１３が生成した差分ファイルを圧縮し、通信装置２００ａを介して要求元へ送信する処理部である。
【００７１】
差分ファイル生成部３１３は、上述した差分ファイル生成方式に基づいて差分ファイルの生成をおこなう処理部であり、クラス構造解析部３１３ａと、構造体比較部３１３ｂと、構造体出力部３１３ｃと、新規構造体抽出部３１３ｄと、被参照定数出力部３１３ｅと、定数参照更新部３１３ｆとを有する。
【００７２】
クラス構造解析部３１３ａは、指定されたバージョンのクラスファイルと最新版のクラスファイルの構造を解析し、定数プールと各種構造体に分割可能にする処理部であり、図２−１および図２−２に示したフローチャートにおけるステップＳ１０１およびステップＳ１０２において利用される。構造体比較部３１３ｂは、同一種別かつ同一名の構造体を比較して同意であるか否かを判定する処理部であり、ステップＳ１０５において利用される。
【００７３】
構造体出力部３１３ｃは、差分ファイルに構造体もしくは削除フラグを含んだ構造体情報を出力する処理部であり、ステップＳ１０４、ステップＳ１０７およびステップＳ１０９において利用される。新規構造体抽出部３１３ｄは、最新版のクラスファイルのみに含まれる構造体を抽出する処理部であり、ステップＳ１０９において利用される。
【００７４】
被参照定数出力部３１３ｅは、差分ファイルに出力した構造体から参照される定数を差分ファイルへ出力する処理部であり、ステップＳ１１０において利用される。そして、定数参照更新部３１３ｆは、差分ファイルに出力した構造体の定数参照部分を更新して、被参照定数出力部３１３ｅが出力した定数を参照するようにさせる処理部であり、ステップＳ１１１において利用される。
【００７５】
記憶部３２０は、各種情報を記憶する記憶部であり、最新ファイル記憶部３２１と旧版ファイル記憶部３２２とを有する。最新ファイル記憶部３２１は、各実行ファイルの最新版を記憶する記憶部であり、旧版ファイル記憶部３２２は、各実行ファイルの旧版ファイルを全て記憶する記憶部である。
【００７６】
なお、図２−２に示したように、出力内容および変更内容をメモリ上のバッファに一時的に格納しておく方式をとる場合には、一時記憶のためのバッファと、バッファの内容を書き出す処理部とが必要になる。図１０−２は、図９に示した差分ファイル配信装置３００のバッファを使用する場合の構成を示す機能ブロック図である。同図に示すように、バッファを使用する場合には、制御部３１０に差分ファイル出力部３１３ｇが追加され、記憶部３２０に差分バッファ３２３が追加された構成となる。
【００７７】
差分ファイル出力部３１３ｇは、差分バッファ３２３に格納された内容を差分ファイルに出力する処理部であり、図２−２のステップＳ１１２において利用される。差分バッファ３２３は、差分ファイルへ出力する内容を一時記憶する記憶部である。
【００７８】
次に、図９に示したカーナビ装置４００に含まれ、配信された差分ファイルを適用して新版の実行ファイルを生成する装置である差分ファイル適用装置５００の構成について説明する。図１１−１は、図９に示したカーナビ装置４００に含まれる差分ファイル適用装置５００の構成を示す機能ブロック図である。同図に示すように、差分ファイル適用装置５００は、制御部５１０と、記憶部５２０とを有する。
【００７９】
制御部５１０は、差分ファイル適用装置５００を全体制御する制御部であり、リクエスト送信部５１１と、差分ファイル受信部５１２と、差分ファイル適用部５１３とを有する。リクエスト送信部５１１は、ソフトウェア配信センタ１００ａに対して現行の実行ファイルのバージョンを通知し、差分ファイル配信の要求をおこなう処理部である。差分ファイル受信部５１２は、ソフトウェア配信センタ１００ａから配信された差分ファイルを受信して伸張し、差分ファイル適用部５１３に対して適用を指示する処理部である。
【００８０】
差分ファイル適用部５１３は、上述した差分ファイル適用方式に基づいて差分ファイルの適用をおこなう処理部であり、クラス構造解析部５１３ａと、構造体出力部５１３ｂと、新規構造体抽出部５１３ｃと、差分定数出力部５１３ｄと、定数参照更新部５１３ｅとを有する。
【００８１】
クラス構造解析部５１３ａは、差分ファイルと現行のクラスファイルの構造を解析し、定数プールと各種構造体に分割可能にする処理部であり、図７−１および図７−２に示したフローチャートにおけるステップＳ２０１およびステップＳ２０２において利用される。構造体出力部５１３ｂは、生成するクラスファイルに構造体を出力する処理部であり、ステップＳ２０４、ステップＳ２０７およびステップＳ２０９において利用される。
【００８２】
新規構造体抽出部５１３ｃは、差分ファイルのみに含まれる構造体を抽出する処理部であり、ステップＳ２０９において利用される。差分定数出力部５１３ｄは、差分ファイルのみに含まれる定数を、生成するクラスファイルへ出力する処理部であり、ステップＳ２１１において利用される。そして、定数参照更新部５１３ｅは、生成するクラスファイルに出力した構造体の定数参照部分を更新して、生成するクラスファイル内の定数を参照するようにさせる処理部であり、ステップＳ２１２において利用される。
【００８３】
記憶部５２０は、各種情報を記憶する記憶部であり、現行ファイル記憶部５２１と差分ファイル記憶部５２２とを有する。現行ファイル記憶部５２１は、各実行ファイルの現行版を記憶する記憶部であり、差分ファイル記憶部５２２は、差分ファイル受信部５１２が受信した差分ファイルを一時記憶する記憶部である。
【００８４】
なお、図７−２に示したように、出力内容および変更内容をメモリ上のバッファに一時的に格納しておく方式をとる場合には、一時記憶のためのバッファと、バッファの内容を書き出す処理部とが必要になる。図１１−２は、図９に示したカーナビ装置４００に含まれる差分ファイル適用装置５００のバッファを使用する場合の構成を示す機能ブロック図である。同図に示すように、バッファを使用する場合には、制御部５１０に生成ファイル出力部５１３ｆが追加され、記憶部５２０に生成ファイルバッファ５２３が追加された構成となる。
【００８５】
生成ファイル出力部５１３ｆは、生成ファイルバッファ５２３に格納された内容を生成するクラスファイルに出力する処理部であり、図７−２のステップＳ２１３において利用される。生成ファイルバッファ５２３は、生成するクラスファイルへ出力する内容を一時記憶する記憶部である。
【００８６】
次に、図９に示した差分ファイル配信装置３００と差分ファイル適用装置５００の処理手順について説明する。図１２は、図９に示した差分ファイル配信装置３００と差分ファイル適用装置５００の処理手順を示すフローチャートである。
【００８７】
差分ファイル適用装置５００が差分ファイル配信装置３００に対して更新を希望する実行ファイルのバージョン情報を送信して差分ファイルの配信を要求すると（ステップＳ３０１）、差分ファイル配信装置３００は、それを受信し（ステップＳ４０１）、当該の実行ファイルの最新版のバージョンを取得する（ステップＳ４０２）。
【００８８】
そして、ステップＳ４０１で取得したバージョンとステップＳ４０２で取得したバージョンとを比較し、同一であれば（ステップＳ４０３肯定）、差分ファイル適用装置５００に対して実行ファイルが既に最新版に更新済みである旨を応答する（ステップＳ４０４）。
【００８９】
バージョンが異なる場合は（ステップＳ４０３否定）、図２−１もしくは図２−２のフローチャートで示した手順によって差分ファイルを生成し（ステップＳ４０５）、生成した差分ファイルを差分ファイル適用装置５００に送信する（ステップＳ４０６）。送信が完了したならば、差分ファイルは削除する（ステップＳ４０７）。
【００９０】
差分ファイル配信装置３００に対して差分ファイルを要求した差分ファイル適用装置５００は、実行ファイルが既に最新版である旨の通知もしくは生成された差分ファイルを受信する（ステップＳ３０２）。実行ファイルが既に最新版である旨の通知を受信した場合は（ステップＳ３０３否定）、実行ファイルの更新は不要であるので処理を終了する。
【００９１】
差分ファイルを受信した場合は（ステップＳ３０３肯定）、図７−１もしくは図７−２のフローチャートで示した手順により現行の実行ファイルに差分ファイルを適用して最新版の実行ファイルを生成する（ステップＳ３０４）。適用が完了したならば、差分ファイルは削除する（ステップＳ３０５）。
【００９２】
上記実施例で説明した各種の処理は、あらかじめ用意されたプログラムをコンピュータで実行することによって実現することができる。そこで、以下では、図１３を用いて、本実施例に係る差分ファイル配信システムを実現するためのプログラムを実行するコンピュータの一例を説明する。
【００９３】
図１３は、差分ファイル配信プログラムを実行するコンピュータを示す機能ブロック図である。このコンピュータ１０００は、ユーザからのデータの入力を受付ける入力装置１０１０、モニタ１０２０、各種プログラムを記録した記録媒体からプログラムを読み取る媒体読取り装置１０３０、各種情報を一時記憶するＲＡＭ（Random Access Memory）１０４０、ネットワークを介して他のコンピュータとの間でデータの授受をおこなうネットワークインターフェース１０５０、ＨＤＤ（Hard Disk Drive）１０６０およびＣＰＵ１０７０をバス１０８０で接続して構成される。
【００９４】
ＨＤＤ１０６０には、差分ファイル配信装置３００の機能と同様の機能を発揮するプログラムである差分ファイル配信プログラム１０６０ｃが記憶されている。そして、ＣＰＵ１０７０が、差分ファイル配信プログラム１０６０ｃをＨＤＤ１０６０から読み出して実行することにより、同プログラムは、差分ファイル配信プロセス１０７０ａとして機能するようになる。差分ファイル配信プロセス１０７０ａは、図１０−１および図１０−２に示した制御部３１０に対応する。
【００９５】
また、ＣＰＵ１０７０は、ＨＤＤ１０６０の最新ファイル格納領域１０６０ａと旧版ファイル格納領域１０６０ｂとから必要なファイルを読み出して、ＲＡＭ１０４０に最新ファイルデータ１０４０ａと旧版ファイルデータ１０４０ｂとして格納し、ＲＡＭ１０４０に格納された最新ファイルデータ１０４０ａと旧版ファイルデータ１０４０ｂに基づいて各種データ処理を実行する。
【００９６】
なお、上記の差分ファイル配信プログラム１０６０ｃについては、必ずしもＨＤＤ１０６０に格納されている必要はなく、ＣＤ−ＲＯＭ等の記憶媒体に記憶されたプログラムを、コンピュータ１０００が読み出して実行するようにしてもよい。また、公衆回線、インターネット、ＬＡＮ、ＷＡＮ等を介してコンピュータ１０００に接続される他のコンピュータ（またはサーバ）などにプログラムを記憶させておき、コンピュータ１０００がこれらからプログラムを読み出して実行するようにしてもよい。
【００９７】
また、最新ファイルデータ１０４０ａと旧版ファイルデータ１０４０ｂについても、必ずしもＨＤＤ１０６０の最新ファイル格納領域１０６０ａと旧版ファイル格納領域１０６０ｂから読み出される必要はなく、ＣＤ−ＲＯＭ等の記憶媒体に記憶されたファイルデータを、コンピュータ１０００が読み出してＲＡＭ１０４０に格納するようにしてもよい。また、公衆回線、インターネット、ＬＡＮ、ＷＡＮ等を介してコンピュータ１０００に接続される他のコンピュータ（またはサーバ）などにファイルデータを記憶させておき、コンピュータ１０００がこれらからファイルデータを読み出してＲＡＭ１０４０に格納するようにしてもよい。
【００９８】
上述してきたように、本実施例１では、実行ファイルの構造を理解し、実行ファイルを構成する構造体毎に内容を解釈した上で同意か否かを判定して差分ファイルを生成するように構成したので、生成される差分ファイルのサイズを必要最小限に抑えることができる。
【００９９】
なお、本実施例においては、差分ファイル配信装置３００が差分ファイルを送信した後、当該の差分ファイルを削除するように構成したが、これを削除せずに保存し、次回同じ組み合わせの実行ファイルの差分ファイルが必要になった場合に差分ファイルの生成をおこなわずに、この保存しておいた差分ファイルを応答するように構成してもよい。このような構成とすることにより、記憶部の容量が増大するが、処理負荷は軽減される。
【０１００】
あるいは、必要とされる差分ファイルを事前に作成しておき、差分ファイルを要求されたならば、この作成済みの差分ファイルを応答するように構成してもよい。この場合も、記憶部の容量が増大するが、処理負荷は軽減される。
【０１０１】
また、本実施例においては、差分ファイルを生成する際に、同意でないと判断された同種同名の構造体をそのままの形で出力するように構成したが、特許文献１によって開示されているような従来のバイナリ差分抽出方式を組み合わせて、構造体の差分部分のみを出力するように構成することにより、生成される差分ファイルのサイズをさらに小さくすることもできる。この場合、差分ファイルの適用をおこなう場合に、従来のバイナリ差分適用方式を用いて構造体の単位で差分適用をおこなうことが必要となる。
【０１０２】
また、本実施例では、本実施例に係る差分ファイル生成方式および差分ファイル適用方式をカーナビ装置上で動作する実行ファイルの差分ファイルを配信する差分ファイル配信システムに適用した例を説明したが、本実施例に係る差分ファイル生成方式および差分ファイル適用方式は、実行ファイルの差分ファイルの配布に係る様々な用途に利用することができる。
【実施例２】
【０１０３】
実施例２では、カーナビ装置ではなく、携帯電話上で動作するＪａｖａ（登録商標）の実行ファイルを更新するための差分ファイル配信システムについて説明することとする。
【０１０４】
ここで想定している差分ファイル配信システムは、企業が開発したプログラムのみならず、趣味でプログラミングをおこなう、いわゆるサンデープログラマのような個人が作成したプログラムの差分ファイルも配信するものである。このため、実施例１の差分ファイル配信システムと比べて、管理する実行ファイルの数がはるかに多いという特徴がある。
【０１０５】
実行ファイルの数が多くなると、実施例１で説明した差分ファイル配信システムのように旧版の実行ファイルの全てのバージョンを差分ファイル配信装置に保持することが容量の問題から困難になる。また、個人が作成した実行ファイルを配信することから、配信した差分ファイルに含まれる不具合によって携帯電話に障害が発生する可能性が高くなる。
【０１０６】
この２つの問題を解決するため、本実施例に係る差分ファイル配信システムにおいては、全てのバージョンの旧版の実行ファイルではなく、原版の実行ファイルと隣接する各バージョン間の差分ファイルを保持する方式をとる。また、配信する差分ファイルに含まれるバイトコードの安全性を確認するための機構を備える。
【０１０７】
図１４は、本実施例に係る差分ファイル配信システムの一例を示すサンプル図である。ソフトウェア配信センタ１００ｂに設置された差分ファイル配信装置６００は、通信装置２００ｂを介して携帯電話回線を利用した無線通信をおこなって、実行ファイルを更新するための差分ファイルを携帯電話７００へ配信する装置である。携帯電話７００は、Ｊａｖａ（登録商標）で作成された実行ファイルを実行する機能を有した携帯電話である。図示は省略しているが、携帯電話７００は、差分ファイル適用装置を内蔵する。
【０１０８】
携帯電話７００で動作するＪａｖａ（登録商標）の実行ファイルが機能追加や不具合改修のためにバージョンアップした場合、差分ファイル配信装置６００から携帯電話７００に更新用の差分ファイルを配信する必要があるが、携帯電話回線を利用した無線通信は通信費が高価であるため、差分ファイルのサイズを必要最小限に抑える必要がある。
【０１０９】
この差分ファイル配信システムの動作の概略は以下の通りである。携帯電話７００に搭載されている実行ファイルのバージョンアップを知った利用者は、携帯電話７００に対して実行ファイルを更新するように指示する。指示を受けた携帯電話７００は、自身が搭載している実行ファイルのバージョンをソフトウェア配信センタ１００ｂに通知して、更新に必要な差分ファイルを配信するように要求する（ステップＳ１１０１）。
【０１１０】
要求を受けたソフトウェア配信センタ１００ｂでは、差分ファイル配信装置６００が原版の実行ファイルと差分ファイルから指定されたバージョンの実行ファイルを生成する（ステップＳ１１０２）。そして、生成した実行ファイルと最新版の実行ファイルとの差分ファイルを生成してその安全性を確認し（ステップＳ１１０３）、生成した差分ファイルを、通信装置２００ｂを介して携帯電話７００へ配信する（ステップＳ１１０４）。配信を受けた携帯電話７００が、差分ファイルを自身に搭載された実行ファイルに適用して最新化して一連の処理が完了する（ステップＳ１１０５）。
【０１１１】
この過程の中のステップＳ１１０３において実施例１で説明した差分ファイル生成方式が利用され、ステップＳ１１０２およびステップＳ１１０５において実施例１で説明した差分ファイル適用方式が利用される。
【０１１２】
次に、図１４に示した差分ファイル配信装置６００の構成について説明する。図１５は、図１４に示した差分ファイル配信装置６００の構成を示す機能ブロック図である。同図に示すように、差分ファイル配信装置６００は、制御部６１０と、記憶部６２０とを有する。
【０１１３】
制御部６１０は、差分ファイル配信装置６００を全体制御する制御部であり、リクエスト受付部６１１と、差分ファイル適用部６１２と、差分ファイル生成部６１３と、セキュリティ検査部６１４と、差分ファイル送信部６１５とを有する。リクエスト受付部６１１は、差分ファイル配信の要求を受付ける処理部である。
【０１１４】
差分ファイル適用部６１２は、差分ファイル適用部５１３と同様の構成を有し、原版の実行ファイルと差分ファイルから指定されたバージョンの実行ファイルを生成する処理部である。差分ファイル生成部６１３は、差分ファイル生成部３１３と同様の構成を有し、最新版の実行ファイルと差分ファイル適用部６１２が生成した実行ファイルの差分ファイルを生成する処理部である。
【０１１５】
セキュリティ検査部６１４は、生成された差分ファイルを検査し、不正な処理をおこなうバイトコード列があれば差分ファイルの配信を中止させる処理部である。差分ファイル送信部６１５は、生成された差分ファイルを要求元に送信する処理部である。なお、セキュリティ検査部６１４がおこなう検査の内容は、本発明では特定しないものとする。
【０１１６】
記憶部６２０は、各種情報を記憶する記憶部であり、最新ファイル記憶部６２１と原版ファイル記憶部６２２と、差分ファイル記憶部６２３とを有する。最新ファイル記憶部６２１は、各実行ファイルの最新版を記憶する記憶部であり、原版ファイル記憶部６２２は、各実行ファイルの原版ファイルを記憶する記憶部であり、差分ファイル記憶部６２３は、隣接する各バージョン間の差分ファイルを記憶する記憶部である。
【０１１７】
たとえば、ある実行ファイルの当初のバージョンが１．０であり、３回のバージョンアップでバージョンが１．３になっている場合、最新ファイル記憶部６２１にはバージョンが１．３の実行ファイルが記憶され、原版ファイル記憶部６２２にはバージョンが１．０の実行ファイルが記憶される。
【０１１８】
そして、差分ファイル記憶部６２３には、バージョン１．０の実行ファイルとバージョン１．１の実行ファイルの差分ファイルと、バージョン１．１の実行ファイルとバージョン１．２の実行ファイルの差分ファイルと、バージョン１．２の実行ファイルとバージョン１．３の実行ファイルの差分ファイルという３種類の差分ファイルが記憶される。
【０１１９】
この場合、バージョン１．１と１．２の実行ファイルを差分ファイル配信装置６００内に記憶しておく必要がなく、代わりにサイズの小さい差分ファイルを３つ保存しておくだけでよい。このように本実施例にかかる差分ファイル配信システムにおいては、差分ファイル配信装置に必要な記憶容量を小さくすることができる。
【０１２０】
携帯電話７００に含まれる差分ファイル適用装置は、図１１−１もしくは図１１−２の差分ファイル適用装置５００と同様の構成になるので、ここでは説明を省略する。
【０１２１】
次に、図１５に示した差分ファイル配信装置６００の処理手順について説明する。図１６は、図１５に示した差分ファイル配信装置６００の処理手順を示すフローチャートである。
【０１２２】
差分ファイル配信装置３００は、携帯電話７００から実行ファイルの差分ファイルの送信要求を受信したならば（ステップＳ５０１）、当該の実行ファイルの最新版のバージョンを取得する（ステップＳ５０２）。
【０１２３】
そして、ステップＳ５０１で取得したバージョンとステップＳ５０２で取得したバージョンとを比較し、同一であれば（ステップＳ５０３肯定）、携帯電話７００に対して実行ファイルが既に最新版に更新済みである旨を応答する（ステップＳ５０４）。
【０１２４】
バージョンが異なる場合は（ステップＳ５０３否定）、原版の実行ファイルを取得し（ステップＳ５０５）、図７のフローチャートで示した手順によって差分ファイルを適用してバージョンが一つだけ上った実行ファイルを生成する（ステップＳ５０６）。こうして生成した実行ファイルのバージョンがステップＳ５０１で取得したバージョンと同一でない場合は（ステップＳ５０７否定）、ステップＳ５０６に戻って差分ファイルの適用を再度おこなってバージョンをもうひとつ上げる。
【０１２５】
生成した実行ファイルのバージョンがステップＳ５０１で取得したバージョンと同一の場合は（ステップＳ５０７肯定）、図２−１もしくは図２−２のフローチャートで示した手順によって差分ファイルを生成し（ステップＳ５０８）、差分ファイルのセキュリティ検査をおこなう（ステップＳ５０９）。そして、生成した差分ファイルを差分ファイル携帯電話７００に送信し（ステップＳ５１０）、送信が完了したならば、差分ファイルを削除する（ステップＳ５１１）。
【０１２６】
上述してきたように、本実施例２では、旧版の実行ファイルを保持せず、必要最小限の差分ファイルを保持して必要に応じて旧版の実行ファイルを動的に生成するように構成したので、差分ファイル配信システムのサーバ装置に必要とされる記憶容量を小さくすることができる。
【０１２７】
なお、本実施例では最新版へ更新する場合について説明したが、本実施例に係る差分ファイル生成方式、差分ファイル適用方式および差分ファイル配信方式では、任意の版への更新を同様の手順でおこなうことができる。
【０１２８】
（付記１）第１の実行ファイルから第２の実行ファイルを生成するための差分ファイルを生成する差分ファイル生成プログラムであって、
前記第１の実行ファイルと前記第２の実行ファイルの内部構造を解析する構造解析手順と、
前記第１の実行ファイルを構成する構造体と、前記第２の実行ファイルを構成する構造体とを比較して同意であるか否かを判定する構造体比較手順と、
前記構造体比較手順の判定結果と、前記第１の実行ファイルと前記第２の実行ファイルにおける同種同名の構造体の存在の差異とに基づいて差分ファイルに必要な構造体情報を出力する構造体出力手順と
をコンピュータに実行させることを特徴とする差分ファイル生成プログラム。
【０１２９】
（付記２）構造体と独立して実行ファイル内に存在する定数情報のうち、前記構造体出力手順により出力される構造体から参照される定数情報を差分ファイルに出力する被参照定数出力手順と、
前記構造体出力手順により出力される構造体の定数参照を前記被参照定数出力手順により出力される定数への参照へ更新する定数参照更新手順と
をさらにコンピュータに実行させることを特徴とする付記１に記載の差分ファイル生成プログラム。
【０１３０】
（付記３）第１の実行ファイルから第２の実行ファイルを生成するための差分ファイルを生成する差分ファイル生成装置であって、
前記第１の実行ファイルと前記第２の実行ファイルの内部構造を解析する構造解析手段と、
前記第１の実行ファイルを構成する構造体と、前記第２の実行ファイルを構成する構造体とを比較して同意であるか否かを判定する構造体比較手段と、
前記構造体比較手段の判定結果と、前記第１の実行ファイルと前記第２の実行ファイルにおける同種同名の構造体の存在の差異とに基づいて差分ファイルに必要な構造体情報を出力する構造体出力手段と
を備えたことを特徴とする差分ファイル生成装置。
【０１３１】
（付記４）第１の実行ファイルから第２の実行ファイルを生成するための差分ファイルを生成する差分ファイル生成方法であって、
前記第１の実行ファイルと前記第２の実行ファイルの内部構造を解析する構造解析工程と、
前記第１の実行ファイルを構成する構造体と、前記第２の実行ファイルを構成する構造体とを比較して同意であるか否かを判定する構造体比較工程と、
前記構造体比較工程の判定結果と、前記第１の実行ファイルと前記第２の実行ファイルにおける同種同名の構造体の存在の差異とに基づいて差分ファイルに必要な構造体情報を出力する構造体出力工程と
を含んだことを特徴とする差分ファイル生成方法。
【０１３２】
（付記５）第１の実行ファイルに差分ファイルを適用して第２の実行ファイルを生成する差分ファイル適用プログラムであって、
前記第１の実行ファイルと前記差分ファイルの内部構造を解析する構造解析手順と、
前記第１の実行ファイルを構成する構造体と、前記差分ファイルを構成する構造体とを比較して前記第２の実行ファイルを生成するために必要な構成体情報を出力する構造体出力手順と
をコンピュータに実行させることを特徴とする差分ファイル適用プログラム。
【０１３３】
（付記６）第１の実行ファイルに差分ファイルを適用して第２の実行ファイルを生成する差分ファイル適用装置であって、
前記第１の実行ファイルと前記差分ファイルの内部構造を解析する構造解析手段と、
前記第１の実行ファイルを構成する構造体と、前記差分ファイルを構成する構造体とを比較して前記第２の実行ファイルを生成するために必要な構成体情報を出力する構造体出力手段と
を備えたことを特徴とする差分ファイル適用装置。
【０１３４】
（付記７）第１の実行ファイルに差分ファイルを適用して第２の実行ファイルを生成する差分ファイル適用方法であって、
前記第１の実行ファイルと前記差分ファイルの内部構造を解析する構造解析手段と、
前記第１の実行ファイルを構成する構造体と、前記差分ファイルを構成する構造体とを比較して前記第２の実行ファイルを生成するために必要な構成体情報を出力する構造体出力手段と
を備えたことを特徴とする差分ファイル適用方法。
【０１３５】
（付記８）ネットワークを介して接続されたクライアントに配設された第１の実行ファイルから第２の実行ファイルを生成するための差分ファイルを配信する差分ファイル配信プログラムであって、
前記クライアントもしくはシステム管理者（センタ）から差分ファイル配信のリクエストを受付けるリクエスト受付手順と、
前記第１の実行ファイルと前記第２の実行ファイルの内部構造を解析する構造解析手順と、
前記第１の実行ファイルを構成する構造体と、前記第２の実行ファイルを構成する構造体とを比較して同意であるか否かを判定する構造体比較手順と、
前記構造体比較手順の判定結果と、前記第１の実行ファイルと前記第２の実行ファイルにおける同種同名の構造体の存在の差異とに基づいて差分ファイルに必要な構造体情報を出力する構造体出力手順と、
生成された差分ファイルを前記クライアントへ送信する差分ファイル送信手順と
をコンピュータに実行させることを特徴とする差分ファイル配信プログラム。
【０１３６】
（付記９）構造体と独立して実行ファイル内に存在する定数情報のうち、前記構造体出力手順により出力される構造体から参照される定数情報を差分ファイルに出力する被参照定数出力手順と、
前記構造体出力手順により出力される構造体の定数参照を前記被参照定数出力手順により出力される定数への参照へ更新する定数参照更新手順と
をさらにコンピュータに実行させることを特徴とする付記８に記載の差分ファイル配信プログラム。
【０１３７】
（付記１０）差分ファイルに出力された実行コードに不正な処理が含まれていないかどうかを検査する検査手順をさらにコンピュータに実行させることを特徴とする付記８または９に記載の差分ファイル配信プログラム。
【０１３８】
（付記１１）ネットワークを介して接続されたクライアントに配設された第１の実行ファイルから第２の実行ファイルを生成するための差分ファイルを配信する差分ファイル配信装置であって、
前記クライアントもしくはシステム管理者（センタ）から差分ファイル配信のリクエストを受付けるリクエスト受付手段と、
前記第１の実行ファイルと前記第２の実行ファイルの内部構造を解析する構造解析手段と、
前記第１の実行ファイルを構成する構造体と、前記第２の実行ファイルを構成する構造体とを比較して同意であるか否かを判定する構造体比較手段と、
前記構造体比較手段の判定結果と、前記第１の実行ファイルと前記第２の実行ファイルにおける同種同名の構造体の存在の差異とに基づいて差分ファイルに必要な構造体情報を出力する構造体出力手段と、
生成された差分ファイルを前記クライアントへ送信する差分ファイル送信手段と
を備えたことを特徴とする差分ファイル配信装置。
【０１３９】
（付記１２）ネットワークを介して接続されたクライアントに配設された第１の実行ファイルから第２の実行ファイルを生成するための差分ファイルを配信する差分ファイル配信方法であって、
前記クライアントもしくはシステム管理者（センタ）から差分ファイル配信のリクエストを受付けるリクエスト受付工程と、
前記第１の実行ファイルと前記第２の実行ファイルの内部構造を解析する構造解析工程と、
前記第１の実行ファイルを構成する構造体と、前記第２の実行ファイルを構成する構造体とを比較して同意であるか否かを判定する構造体比較工程と、
前記構造体比較工程の判定結果と、前記第１の実行ファイルと前記第２の実行ファイルにおける同種同名の構造体の存在の差異とに基づいて差分ファイルに必要な構造体情報を出力する構造体出力工程と、
生成された差分ファイルを前記クライアントへ送信する差分ファイル送信工程と
を含んだことを特徴とする差分ファイル配信方法。
【産業上の利用可能性】
【０１４０】
以上のように、本発明にかかる差分ファイル生成プログラムおよび差分ファイル配信プログラムは、差分ファイルの生成に有用であり、特に、実行ファイルの差分ファイルを、ソースファイルを利用することなく、必要最小限のサイズで生成することが必要な場合に適している。
【図面の簡単な説明】
【０１４１】
【図１】Ｊａｖａ（登録商標）のクラスファイルの構造を説明するためのサンプル図である。
【図２−１】本実施例に係る差分ファイル生成方式の処理手順を示すフローチャートである。
【図２−２】バッファを使用する場合の差分ファイル生成方式の処理手順を示すフローチャートである。
【図３】Ｊａｖａ（登録商標）のソースファイルとクラスファイルの対応を説明するための説明図である。
【図４】本実施例に係る差分ファイル生成方式における構造体比較方式について説明するための説明図である。
【図５】本実施例に係る差分ファイル生成方式による差分ファイル生成の一例を示すサンプル図である。
【図６】差分ファイルのサイズをさらに小さくする場合の一例を示すサンプル図である。
【図７−１】本実施例に係る差分ファイル適用方式の処理手順を示すフローチャートである。
【図７−２】バッファを使用する場合の差分ファイル適用方式の処理手順を示すフローチャートである。
【図８】本実施例に係る差分ファイル適用方式による差分ファイル適用の一例を示すサンプル図である。
【図９】本実施例に係る差分ファイル生成方式を利用した差分ファイル配信システムの一例を示すサンプル図である。
【図１０−１】図９に示した差分ファイル配信装置の構成を示す機能ブロック図である。
【図１０−２】図９に示した差分ファイル配信装置のバッファを使用する場合の構成を示す機能ブロック図である。
【図１１−１】図９に示したカーナビ装置に含まれる差分ファイル適用装置の構成を示す機能ブロック図である。
【図１１−２】図９に示したカーナビ装置に含まれる差分ファイル適用装置のバッファを使用する場合の構成を示す機能ブロック図である。
【図１２】図９に示した差分ファイル配信装置と差分ファイル適用装置の処理手順を示すフローチャートである。
【図１３】差分ファイル配信プログラムを実行するコンピュータを示す機能ブロック図である。
【図１４】本実施例に係る差分ファイル配信システムの一例を示すサンプル図である。
【図１５】図１４に示した差分ファイル配信装置の構成を示す機能ブロック図である。
【図１６】図１５に示した差分ファイル配信装置の処理手順を示すフローチャートである。
【符号の説明】
【０１４２】
１０    定数プール
１１    インターフェース構造体部
１２    フィールド構造体部
１３    メソッド構造体部
１４    アトリビュート構造体部
２０    式
２１    定数プール
２２    メソッド構造体
３１、３２    定数プール
３３、３４    メソッド構造体
３５、３６    ビット列
４０    旧版クラスファイル
４１、４４    新版クラスファイル
４２、４３    差分ファイル
１００ａ、１００ｂ    ソフトウェア配信センタ
２００ａ、２００ｂ    通信装置
３００    差分ファイル配信装置
３１０    制御部
３１１    リクエスト受付部
３１２    差分ファイル送信部
３１３    差分ファイル生成部
３１３ａ  クラス構造解析部
３１３ｂ  構造体比較部
３１３ｃ  構造体出力部
３１３ｄ  新規構造体抽出部
３１３ｅ  被参照定数出力部
３１３ｆ  定数参照更新部
３１３ｇ  差分ファイル出力部
３２０    記憶部
３２１    最新ファイル記憶部
３２２    旧版ファイル記憶部
３２３    差分バッファ
４００    カーナビ装置
５００    差分ファイル適用装置
５１０    制御部
５１１    リクエスト送信部
５１２    差分ファイル受信部
５１３    制御部
５１３ａ  クラス構造解析部
５１３ｂ  構造体出力部
５１３ｃ  新規構造体抽出部
５１３ｄ  差分定数出力部
５１３ｅ  定数参照更新部
５１３ｆ  生成ファイル出力部
５２０    記憶部
５２１    現行ファイル記憶部
５２２    差分ファイル記憶部
５２２    生成ファイルバッファ
６００    差分ファイル配信装置
６１０    制御部
６１１    リクエスト受付部
６１２    差分ファイル適用部
６１３    差分ファイル生成部
６１４    セキュリティ検査部
６１５    差分ファイル送信部
６２０    記憶部
６２１    最新ファイル記憶部
６２２    原版ファイル記憶部
６２３    差分ファイル記憶部
７００    携帯電話
１０００    コンピュータ
１０１０    入力装置
１０２０    モニタ
１０３０    媒体読取り装置
１０４０    ＲＡＭ
１０４０ａ  最新ファイルデータ
１０４０ｂ  旧版ファイルデータ
１０５０    ネットワークインターフェース
１０６０    ＨＤＤ
１０６０ａ  差分ファイル格納領域
１０６０ｂ  旧版ファイル格納領域
１０６０ｃ  差分プログラム配信プログラム
１０７０    ＣＰＵ
１０７０ａ  差分プログラム配信プロセス
１０８０    バス
【図１】
2006155375.tif 000003
【図２−１】
2006155375.tif 000004
【図２−２】
2006155375.tif 000005
【図３】
2006155375.tif 000006
【図４】
2006155375.tif 000007
【図５】
2006155375.tif 000008
【図６】
2006155375.tif 000009
【図７−１】
2006155375.tif 000010
【図７−２】
2006155375.tif 000011
【図８】
2006155375.tif 000012
【図９】
2006155375.tif 000013
【図１０−１】
2006155375.tif 000014
【図１０−２】
2006155375.tif 000015
【図１１−１】
2006155375.tif 000016
【図１１−２】
2006155375.tif 000017
【図１２】
2006155375.tif 000018
【図１３】
2006155375.tif 000019
【図１４】
2006155375.tif 000020
【図１５】
2006155375.tif 000021
【図１６】
2006155375.tif 000022