-
-

更新履歴

-
    -
  1. - : デジタルサーカス株式会社の社内記事として公開 -
  2. -
  3. - : 公開 -
  4. -
-
-
-
- NOTE -
-
-

- この記事は、2025-04-10 に デジタルサーカス株式会社 の社内 Qiita Team に公開された記事をベースに、加筆修正して一般公開したものです。 -

-
-
-
-

はじめに

-

- Composer は PHP におけるデファクトスタンダードなパッケージ管理システムである。 -

-

- Composer を拡張するプラグインの一つに、composer-patches という Composer パッケージがある。これは、Composer でパッケージをインストールするときにそのパッケージへ任意のパッチを当てるプラグインである。 -

-

- 社内で発見しすぐに適用しなければならないバグ修正や、Pull Request こそあるもののなかなかマージされない機能等をすぐさま適用してリリースすることができる。 -

-

- 弊社でも多くのプロジェクトで活用されており、のべ数では数百ものパッチが当てられている。 -

-
-
-

macOS での問題点

-

- composer-patches は、macOS で一部のパッチの適用に失敗することが知られている。関連 issues: -

- -

- これは、composer-patches の想定する patch コマンドが GNU 実装の patch であることに由来する。macOS にプリインストールされている patch はいわゆる BSD patch であり、GNU patch とは完全な互換性がない。 -

-

- ワークアラウンドとして、macOS にも GNU patch をインストールしてしまうという方法がある。例: -

-
-
$ brew install gpatch
-$ echo 'PATH="/opt/homebrew/opt/gpatch/libexec/gnubin:$PATH"' >> ~/.zshrc
-
-

- GNU patch を Homebrew などの手段でインストールし、BSD patch よりも優先されるパスに配置すれば問題が解消する。 -

-
-
-

v2 では

-

- 現在ベータ版である composer-patches v2 では、このワークアラウンドが不要になる (見込み)。 -

-

- 最新の実装では、git apply コマンドが最優先で使われる。また、Git リポジトリがない場合 (config.preferred-installdist に設定している場合など。デフォルトではそうなる) には git init を使って一時的にリポジトリを作成し、その上で git apply を実行するようになった。 -

-

- この変更により、環境ごとに差異のある patch コマンドへの依存がなくなるので、macOS で composer-patches を使うときの厄介事は解消されるものと思われる。 -

-

- 2.0.0-beta1 のリリースノートより: -

-
-
    -
  • - Only have git patchers and freeform patcher? by @cweagans in #472 -
  • -
-
-

- この変更で patch コマンドへの依存が排除された。 -

-
-