author-pic

tanden

Composerに手を加えるための開発環境設定


May 05, 2020に投稿

概要

  • Composerのソースコードを読む機会があったので、ついでに開発環境を設定しました
  • Composerに手を加えるために必要な開発環境の設定方法の備忘録です
  • 公式にある設定方法が少しわかりにくかったのでメモ

開発環境の設定


Composerリポジトリをクローンする

# 任意の場所にクローン
> git clone https://github.com/composer/composer.git

# ghqを使っている場合
> ghq get composer/composer


composer installを実行

ローカルにインストールしたComposerで、Composerのビルドに必要なパッケージをインストールします。
こう書くとわかりにくいですが、クローンしたComposerのディレクトリ内でcomposer installを実行するだけです。

Composerのインストールがまだの場合はインストールしておきます。
Macの場合はHomebrewを使ってインストールすることもできます(brew install composer)。

> cd ./composer/composer
> composer install


変更を加えたcomposerコマンドを実行する

Homebrewなどで、ローカルにインストールしたComposerではなく、自分で手を加えたcomposerコマンドを実行してみます。
クローンしたComposerを実行するには、composerディレクトリ内のbin/composerを実行する必要があります。
試しに、composer aboutコマンドを実行するときに、var_dumpで何か表示させてみます。
aboutは、Composerに関する情報を表示してくれるコマンドです。

> bin/composer about
Composer - Dependency Manager for PHP
Composer is a dependency manager tracking local dependencies of your projects and libraries.
See https://getcomposer.org/ for more information.


ソースコードに変更を加える

aboutコマンドの本体のソースコードはsrc/Composer/Command/AboutCommand.phpにあります。
試しに、var_dumpで文字列を出力させます。

# AboutCommand.php内のexecute()内に以下のコードを追加
var_dump('Composerに手を加える');


変更したコマンドを実行してみる

aboutコマンドを実行してみると、var_dumpで出力した文字列が表示されるはず。

> bin/composer about
string(26) "Composerに手を加える"
Composer - Dependency Manager for PHP
Composer is a dependency manager tracking local dependencies of your projects and libraries.
See https://getcomposer.org/ for more information.

これで、コマンドのソースコードに手を加えたものを実行できるようになりました。

テスト

テストを実行するには、以下のコマンドを実行します。

> vendor/bin/simple-phpunit

Dockerコンテナ内で実行したい場合

例えば、以下のようにDockerコンテナ内でcomposerコマンドを実行したい場合もあると思います。

> docker exec -it container-name composer install

変更を加えたcomposerコマンドを、コンテナ内で実行したい場合、composerディレクトリをコンテナにマウントします。

docker-compose.ymlにcomposerディレクトリをマウントする設定を加えます。

...
volumes:
   # コンテナの/home/composerにディレクトリをマウント
   - ~/src/github.com/composer/composer:/home/composer
...

そうすると、コンテナ内でも変更を加えたcomposerコマンドを実行することができます。

# Dockerコンテナ内
> /home/composer/bin/composer about
string(26) "Composerに手を加える"
Composer - Dependency Manager for PHP
Composer is a dependency manager tracking local dependencies of your projects and libraries.
See https://getcomposer.org/ for more information.

コンテナ内で別途インストールされたComposerの代わりに、マウントしたComposerでアプリケーションのパッケージをインストールすることも可能です。

# Dockerコンテナ内のcomposer.jsonがあるディレクトリで実行
> /home/composer/bin/composer install


参考

https://github.com/composer/composer/blob/master/.github/CONTRIBUTING.md