# Composer コマンドとオプション

Composer は、2013 年 7 月 3 日に 1.0.0-alpha1 バージョンリリースして以来、絶大の人気を誇る PHP ライブラリの依存関係を管理するパッケージ管理システムです。今どき Composer 使わない PHP 開発ってもうないよね。複数環境で開発や、ライブラリのバージョン管理に非常に便利で、今時の PHP フレームワークって Composer からインストールすることも珍しくありません。IBM デベロッパーからも「一新された PHP」「強力なオープンソース・ツールを使って PHP プロジェクトをサード・パーティー・ライブラリーからアセンブルする」と高く評価しております。今更感ありますが、Composer についてメモりました。

2020 年 10 月 24 日に Composer 2.0 がリリースされました!
今回のリリースは新機能の追加とパフォーマンス向上など今までとは違う体験ができる一新バージョンです。
composer v1 ではダウンロードが遅いという問題は解決し、v2 では curl 最適化と並行ダウンロードすることで、ダウンロード速度を大幅に改善、自分が体感した v2 ダウンロード速度は v1 の倍以上でした。
また、内部ロジック更新することで、速度とメモリ両方の大幅改善が実現できたそうです。Github に詳しいリリースログ (opens new window)確認できます。

php バージョン対応については Composer2.0 は PHP5.3 +をサポートしていますが、将来的に Composer 2.2 から PHP7.1.3 より古いすべてのサポートが終了する予定。PHP5.3 は v2.1 までサポートするそうです。

2.0 リリースは、28 人からの 1100 以上のコミット、150 以上の GitHub の問題とプルリクエスト、さらにそれをテストし、PR をレビューで約 2 年の時間費やしました開発チームに感謝します。 🎉
PHP 開発者の皆さんに是非 Composer 2.0 にアップしてその素晴らしさを体験してほしい。

# Composer install と update の違い

composer install は composer.lock に指定された依存関係パッケージをインストールするだけ
"laravel/framework": "5.6.*"で指定した場合は素直に laravel5.6 入れてくれるけど、新バージョンはチェックしないことになります。

composer update は composer.json に指定された依存関係パッケージを環境 PHP バージョンに合わせてアップデート
"laravel/framework": "5.6.*"で指定した場合は環境 PHP バージョンが更新可能な laravel 最新バージョンを引っ張って来ます。すなわち、laravel5.7 || laravel5.8 も入れてくれます。

install と update 使うタイミング
違う PHP バージョンの環境でソース実装する場合は、update かけるべき!あるある話ですが、ローカル環境で開発して問題なかったプログラムを本番サーバーにアップすると動かないことはあります。composer update かけることで、環境に合わないライフサイクルが早期的発見できます。
テストして問題がなく、その後は勝手にバージョンアップデートしてほしくない時は composer install 使うべきでしょう。

# Composer 設定で PHP バージョン固定

環境によって PHP バージョンが違うけど、インストールして使うライブラリは統一しないと行けないので、composer.json の config 設定すれば OK です。




 




{
  "config": {
    "platform": {
      "php": "7.2"
    }
  }
}

設定ファイル

composer.json:パッケージ管理 json ファイル
composer.lock:現在使用しているバンドルのバージョン等が管理されます。

# init 初期設定

composer.json を手動で作成するコマンド

composer init

options

  • --name パッケージのお前
  • --description 説明
  • --author 作者
  • --type タイプ
  • --homepage ホームページ
  • --require 制約
  • --require-dev 開発制約
  • --stability (-s) 最小安定性フィールド値
  • --license (-l) ライセンス
  • --repository 一つあるいは複数のリポジトリ

# パッケージインストール install / i

install コマンドは、composer.lock がある場合、composer.lock 読み取り、インストールします。
composer.lock がない場合、composer.json から読み取り、依存関係解決、ベンダーにインストール後に composer.lock を作成します。

# install
composer install

options

  • --prefer-source 最新開発版のソース版パッケージライブラリ使う
  • --prefer-dist --prefer-source の逆、安定版取得
  • --dry-run 実際にインストールせずに、インストールのシミュレートして結果表示
  • --dev require-dev に指定したパッケージをインストール(デフォルト)
  • --no-dev require-dev に指定したパッケージをインストールをスキップ
  • --no-autoloader autoloader の生成をスキップ
  • --no-scripts composer.json に指定した script の実行をスキップ
  • --no-progress インストールの進行状況表示しない
  • --no-suggest 推奨パッケージを出力しない
  • --optimize-autoloader(-o) PSR-0 / 4 オートローディングをクラスマップに変換して、オートローダーを高速化。本番環境での使用をお勧めしますが、実行に時間がかかるため、デフォルトでは実行しない
  • --classmap-authoritative(-a) クラスマップからのみ自動ロード。 --optimize-autoloader を暗黙的に有効
  • --apcu-autoloader APCu を使用して、found / not-found クラスをキャッシュ
  • --ignore-platform-reqs php、hhvm、lib-*、ext- *の要件を無視し、ローカルマシンがこれらを満たさない場合でも強制的にインストール。

パッケージをダウンロードには、source(最新開発) と dist(安定版) の 2 つの方法があります。デフォルトは dist

パッケージ更新 update / u

依存関係解決してパッケージを更新可能な最新バージョンにアップデートし、composer.lock 更新します。
composer.lock 更新可能なコマンドは composer update のみ

# update
composer update

options

  • --prefer-source
  • --prefer-dist
  • --dry-run
  • --dev
  • --no-dev
  • --lock
  • --no-autoloader
  • --no-scripts
  • --no-progress
  • --no-suggest
  • --with-dependencies
  • --with-all-dependencies
  • --optimize-autoloader (-o)
  • --classmap-authoritative (-a)
  • --apcu-autoloader
  • --ignore-platform-reqs
  • --prefer-stable
  • --prefer-lowest
  • --interactive
  • --root-reqs

パッケージ削除 remove

# remove
composer remove

options

  • --dev
  • --no-progress
  • --no-update
  • --no-scripts
  • --update-no-dev
  • --update-with-dependencies
  • --ignore-platform-reqs
  • --optimize-autoloader (-o)
  • --classmap-authoritative (-a)
  • --apcu-autoloader

パッケージ追加 require

# add package
composer require twig/twig

options

  • --dev
  • --prefer-source
  • --prefer-dist
  • --no-progress
  • --no-suggest
  • --no-update
  • --no-scripts
  • --update-no-dev
  • --update-with-dependencies
  • --update-with-all-dependencies
  • --ignore-platform-reqs
  • --prefer-stable
  • --prefer-lowest
  • --sort-packages
  • --optimize-autoloader (-o)
  • --classmap-authoritative (-a)
  • --apcu-autoloader

dump-autoload

composer.json に autoload の項目を追加した場合はこのコマンドを使ってオートローダを刷新

composer dump-autoload

options

  • --no-scripts composer.json で定義したスクリプトの実行をスキップ
  • --optimize (-o) PSR-0 / 4 オートローディングをクラスマップに変換して、オートローダーを高速化します。 デフォルトでは実行されていないが、実稼働環境での使用をお勧め
  • --classmap-authoritative (-a) クラスマップからのみクラスを自動ロードします。 --optimizeを暗黙的に有効にします。
  • --apcu APCu を使用して、found / not-found クラスをキャッシュします。
  • --no-dev autoload-dev ルールを無効

clear-cache

キャッシュクリア clear-cache / clearcache / cc 同じ

composer clear-cache
composer clearcache
composer cc

options

  • --format 出力のフォーマット:text || json(デフォルト: text)
  • no-dev 出力から dev 依存関係を削除

run-script

設定した script を手動で実行

composer run-script

options

  • --timeout スクリプトのタイムアウト秒設定 タイムアウトなしは 0
  • --dev 開発モード
  • --no-dev 開発モード無効
  • --list(-l) ユーザー定義のスクリプトをリスト

global

グローバルパッケージを管理するためのコマンド
install update remove require などで使える

# global install
composer global require laravel/installer

# グローバルインストールしたlaravelコマンドを使う
laravel new blog

# self-update (selfupdate)

ライブラリではなく、composer 自身をアップデートしたい時、このコマンド自分アップデート。

composer self-update
composer selfupdate

options

  • --rollback(-r) インストールした最後のバージョンへのロールバック
  • --clean-backups 古いバックアップを削除
  • --no-progress ダウンロードの進行状況を出力しない
  • --update-keys キーの更新を要求
  • --stable 強制更新
  • --preview プレビューチャネルを強制更新
  • --snapshot スナップショットチャネルを強制更新

diagnose

もしかしたら composer の問題では?と思ったらこのコマンドを実行。composer の一般的な問題は自動チェックしてくれます。

composer diagnose

search

検索コマンドは composer.json にある現在プロジェクトのパッケージリポジトリと packagist を検索

composer search twig

composer.json ファイル設定のスチーム一覧

composer.json 編集する際の設定可能スチーム一覧

  • name
  • description
  • version
  • type
  • keywords
  • homepage
  • readme
  • time
  • license
  • authors
  • support
  • Package links
    • require
    • require-dev (root-only)
    • conflict
    • replace
    • provide
    • suggest
  • autoload
    • PSR-4
    • PSR-0
    • Classmap
    • Files
    • Exclude files from classmaps
    • Optimizing the autoloader
  • autoload-dev (root-only)
  • include-path
  • target-dir
  • minimum-stability (root-only)
  • prefer-stable (root-only)
  • repositories (root-only)
  • config (root-only)
  • scripts (root-only)
  • extra
  • bin
  • archive
  • abandoned
  • non-feature-branches

参考:composer.json Schema (opens new window)

config 設定プロパティ一覧

  • process-timeout
  • use-include-path
  • preferred-install
  • store-auths
  • github-protocols
  • github-oauth
  • gitlab-oauth
  • gitlab-token
  • disable-tls
  • secure-http
  • bitbucket-oauth
  • cafile
  • capath
  • http-basic
  • platform
  • vendor-dir
  • bin-dir
  • data-dir
  • cache-dir
  • cache-files-dir
  • cache-repo-dir
  • cache-vcs-dir
  • cache-files-ttl
  • cache-files-maxsize
  • bin-compat
  • prepend-autoloader
  • autoloader-suffix
  • optimize-autoloader
  • sort-packages
  • classmap-authoritative
  • apcu-autoloader
  • github-domains
  • github-expose-hostname
  • gitlab-domains
  • use-github-api
  • notify-on-install
  • discard-changes
  • archive-format
  • archive-dir
  • htaccess-protect
  • lock

composer.json config document (opens new window)

# script の post-install-cmd と post-update-cmd

composer.json の script に予約キーワード設定することで、composer の実行ライフサイクル install と update などに合わせてでコマンド実行できる機能です。

composer.json script 一部

    "scripts": {
        "post-install-cmd": [
            "rm -rf cache.file"
        ],
        "post-update-cmd": [
            "rm -rf cache.file"
        ],
    },

script コマンドイベント一覧

コマンドイベント 説明
pre-install-cmd install 実装
post-install-cmd install 実装
pre-update-cmd update 実装
post-update-cmd update 実装
post-status-cmd status 実装
pre-archive-cmd archive 実装
post-archive-cmd archive 実装
pre-autoload-dump install / update 中の dump-autoload 実装
post-autoload-dump install / update 中の dump-autoload 実装
post-root-package-install create-project 中にあるルートパッケージのインストール
post-create-project-cmd create-project 実装
pre-dependencies-solving 依存が解決される
post-dependencies-solving 依存が解決された
pre-package-install パッケージのインストール
post-package-install パッケージのインストール
pre-package-update パッケージのアップデート
post-package-update パッケージのアップデート
pre-package-uninstall パッケージのアンインストール
post-package-uninstall パッケージのアンインストール
init composer インスタンスが初期化された
command composer コマンドが実行される
pre-file-download ファイルダウンロード実装

# composer require-dev.mikey179/vfsstream is invalid

Composer 2.0 にアップしたらエラー出ました!Composer 2.0 から大文字は使えなくなっているので、それで非推薦のワーニングエラーは色々でているようです。

今回に出会ったエラーは

composer require-dev.mikey179/vfsstream is invalid, it should not contain uppercase characters. please use mikey179/vfsstream instead.

codeigniter で composer install しようとしたらエラーが出ました。composer v1 の時が問題なく動いていたが、今回は composer2 にバージョンアップしたことが原因かも。
EC-cube4 系 のプラグインインストール時にも出ることがあるそうですが、require-dev で使われているmikey179/vfsstreamが無効になり、代わりに require-dev でないmikey179/vfsstream使ってねとのことです。

# 参考

参考:composer document (opens new window)
参考:composer download (opens new window)
参考:composer package repository packagist (opens new window)
参考:一新された PHP Composer による PHP 依存関係の処理 (opens new window)

2020-02-05
  • php

関連記事

正規表現一覧 よく使う検索・置換のパターン
Apache 初期設定メモ
Elastic Beanstalk \$\SERVER['REMOTEADDR'] 取得できない
codeigniter email ライブラリでメール送信 日本語対応
php 開発におけるコーディングルール・規約
PHP empty isset is_null の違い
php curl 使って クリックなしで POST 送信
FlattenException deprecated
allowurlinclude の設定で ftp_connect()エラー
Lumen と Laravel 違い比較
Laravel 5.7 の MVC 使う時のメモ
PHP 8 リリース新機能と変更
解決!phpMyAdmin テーブル構造の内容が表示されない問題
Smarty HTTP URL 取得できるサーバー関数
twig 3 人気 PHP テンプレートエンジンがバージョンアップ
開発時によく使うゼロ埋めパディング作業まとめ
nuxtjs と codeigniter で jwt システム構築
HTML から PDF に変換 PHP ライブラリ mPDF の設定
PHP 7.4 にアップグレードして使えなくなる機能
php.ini 初期設定のいろいろ
爆速軽量フレームワーク codeigniter PHP 開発
Laravel Error についてのメモ