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