author-pic

tanden

よく使うcomposerコマンドとバージョン指定方法の備忘録


April 11, 2020に投稿

概要

  • 開発でよく使うcomposerコマンドとパッケージのバージョン指定方法の備忘録です
  • コマンド:install, update, require, diagnose
  • オプション:--dry-run, --no-cache
  • パッケージのバージョン指定

開発でよく使うcomposerコマンド

install

# インストール
> composer install

# エイリアス
> composer i

パッケージを(パッケージが依存しているパッケージを含めて)vendor/以下に全てインストールします。composer.lockファイルがあれば、ロックファイルに基づいてパッケージをインストールします。ロックファイルがなければ、composer.jsonに基づいパッケージをインストールし、同時にcomposer.lockを新規作成します。

update

# アップデート
> composer update

# updateのエイリアス
> composer u
> composer upgrade

# アップデートするパッケージを指定する
> composer update vendor/package1

# アップデートするパッケージを複数指定する
> composer update vendor/package1 vendor/package2

パッケージを最新のバージョンに更新するコマンドです。updateの後に何も指定しないと、全てのパッケージが更新されてしまうので注意が必要です。
updateの後にパッケージを指定すると、指定したパッケージのみアップデートされます。

require

# vendor/package1を指定する
> composer require vendor/package1

# 1.0.5をインストール
> composer require vendor/package1:"1.0.5"

# 1.0.5にしたものを1.0.4にダウングレード
> composer require vendor/package1:"1.0.4"

必要なパッケージを新たにcomposer.jsonに追加し、vendor/以下にインストールするコマンドです。
インストールする際にcomposer.lockファイルも一緒に更新します。パッケージ名の後に、バージョンを指定してあげれば、指定バージョンをインストールできます。
また、すでにインストールされているパッケージに関しても、requireコマンドで指定したバージョンのパッケージをインストール/アップデートすることができます。

パッケージの開発ブランチのバージョンをインストールしたいときは、開発ブランチの名前をsome-branch-nameとすると、ブランチ名の前にdev-のプレフィックスをつけてあげて、
vendor/package:"dev-some-branch-name"と指定してあげると、リポジトリに上がっている開発ブランチのパッケージをインストールすることができます。
また、開発ブランチに新たにコミットした最新の変更を取り込みたいときは--no-cacheオプションを付けることで、キャッシュを使わずにインストールされるので、最新のコードを反映することができます。
※パッケージのリポジトリに移動して、pullしても最新の変更を取り込めます。

# 開発ブランチを指定
> composer require vendor/package1:"dev-some-branch-name"

# キャッシュを使わず、リポジトリからパッケージをフェッチする
> composer require vendor/package1:”dev-some-branch-name” --no-cache

# install, updateにも--no-cacheオプションをつけて実行できる
> composer install --no-cache
> composer update --no-cache

diagnose

# 診断
> composer diagnose
  • ロックファイルに何か予期せぬ差分が出る
  • コマンドを叩いたあとにエラーが出る

などした場合は、diagnoseを実行するとcomposerが色々とチェックしてくれるので便利です。

オプション:--dry-run

# updateをドライランする
> composer update --dry-run

# installをドライランする
> composer install --dry-run

すべてのコマンドに--dry-runオプションをつけることができます。
--dry-runオプションをつけることで、コマンド実行をシミュレーションでき、composer.lockcomposer.jsonへ変更を反映せずにコマンドの実行を試すことができます。

パッケージのバージョンを指定する方法

バージョンを固定で指定する

バージョンを1.0.1に固定する

"require": {
    "vendor/package1": "1.0.1"
}

ワイルドカードで指定

ワイルドカードでもバージョンを指定できます。
ワイルドカードで指定しているバージョンの桁以外は固定して、バージョンに追従させます。

"require": {
     "vendor/package": "1.*",   // 1.0.0 <= version < 2.0.0
     "vendor/package": "1.0.*"  // 1.0.0 <= version < 1.1.0
}

チルダ(~)で範囲指定

チルダ(~)でもバージョンの範囲を指定できます。
~では指定した最後の桁のバージョンは上げてもOK(指定した桁の前の桁のバージョンは固定)という意味になります。
セマンティックバージョニングのルールでパッケージがバージョンが振られていることが多いので、実際に開発していてこの記法を一番多く見かけるかもしれません。

"require": {
     // メージャーバージョンまでは上げないけど、マイナーバージョンまでは追従していく
     "vendor/package": "~1.1", // 1.1.0 <= version < 2.0.0

     // パッチは当てていくけど、マイナーバージョンまでは追従させない
     "vendor/package": "~1.1.1" // 1.1.1 <= version < 1.2.0
}

ハット(^)で範囲指定

ハット(^)でもバージョンの範囲を指定できます。
^では、0以外で始まる最初の桁のバージョンを固定します。
~とは違い、最初に使うバージョンをパッチバージョンまで指定しつつ、マイナーバージョンのアップデートにも追従させることができます。

"require": {
     // 0以外のバージョンが指定されている最初の桁がメジャーバージョン
     "vendor/package": "^1.1.1", // 1.1.1 <= version < 2.0.0

     // 0以外のバージョンが指定されている最初の桁がマイナーバージョン
     "vendor/package": "^0.1.1" // 0.1.1 <= version < 0.2.0
}

参考

Composerのドキュメント