PHP
Composer

Composerのcreate-projectが何をやっているのか調べてみた

More than 3 years have passed since last update.

フレームワークの新規プロジェクトを作成するときに、composer create-projectを叩くのがお作法っぽいのですが、裏側で何がどうなっているのか見えなくて気持ち悪かったので調べてみました。


結論

対象パッケージをgit cloneしてからcomposer intsallするのとほぼ同じである。

git clone https://github.com/foo/bar

cd bar
composer install

一応下記のように公式ドキュメントにも書いてあるのですが、ちょっとわかりづいらいですね。


create-project

You can use Composer to create new projects from an existing package. This is the equivalent of doing a git clone/svn checkout followed by a composer install of the vendors.

https://getcomposer.org/doc/03-cli.md#create-project


実際の挙動を追って調べてみた

Ethna を例にとってみました。

新規プロジェクトを作る場合、下記コマンドを叩くようにREADMEに書いてあります。

composer create-project ethna/ethna-project -s dev Hoge

まずオプションの-sですが、これは--stabilityの略で"Minimum-stability allowed"のことだそうです。

-sの代わりにバージョンを直接指定してもよいみたいなので、下記のように書くこともできます。



composer create-project ethna/ethna-project Hoge dev-master

さてそれぞれの引数の意味はなんでしょうか。

composerのヘルプを見てみると、

create-project vendor/project target-directory [version]

と書いてあります。

つまり「ethna/ethna-projectというパッケージのmasterバージョンを使ってHogeディレクトリにプロジェクトを作成しなさい」という意味に読めそうです。

実際に実行してみると、わらわらとパッケージのダウンロードが(composer installっぽい)行われて、最後にプロジェクト作成コマンドが実行されました。


create-projectと同じことを手作業で再現する

create-projectはgit cloneしてcomposer installするのと同じである」と公式ドキュメントに書かれていたので、ほんまかいなと思って実際にやってみました。

git clone https://github.com/ethna/ethna-project.git

cd ethna-project
composer install

結果、create-projectしたときとほぼ同じ結果になりました。

これでモヤモヤしてたのがすっきりしました。