#知ってるようで知らなかった composer のコマンドとオプションの世界

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

#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実際にインストールせずに、インストールのシミュレートして結果表示
  • --devrequire-dev に指定したパッケージをインストール(デフォルト)
  • --no-devrequire-dev に指定したパッケージをインストールをスキップ
  • --no-autoloaderautoloader の生成をスキップ
  • --no-scriptscomposer.json に指定した script の実行をスキップ
  • --no-progressインストールの進行状況表示しない
  • --no-suggest推奨パッケージを出力しない
  • --optimize-autoloader(-o)PSR-0 / 4 オートローディングをクラスマップに変換して、オートローダーを高速化。本番環境での使用をお勧めしますが、実行に時間がかかるため、デフォルトでは実行しない
  • --classmap-authoritative(-a)クラスマップからのみ自動ロード。 --optimize-autoloader を暗黙的に有効
  • --apcu-autoloaderAPCu を使用して、found / not-found クラスをキャッシュ
  • --ignore-platform-reqsphp、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-scriptscomposer.json で定義したスクリプトの実行をスキップ
  • --optimize (-o)PSR-0 / 4 オートローディングをクラスマップに変換して、オートローダーを高速化します。 デフォルトでは実行されていないが、実稼働環境での使用をお勧め
  • --classmap-authoritative (-a)クラスマップからのみクラスを自動ロードします。--optimizeを暗黙的に有効にします。
  • --apcuAPCu を使用して、found / not-found クラスをキャッシュします。
  • --no-devautoload-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

検索コマンドは 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)

#参考

参考: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

関連記事

twig 3 人気 PHP テンプレートエンジンがバージョンアップ
php curl 使って クリックなしで POST 送信
allowurlinclude の設定で ftp_connect()エラー
Lumen と Laravel 違い比較
Laravel5.7 の MVC 使う時のメモ
php 開発におけるルール・規約
PHP 7.4 にアップグレードして使えなくなる機能
解決!phpMyAdmin テーブル構造の内容が表示されない問題
正規表現一覧 よく使う検索・置換のパターン
開発時によく使うゼロ埋めパディング作業まとめ
Laravel 5.1 から 8.1 にバージョンアップ
laravel vuejs 初期設定
HTML から PDF に変換 PHP ライブラリ mPDF の設定
nuxtjs と codeigniter で jwt システム構築
爆速・軽量フレームワーク codeigniter PHP 開発
Laravel Error についてのメモ