この記事では、
「composer create-project」する際のオプションである、
–prefer-distと–prefer-sourceの違いが何なのか分からなかったので、調べたことを紹介する。
結論:バージョン管理システムを含むか含まないか
–prefer-distと–prefer-sourceの違いは、結論から言うと、
「バージョン管理システム(gitとかsvnとかのこと)を含むか含まないか」と言う違いなのかなあと思っている。
- –prefer-dist:バージョン管理を含めないでプロジェクト作成
- –prefer-source:バージョン管理を含めてプロジェクト作成
composerのhelpを確認してみた結果が以下(抜粋)。
> composer help install
Options:
--prefer-source Forces installation from package sources when possible, including VCS information.
--prefer-dist Forces installation from package dist even for dev versions.
–prefer-sourceの方には「including VCS information」と書いてある。
VCS(Version Control System)がバージョン管理システムのことで、
それをinclude(含める)すると言っているのだ。
つまり–prefer-sourceの方はバージョン管理を含めてプロジェクト作成すると言うこと。
実際にプロジェクトを作成して違いを検証
確認のため実際に、
–prefer-distと–prefer-sourceでプロジェクトを作成して、その違いを検証してみた。
以下のコマンドでそれぞれのプロジェクトを作成。
#--prefer-distで作成
composer create-project laravel/laravel testdir --prefer-dist
#--prefer-sourceで作成
composer create-project laravel/laravel testdir2 --prefer-source
prefer-distの方は何も聞かれずプロジェクト作成終了まで自動で完了したのに対し、
prefer-sourceの方は最後に下記のような質問をされた。
Do you want to remove the existing VCS (.git, .svn..) history? [Y,n]?
# nを押してenter
「バージョン管理の記録を消しますか?」と聞かれている。
バージョン管理のオプションであることを確認したいので、nを押してenter。
プロジェクト作成が完了する。
作成されたプロジェクトのdiffを確認
> diff testdir testdir2
Only in testdir2: .git
prefer-sourceで作成したプロジェクト(testdir2)にだけ.git(gitのバージョン管理ファイル)が存在していることが分かる。
以上のことから、–prefer-distと–prefer-sourceの違いは、
「バージョン管理システム(gitとかsvnとかのこと)を含むか含まないか」と言う違いなのかなあと思っている。
その他:–prefer-distと–prefer-sourceのプロジェクト作成方法の違い
–prefer-distと–prefer-sourceのプロジェクト作成方法の違いは、
「distribution(配布物)から作成するか、source(ソース)から作成するか」ではないかと思っている。
> composer help install
Options:
--prefer-source Forces installation from package sources when possible, including VCS information.
--prefer-dist Forces installation from package dist even for dev versions.
「from package sources(パッケージソースから)」と「from package dist(パッケージ配布物から)」と言う違いがあるのが分かる。
むしろこっちが本質的なテーマでは?と言うツッコミがありそうだが、開発者目線で考えた時に、gitも勝手に作ってくれるかそうでないかの方がオプションの結果の違いとして重要かなと思い、優先的に紹介した次第である。
オプション名のdistとは多分「distribution(配布物)」のことで、配布前提のものを使用するよと言っている。
以下参考までに、プロジェクト作成の時の出力も微妙に異なっていた。
prefer-dist
prefer-source
distが「downloading」していて、sourceでは「cloning」している。
distは出来上がったものをダウンロードしているのに対して、sourceはgit cloneとかそれっぽいことしてるよな〜と解釈。
とりあえずこんな理解で良いかな、間違っていたらご教示願います。
関連記事
[…] (composer) –prefer-distと–prefer-sourceの違い […]