LogoMark.png

PatchFile

PatchFile


プログラムファイルというものは「生産完成品」ではなく、日々更新されるものです。すでに配布済みのプログラムに修正が必要になった場合は、その旨を利用者に通知して、最新の状態に更新してもらうことが必要です。このときの修正箇所、つまり何を削除して何を追記するかという変更点を一定のルールに従って書いたものがパッチファイル(差分ファイル)です。

容量やスピードに余裕のある現在では、ファイルまるごと入れ替え・・という発想が主流ですが、「小さな情報(差分)で、全体を修正する」方が資源の消費は少なくなるし、また「どこがどう変わったのかがわかる」という点でもパッチファイルの考え方は重要です。

Gitを用いたファイルのバージョン管理においても、パッチの概念やその記法を理解することが重要です。

パッチファイル(差分ファイル)の作成、パッチファイルを用いた古いファイルの修正(「パッチをあてる」といいます)、ともに ターミナル を使ってコマンドで処理するのが一般的です。

パッチファイル(差分ファイル)は プレーンなテキストファイルで、拡張子としては .pach や .diff が使われます。

以下、簡単な事例で練習してみましょう。


準備

以下の2つのファイルを事例に説明しますので、準備して下さい。sample.txt が「修正が必要な現行ファイル」。sample.new.txt が「問題が修正された新ファイル」とします。


これから何をするのか

ここからの説明が混乱しないように、ここで、「開発者」と「利用者」という言葉で、話の前提を確認しておきましょう。
 一般にプログラムというものは100%完成した状態で配布されているわけではなく、利用者は常にバグを含んだファイルを利用しています。利用者から開発者側へ問題が報告されると、開発者側はそれを修正。そして修正版(最新版)と現行版との差分をパッチファイルとして提供するわけです。利用者はこれをダウンロードして、パッチをあてることによって、開発者の手元にある最新版と同じ状態にする・・これがパッチによる修正です。

混乱を避けるために、以下の説明では、必要に応じて、どちらの立場の話なのかを明記します。

パッチファイルの作成|開発者側

パッチファイルを作成するには、diff コマンドを使って、差分情報 を抽出します。その意味で、パッチファイルは差分ファイルとも言われます。
以下、ターミナルのプロンプトが当該ディレクトリを指しているとして・・


パッチをあてる|利用者側

パッチをあてる(つまり現行のファイルを修正する)には、patch コマンドを使います。以下、修正したいファイルとパッチファイルが同じディレクトリにあって、ターミナルのカレントディレクトリは、そこに位置しているという前提でお話しします。


ディレクトリ単位のパッチファイルの作成|開発者側

更新作業は、ファイル単体で行うこともあれば、大きくフォルダの中身全体、複数のファイルを一挙に・・ということもあります。この場合、パッチファイルに書き出される差分情報はディレクトリ全体に及ぶものになります。


ディレクトリ単位でパッチをあてる|利用者側

開発者が diff を実行した環境(ファイルパス)と、利用者がパッチを適用する環境は、それぞれ異なるのが一般的です。そこで、差分適用に関してよくある状況、すなわち SampleProject.diff を適用対象フォルダ(SampleProject)の中へ投入して作業するという前提で説明します。

補足

PAGES

GUIDE

DATA

Last-modified: 2019-07-05 (金) 20:51:17