Help us understand the problem. What is going on with this article?

composerについて初期学習まとめ

More than 1 year has passed since last update.

composerについて勉強したのでまとめておく。
composer.jsonファイルに設定を記述していく形式らしい。

依存パッケージの指定

{
  "require" : {"illuminate/console": "5.0.22"}
}

オートローディング

以下の3つがある。

  • PSR-4規約
  • クラスマップ
  • 指定ファイルを起動時に読み込む

PSR-4規約

{
  "autoload": { "psr-4": { "Vehicle\\Car\\": "Norimono" } }
}

名前空間が\Vehicle\Car下のクラスのアクセス時に、そのクラスがロードされていない場合、composer.jsonが置かれたディレクトリからの相対パスで指定されたNorimonoディレクトリ以下のファイルが読み込まれる。

大文字、小文字、アンダースコアはそのまま対応する。
クラスファイル名は、「{クラス名}.php」とする。

クラスマップ

{
  "autoload": { "classmap": [ "lib", "vendor/lib" ] }
}

libとvender/libディレクトリ内でクラスを定義しているPHPファイルがオートローディングの対象となる。
パスの基準は、composer.jsonが置かれたディレクトリ。

下記コマンドで、対応付けのためのクラスマップが生成される。

% composer dump-autoload

指定ファイルを起動時に読み込む

{
  "autoload": { "files": { "hoge.php": "lib/fuga.php" } }
}

hoge.phpとlib/fuga.phpがオートローディングの対象となる。
パスの基準は、composer.jsonが置かれたディレクトリ。

コマンド

composerコマンドを実行するときに「-vvv」オプションを実行するとデバッグ情報が出力される。トラブル時に便利。

update

パッケージを新規インストール、アップデート、削除する。
「--no-dev」オプションを付与するとrequire-devセクションのパッケージを除外できる(本番環境で利用)。

% composer update

install

composer.lockファイルの内容に基づいてパッケージを構成する。このファイルにないものはcomposer.jsonの内容に従う(rubyのbundlerのbundle installと同等だと思う)。

% composer install

require

require-devセクションを対象にする場合には「--dev」オプションを付与する。
require-devセクションを対象外にする場合には「--update-no-dev」オプションを付与する。

% composer require ベンダー名/パッケージ名:バージョン ...

remove

オプション(--dev, --update-no-dev)に関しては、requireと同じ。

% composer remove ベンダー名/パッケージ名

global

globalを付与しない場合には、COMPOSER_HOME環境変数(通常は、「~/.composer」)に対してinstall、update、requireが実行される。
globalを付与した場合には、COMPOSER_HOME環境変数が示すディレクトリの下の「vendor/bin」にPATHを通しておくと利用できる。

% composer global require ベンダー名/パッケージ名:バージョン
% composer global update
% composer global install

self-update

composer自身を更新する。
--rollbackオプションで1つ前のバージョンに戻せる。古いバージョンはCOMPOSER_HOME環境変数の指す場所に保存されている。
--clean-backupsオプションを実行すれば、古いバックアップは削除される。

% composer self-update

create-project

基本的なプロジェクト後続を構築する。(rails newと同等)

% composer create-project ベンダー名/パッケージ名[:バージョン] [インストールパス]

dump-autoload

オートローディングに関する情報ファイルを生成するコマンド。
PSR-4規約による定義、クラスマップによるロード対象クラスの変更がった場合このコマンドを再実行する。
--optimize(又は-o)オプションを付けるとPSR-4規約のオートローディング対象となっている全クラスがクラスマップに含まれる。
これによりロード時間を速くできるらしい。

ただし、PSR-4よりもクラスマップの方が優先されるので、PSR-4の対象を変更するとオートローディングが正常に動作しないことがあるらしいので注意する。
composer update終了時もデフォルトはphp artisan optimizeが実行されるらしく、この不具合が発生する可能性がある(php artisan optimize --psrに変更する方法があるらしいが未調査)。

% composer dump-autoload

clear-cache

composerのローカルキャッシュを削除する。
変更、更新などがうまく動作しないときは、キャッシュをクリアしてみるとよい。

% composer clear-cache

info又はshow

いずれも同じコマンド。
PHP環境とインストール済みの全パッケージの情報を表示する。
パッケージ名を指定するとそのパッケージの情報を見ることができる。

% composer info
% composer show
eidera
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした