Composer で管理しているプロジェクトで利用しているパッケージに修正を加えたい。vendor
以下を直接編集してしまうと次に composer install
などでバッケージを更新した時に上書きされてしまうのでそれは避けたい。そうなるとパッチを作って git の管理下に置いて適用するのが良いと思う。ただ、数が増えてきたら適用すること自体が手間になる。 このリンク(lightning/composer.json at 8.x-2.29 · acquia/lightning)は Drupal の Lightning というディストリビューションの composer.json
だけどみてもらえればそのパッチの多さに驚くかもしれない。
そんな時に便利なのが cweagans/composer-patches - Packagist という Composer のプラグインで、これは drupal-project/composer.json にも含まれている。
実際に僕も自分で Drupal.org へパッチを送り、それがモジュールに取り込まれる前に自分のプロジェクトへ取り込まれる前に利用するためにこのプラグインを利用している。書き方は以下の感じ。Drupal の話ばかりになってしまったけど、当然 Drupal 以外の Composer プロジェクトに利用できる。
# composer.jsonから一部抜粋
"extra": {
"patches": {
"drupal/drupal": {
"Add startup configuration for PHP server": "https://www.drupal.org/files/issues/add_a_startup-1543858-30.patch"
}
}
}
また、これは github の便利機能だけど
URL に .patch
を付与するだけでパッチが作れる。これをそのまま composer.json の中で指定することも可能。
おまけ
Advanced patch contributor guide | Drupal.org と Applying patches | Drupal.org は Drupalist なら是非読んでおくべき。 自分にとって有用なパッチは他人にとっても有用な可能性があるので、できるところからオープンソースへコミットしたい。