composer – PHPの依存関係を管理するパッケージマネージャ

依存関係管理

composer は、composer.json に宣言した依存パッケージを解決・インストール・更新し、vendor/ に配置するツールです。既定のリポジトリは Packagist(packagist.org)です。(getcomposer.org)
実務では「開発では install、ロック更新時は update、本番は --no-dev -o(最適化オートローダ)」といった運用が一般的です。(getcomposer.org)

構文(Syntax)

composer [GLOBAL_OPTIONS] <command> [ARGS]

# 代表的なコマンド
composer init
composer require VENDOR/PKG[:VERSION]
composer install [--no-dev] [-o|--optimize-autoloader]
composer update [PKG...]                # 部分更新可
composer remove PKG...
composer dump-autoload [-o]
composer create-project PKG [DIR]
composer run [--] <script> [-- ARGS...] # scripts 実行
composer show [PKG]                     # 一覧/詳細
composer validate                       # composer.json 検証

主なグローバルオプション(どのコマンドでも使用可): -n/--no-interaction, -d/--working-dir DIR, -v/-vvv(冗長化), -q(静音), --no-scripts, --no-plugins, --profile など。(getcomposer.org)

主なオプション一覧

オプション説明使用例
-n, --no-interaction質問をせず既定値で進める(CI向け)composer install -n (getcomposer.org)
-d, --working-dir DIR作業ディレクトリを指定composer -d api install (getcomposer.org)
--no-devrequire-dev入れないinstall/updatecomposer install --no-dev (getcomposer.org)
--devrequire-dev を入れる(既定)composer update --dev (getcomposer.org)
-o, --optimize-autoloaderオートローダをクラスマップ化して高速化composer install -o (getcomposer.org)
`–prefer-install=distsource`取得方式の優先(配布物/ソース)
--no-scriptscomposer.json の scripts を実行しないcomposer update --no-scripts (getcomposer.org)
--no-pluginsプラグインを無効化composer install --no-plugins (getcomposer.org)
--with-dependencies, --with-all-dependencies指定パッケージの依存も更新composer update -W vendor/* (getcomposer.org)
--ignore-platform-reqsPHP/拡張などのプラットフォーム要件を無視composer install --ignore-platform-reqs (getcomposer.org)

実行例

プロジェクト初期化と依存追加

説明: 対話なしで最小の composer.json を作成し、monolog/monolog を追加します。
コマンド:

composer init -n
composer require monolog/monolog
composer show monolog/monolog | head -n 5

出力例(抜粋):

Using version ^3.0 for monolog/monolog
./composer.json has been updated
...

require は依存を追加し composer.lock を更新します)(getcomposer.org)

本番向けインストール(dev除外+オートローダ最適化)

説明: 本番サーバで dev 依存を省き、オートローダを最適化します。
コマンド:

composer install --no-dev -o

-o は特に本番で推奨)(getcomposer.org)

依存を一部だけ更新

説明: 特定パッケージのみ更新できます。ワイルドカードも可。
コマンド:

composer update vendor/package
composer update "vendor/*"

update は依存解決を行い lock を書き換えます)(getcomposer.org)

テンプレートから新規作成

説明: スケルトン(テンプレート)からプロジェクトを作成します。
コマンド:

composer create-project laravel/laravel blog

create-project の各種フラグは CLI ドキュメント参照)(getcomposer.org)

オートローダのみ再生成

説明: クラス追加後などに autoload 情報だけ更新します。
コマンド:

composer dump-autoload -o

dump-autoload は依存の再取得は行わず、オートローダを生成します)(getcomposer.org)

エラー例:composer.json が無いディレクトリで install

説明: ルートに composer.json が無いと失敗します。
コマンド:

mkdir /tmp/empty && cd /tmp/empty
composer install

出力例(概略):

[Composer\Json\JsonValidationException]
Composer could not find a composer.json file in /tmp/empty

関連コマンド

  • php : vendor/autoload.php を読み込んでライブラリを利用。
  • pecl : PHP 拡張(C拡張)を配布する旧来の仕組み。Composer は PHPライブラリの依存管理に特化。
  • composer self-update : Composer 本体(PHAR)の更新。(getcomposer.org)

備考

  • install と update: install は既存の composer.lock厳密に再現、なければ作成。update は依存を再解決して composer.lock書き換えます。(getcomposer.org)
  • Packagist: 既定のリポジトリは Packagist。必要に応じて composer.jsonrepositories で私設レポジトリを追加できます。(getcomposer.org)
  • 本番最適化: 大規模アプリでは -o(または --classmap-authoritative)でオートローダを最適化すると高速です(開発時は非推奨)。(getcomposer.org)
  • CI向け: 対話抑止は -n または COMPOSER_NO_INTERACTION=1 を利用。(getcomposer.org)
  • root 実行時の注意: 近年の Composer は安全のため root 実行でプラグインを無効化/確認させる挙動があり得ます。可能なら一般ユーザーで実行してください。(GitHub)
  • ユーザー設定: COMPOSER_HOME/config.json(ユーザー設定)で configrepositories を永続化できます。(getcomposer.org)

参考

Bash玄

はじめまして!Bash玄です。

エンジニアとしてシステム運用に携わる中で、手作業の多さに限界を感じ、Bashスクリプトを活用して業務を効率化したのがきっかけで、この道に入りました。「手作業は負け」「スクリプトはシンプルに」をモットーに、誰でも実践できるBashスクリプトの書き方を発信しています。

このサイトでは、Bashの基礎から実践的なスクリプト作成まで、初心者でもわかりやすく解説しています。少しでも「Bashって便利だな」と思ってもらえたら嬉しいです!

# 好きなこと
- シンプルなコードを書くこと
- コマンドラインを快適にカスタマイズすること
- 自動化で時間を生み出すこと

# このサイトを読んでほしい人
- Bashに興味があるけど、何から始めればいいかわからない人
- 定型業務を自動化したい人
- 効率よくターミナルを使いこなしたい人

Bashの世界に一歩踏み出して、一緒に「Bash道」を極めていきましょう!

Bash玄をフォローする

コメント