Patch

patch (パッチ)とは



`patch`は、テキストファイルに対してパッチ処理を行うUNIXベースのプログラムです。主に、`diff`コマンドで生成される「パッチファイル」という差分情報が記述されたファイルを基に、テキストファイルの更新を行います。パッチファイル自体もテキスト形式であり、変更前のファイルと変更後のファイルとの差分を記録したものです。

パッチによるファイル更新は「パッチを当てる」と表現されます。これは、変更箇所に「当て布」をするというイメージから来ています。

歴史



`patch`は、Perl言語の開発者としても知られるラリー・ウォール氏によって1985年5月に開発されました。その後、GNUプロジェクトの一部となり、現在はフリーソフトウェア財団がメンテナンスを行っています。

使用法



`patch`は、プログラマー間でのソースコードのやり取りによく利用されますが、実際にはあらゆるテキストファイルに適用可能です。パッチは、テキストの追加だけでなく、削除も行うことができます。ただし、バイナリ形式のパッチを扱うことはできません。

ソフトウェア開発におけるパッチ



`patch`への入力となる`diff`ファイルはテキスト形式で可読性が高く、適用前に内容を確認できます。コンテキスト形式(`diff -c`)やユニファイド形式(`diff -u`)といった詳細な差分形式を使用すると、パッチ適用前に修正されたファイルにも適用が可能です。これらの形式は、変更箇所の前後の文脈も含むため、行番号がずれていても、パターンマッチングによって適用箇所を特定できます。

ユニファイド形式はコンパクトで多くのオープンソースプロジェクトで推奨されています。diff形式のファイルは、Git, Subversion, CVS, RCSなど'>[バージョン管理システム]でも生成でき、パッチはバージョン管理においても重要な役割を果たします。

オープンソース開発では、修正内容を`diff`でパッチファイルとしてやり取りし、レビュー後にパッチを適用して最新のソースコードに反映させることが一般的です。

使用例



ファイル単位でのパッチ適用


パッチファイル作成:

bash
diff -u 元ファイル 変更後ファイル > パッチファイル名.patch


パッチ適用:

bash
patch < パッチファイル名.patch


パッチファイルには適用すべきファイル名が記述されているため、コマンドでファイル名を指定する必要はありません。`-R`オプションを使用すると、パッチ適用前の状態に戻すことができます。

bash
patch -R < パッチファイル名.patch


パッチ適用時に、適用しようとするファイルが、`diff`作成時のファイルと異なる場合、パッチは正しく適用できません。例えば、適用しようとしているテキストの先頭に行が挿入されていると、パッチファイル内に書かれている行番号が一致しなくなるためです。
`patch`は、パターンマッチングで修正箇所を特定するため、多少の変更には対処できます。ただし、独自の修正が加えられたソースコードへのパッチ適用は、正常な動作が保証されない場合があります。

フォルダ単位でのパッチ適用


フォルダ単位でパッチを作成し、元に戻す手順は以下の通りです。

bash
diff -ur 元フォルダ 変更後フォルダ > パッチファイル名.patch


サブディレクトリにあるファイルへのパッチ適用には、`-pnumber`オプションが必要です。ソースツリーのベースディレクトリがパッチファイルに含まれている場合は`number`に`1`、そうでない場合は`0`を指定します。例えば、gitで作成されたパッチを適用する場合は、`patch -p1 < パッチファイル名.patch`とします。

移植



`patch`は、UNIX系システム以外にも、Microsoft Windowsなど様々な環境に移植されています。Windows版の`patch`は、GNU utilities for Win32に含まれています。ただし、Windows Vista以降では、プログラム名に`patch`が含まれるとマルウェアと判断されることがあるため、UACに対応したバージョンを利用する必要があります。

関連項目




外部リンク




もう一度検索

【記事の利用について】

タイトルと記事文章は、記事のあるページにリンクを張っていただければ、無料で利用できます。
※画像は、利用できませんのでご注意ください。

【リンクついて】

リンクフリーです。