====== Composer 基本的な使い方 ======
Version 1.9.1
--- //[[http://www.y2sunlight.com|y2sunlight]] 2020-03-13//
[[composer:top|Composer に戻る]]
関連記事
* [[composer:1.9:install|Composerのインストール]]
* [[composer:1.9:phpswitch|ComposerをPHPバージョンで使い分ける]]
* [[composer:1.10:local-install|Composerのローカルインストール]]
* Composer 基本的な使い方
* [[composer:1.9:command-list|Composer コマンド一覧]]
* [[composer:1.9:version-constraints|Composer バージョン制約]]
本章は以下のページの翻訳し本編の環境用に変更・補足したものです。
* https://getcomposer.org/doc/01-basic-usage.md
----
===== はじめに =====
Composerの基本的な使用方法を紹介としてログ出力[[https://github.com/Seldaek/monolog|monolog/monolog]]をインストールします。
> Note:
> 以下ではComposerをWindowsインストーラにより[[composer:1.9:install|インストール]]した環境を前提とします。原本ではcomposerをプロジェクトフォルダにインストールして ''php composer.phar {コマンド}''で実行していますが、本編では ''composer {コマンド}'' で実行することにします。
\\
===== composer.json : プロジェクトのセットアップ =====
プロジェクトでComposerの使用を開始するために必要なのは ''composer.json'' ファイルだけです。このファイルにはプロジェクトの依存関係が記述されており、他のメタデータも含まれている場合があります。
==== requireキー ====
''composer.json'' で指定する最初のものは requireキー です。これは単にプロジェクトが依存するパッケージをComposerに伝えるだけです。
{
"require": {
"monolog/monolog": "1.0.*"
}
}
このように、requireキーはパッケージ名(上例では、monolog/monolog)をバージョンの制約(上例では、''1.0.*'')にマップする情報を受け取ります。
Composerはこの情報を使用して正しいファイルセットを検索します。この時、repositoriesキーを使用して登録したパッケージリポジトリか、またはデフォルトのパッケージリポジトリである ''Packagist'' が使用されます。上記の例では、composer.jsonファイルに他のリポジトリが登録されていないため、''monolog/monolog''パッケージが ''Packagist'' に登録されていると想定されています(Packagistについては[[#Packagist|以下]]を、他のについては[[https://getcomposer.org/doc/05-repositories.md|こちら]]を参照して下さい)。
==== パッケージ名 ====
パッケージ名は、ベンダー名とプロジェクト名で構成されます。多くの場合、これらは同一です(ベンダー名は、名前の衝突を防ぐためにのみ存在します)。例えば、2人の異なる人がjsonという同じ名前でライブラリを作成できるようにします(1人は igorw/json という名前で、もう1人は seldaek/json という名前で)。
パッケージの公開とパッケージの命名の詳細については[[https://getcomposer.org/doc/02-libraries.md|こちら]]をご覧ください。(依存関係としてプラットフォームパッケージを指定することもできます。例えば、PHPやPHPエクステンションがこれに相当します。これにより、サーバーソフトウェアの特定のバージョンを要求できます。以下の[[#プラットフォームパッケージ]]を参照してください。)
==== パッケージのバージョン制約 ====
上の例では、バージョン制約として ''1.0.*'' でMonologパッケージをリクエストしています。これは、開発のブランチが ''1.0'' のバージョン、または 1.0以上 1.1未満 ( 1.0 <= Version < 1.1 )のバージョンを意味します。
バージョン、バージョンの相互関係、およびバージョン制約に関する詳細な情報については、[[https://getcomposer.org/doc/articles/versions.md|こちら]]をお読みください。
>''Composerは適切なファイルをどのようにダウンロードしますか?''
>
>composer.jsonで依存関係を指定すると、Composerは最初に要求したパッケージの名前を取得し、''repositories''キーを使用して登録したリポジトリで検索します。追加のリポジトリを登録していない場合、または指定したリポジトリでその名前のパッケージが見つからない場合、''Packagist'' にフォールバックします(詳細は[[#Packagist|以下]]を参照)。
>
>Composerは、''Packagist'' または指定したリポジトリで適切なパッケージを見つけると、パッケージのVCS(バージョン管理システム)のバージョン管理機能(つまり、ブランチとタグ)を使用して、指定したバージョン制約に最適なものを見つけようとします。バージョンとパッケージの解決についてに[[https://getcomposer.org/doc/articles/versions.md|記事]]は必ずお読みください。
>Note:
>パッケージを要求しようとした時にComposerがパッケージの安定性に関するエラーをスローした場合は、指定したバージョンがデフォルトの最小安定性要件を満たしていない可能性があります。デフォルトでは、VCSで有効なパッケージバージョンを検索する場合に安定したリリースのみが考慮されます。パッケージの開発版、α版、β版、またはRC版を必要とする場合、このような事態に遭遇する可能性があります。その時は[[https://getcomposer.org/doc/04-schema.md|こちらのページ]]で、安定性フラグと''minimum-stability'' キーの詳細をご覧ください。
\\
===== 依存関係のインストール =====
プロジェクトに定義された依存関係をインストールするには、""install""コマンドを実行します。
composer install
このコマンドを実行すると、次の2つのいずれが発生するでしょう。
==== composer.lock を使用しないインストール ====
以前にコマンドを実行したことがなく、且つ ''composer.lock''ファイルも存在しない場合、Composerは単純に ""composer.json"" ファイルにリストされているすべての依存関係を解決し、それらのファイルの最新バージョンをプロジェクトの ""vendor"" ディレクトリにダウンロードします(""vendor""ディレクトリは、プロジェクト内のすべてのサードパーティコードの為の習慣的な場所です)。
上記の例では、""vendor/monolog/monolog/" に ""Monolog"" のソースファイルが作成されます。""Monolog"" に依存関係がリストされている場合、それらのソースファイルもまた ""vendor/"" の下のフォルダーに作成されます。
>Tip:
>プロジェクトでgitを使用している場合は、おそらく"".gitignore"" に""vendor""ディレクトリ内の追加する必要があります。その理由は、すべてのサードパーティコードをバージョン管理されたリポジトリに追加するをの本当は望まないからです。
Composerはインストールが完了すると、""composer.lock"" ファイルにダウンロードした全てのパッケージとそれらの正確なバージョンを書き込み、プロジェクトをそれらの特定のバージョンにロックします。""composer.lock"" ファイルをプロジェクトリポジトリにコミットして、プロジェクトで作業している全ての人が同じバージョンの依存関係にロックされるようにする必要があります(それについては以下で詳しく説明します)。
==== composer.lock を使用したインストール ====
2番目のシナリオに進みます。""composer install"" を実行時に ""composer.json""ファイル と ""composer.lock""ファイル" とがすでに存在する場合は、あなたが以前に ""install"" コマンドを実行したか、または(これは良いことなのですが)プロジェクトの誰かが ""install"" コマンドを実行して ""composer.lock"" ファイルをプロジェクトにコミットしたことを意味します。
いずれにせよ、""composer.lock"" ファイルが存在するときのインストールでは、""composer.json"" にリストされたすべての依存関係が解決及びインストールされますが、Composerは""composer.lock"" にリストされた正確なバージョンを使用して、パッケージバージョンの一貫性を確かなものにします。
その結果として、""composer.json""ファイルによって要求される全ての依存関係は満たされるものの、その依存関係は最新バージョンではない可能性があります。(なぜなら、""composer.lock""ファイルにリストされている依存関係の一部は、そのファイルの作成以降に新しいバージョンがリリースされた可能性があるからです)。これは仕様によるものであり、依存関係の予期しない変更によってプロジェクトが破損しないようにするためです。
==== composer.lockのバージョン管理システムへのコミット ====
''composer.lock'' をVCS(バージョン管理システム)にコミットすることは重要です。それは、プロジェクトをセットアップする全ての人が、まったく同じバージョンの依存関係を使用するからです。CI(継続的インテグレーション)サーバー、実稼働マシン、チーム内の他の開発者、全てのもの、全ての人が同じ依存関係で実行します。これにより、一部の配置だけに関わるバグの可能性が軽減されます。
単独で開発した場合でも、プロジェクトを再インストールする6か月後に、依存関係がその後に多くの新しいバージョンをリリースしていた場合でさえ、先にインストールした依存関係がまだ機能していると確信できます。(''update'' コマンドの使用については、以下を参照してください。)
\\
===== 最新バージョンへの依存関係の更新 =====
前述のように、''composer.lock'' ファイルは、依存関係の最新バージョンを自動的に取得することを防ぎます。最新バージョンに更新するには、updateコマンドを使用します。これにより、''composer.json''ファイルに従って最新の一致するバージョンがフェッチされ、ロックファイルが新しいバージョンで更新されます。(これは ''composer.lock'' ファイルを削除して ''install'' を再度実行することと同じです。)
composer update
>Note:
>Composerは、''composer.json'' に変更が加えられた後 ''composer.lock'' が更新されていない場合、依存関係の解決に影響する可能性があるため、''install'' コマンドの実行時に警告を表示します。
1つの依存関係のみをインストールまたは更新する場合は、それらをホワイトリストに登録できます。
composer update monolog/monolog [...]
>Note:
>ライブラリについては、ロックファイルをコミットする必要はありません。[[https://getcomposer.org/doc/02-libraries.md#lock-file|ライブラリ-ロックファイル]]も参照してください。
\\
===== Packagist =====
''Packagistは''、Composerのメインリポジトリです。Composerリポジトリは、基本的にはパッケージソース、つまりパッケージを取得できる場所です。''Packagist''は、誰もが使用する中心的なリポジトリを目指しています。これは、Composerがパッケージを探す場所をさらに指定することなく、そこで使用可能なパッケージを自動的に要求できることを意味しています。
''Packagist'' のWebサイト( {[[https://packagist.org/|packagist.org]] )にアクセスすると、パッケージを参照と検索できます。
Compagerを使用しているオープンソースプロジェクトは、''Packagist'' でパッケージを公開することをお勧めします。ライブラリは、Composerによって使用される ''Packagist'' 上に存在する必要はありませんが、そのことは、他の開発者による発見と採用をより迅速に行うことができます。
\\
===== プラットフォームパッケージ =====
Composer has platform packages, which are virtual packages for things that are installed on the system but are not actually installable by Composer. This includes PHP itself, PHP extensions and some system libraries.
Composerにはプラットフォームパッケージ呼ばれるパッケージがあります。これは仮想的なパッケージのことで、システムにインストールされているものの、Composerによって実際にはインストールできないパッケージのことです。このプラットフォームパッケージには、PHP自体、PHP拡張機能、及び幾つかのシステムライブラリが含まれます。
* ''php''は、ユーザーのPHPバージョンを表し、制約を適用できます(例えば、''^7.1''のような)。64ビット版のphpを要求するには、 ''php-64bit'' と ''require''します。
* ''hhvm'' は、HHVMランタイム(Facebookが開発したPHP実行環境)のバージョンを表し、制約を適用できます(例えば、''^2.3'')。
* ''ext-'' を使用すると、PHP拡張機能(コア拡張機能を含む)を要求できます。ここではバージョニングが非常に矛盾する可能性があるため、多くの場合、制約を ''*'' に設定することをお勧めします。拡張パッケージ名の例は ''ext-gd''です。
* ''lib-'' を使用すると、PHPで使用されるライブラリのバージョンに制限を加えることができます。次のものが利用可能です:
* ''curl'' , ''iconv'' , ''icu'' , ''libxml'' , ''openssl'' , ''pcre'' , ''uuid'' , ''xsl''
''composer show --platform'' を使用して、ローカルで利用可能なプラットフォームパッケージのリストを取得することができます。
\\
===== オートローディング =====
オートロード情報が指定されたライブラリの場合、Composer は ''vendor/autoload.php'' ファイルを生成します。そして、このファイルを含めるだけで、追加の作業なしでライブラリが提供するクラスを使用することができます。
require __DIR__ . '/vendor/autoload.php';
$log = new Monolog\Logger('name');
$log->pushHandler(new Monolog\Handler\StreamHandler('app.log', Monolog\Logger::WARNING));
$log->addWarning('Foo');
''composer.json'' に ''autoload''フィールドを追加することで、オートローダーに独自のコードを追加することもできます。
{
"autoload": {
"psr-4": {"Acme\\": "src/"}
}
}
この例では、''Acme'' 名前空間に [[https://www.php-fig.org/psr/psr-4/|PSR-4]] オートローダーを登録しています。
そして、ここでは名前空間からディレクトリへのマッピングを定義しています。''src'' ディレクトリは、''vendor'' ディレクトリと同じレベルのプロジェクトルートにあります。ファイル名の例を1つ挙げると、''Acme\Foo''クラスは ''src/Foo.php'' ディレクトリに含まれます。
''autoload''フィールドを追加した後は、次のコマンドを実行して下さい。
composer dump-autoload
このコマンドは ''vendor/autoload.php'' ファイルを再生成します。 詳細については、[[https://getcomposer.org/doc/03-cli.md#dump-autoload-dumpautoload-|dump-autoload]] セクションを参照してください。
''vendor/autoload.php'' をインクルードするとautoloaderインスタンスも返されるので、インクルードの戻り値を変数に保存し、ネームスペースを追加できます。これは、例えばテストスイートでクラスをオートロードする場合に役立ちます。
$loader = require __DIR__ . '/vendor/autoload.php';
$loader->addPsr4('Acme\\Test\\', __DIR__);
Composerは、PSR-4の自動ロードに加えて、PSR-0、クラスマップ、およびファイルの自動ロードもサポートしています。 詳細については、[[https://getcomposer.org/doc/04-schema.md#autoload|autoloadリファレンス]]を参照してください。
オートローダーの[[https://getcomposer.org/doc/articles/autoloader-optimization.md|最適化]]に関するドキュメントも参照してください。
>Note:
>Composerは独自のオートローダーを提供します。これを使用したくない場合は、''vendor/composer/autoload_*.php'' ファイルをインクルードすることができます。このファイルは、連想配列を返し、あなた独自のオートローダーを設定することできます。
\\