composer まとめ

2022/04/25

composer とはプロジェクトが必要とするライブラリやパッケージを管理し、それをもとにインストールする機能です。

端的にいうと、PHP の依存管理ツールですね。Linux でいう YUM や APT みたいなものです。

今回は composer についてまとめてみました。

 
INDEX

 

Composer自体のインストール

Linuxの場合

下記のページがわかりやすかったです。

Qiita - CentOS7にComposerをインストールする

 

Windowsの場合

以前、このサイトでエントリーしました。

 

パッケージをインストールする流れ

手順1)composer requireコマンド(ローカル環境)
手順2)composer.lockを共有
手順3)composer installコマンド(本番環境)

手順1)composer requireコマンド(ローカル環境)

composerのパッケージを追加で入れる場合、composer.json に追記して composer update でもいいのですが、そうすると関係無いライブラリの更新までします。

その場合は composer.json は触らず composer require でやるとcomposer側がよしなにやってくれます。


### パッケージを追加
$ composer require "ベンダー名/パッケージ名"

# 実例
$ composer require "goodby/csv"

# バージョン指定してパッケージを追加
$ composer require goodby/csv:"1.2.0"

# さくらレンタルサーバーの場合
$ php composer.phar require "goodby/csv":"1.2.0"

# 削除
$ composer remove "goodby/csv"

# 「開発」で必要なものを追加
$ composer require --dev "goodby/csv"

# 「開発」で必要なものを削除
$ composr remove --dev "goodby/csv"

 

手順2)composer.lockを共有

ローカル環境で問題ないことが確認できたら、Gitで composer.lock を共有します。

composer.json
(Composerの設定ファイル)
インストールするパッケージ一覧。composer updateコマンドは composer.json の設定に基づき最新のパッケージをインストールし、composer.lockファイルを更新します。
composer.lock
(Composerの設定ファイル)
実際にインストールされたパッケージの具体的なバージョンなどの情報が自動的に記録されます。(※composer.jsonと同じ記述形式)composer installコマンドはcomposer.lockファイルが存在する場合、そこに記載されているパッケージのバージョンをインストールします。
vendor インストールしたパッケージのソース本体

 

手順3)composer installコマンド(本番環境)

composer installコマンドはcomposer.lockファイルが存在する場合、そこに記載されているパッケージのバージョンをインストールします。

ローカル環境で問題がないことが確認できたら、Gitでcomposer.lockファイルを本番環境にデプロイします。

そのあと、composer installコマンドを実行。

こうすることで、ローカル環境と全く同じバージョンのパッケージを本番環境で使うことができます。

同様に、他の人はGitで composer.lock をプルし、ローカル環境下でcomposer installコマンドを実行すると、全く同じバージョンのパッケージを入れることができます。

 

よく使うcomposerコマンド

Composerバージョン確認


# Composerのバージョン確認
$ composer -V

# Composerのアップデート方法
$ composer self-update

# Composerのロールバック方法
$ composer self-update --rollback

# Composerのバージョンを 1.x に固定したい
$ composer self-update --1

installコマンド

パッケージを(パッケージが依存しているパッケージを含めて)vendor/ 以下に全てインストールします。

composer.json に記載されたパッケージや依存を現在のプロジェクトにインストールしたいときに使用します。


# 1.ローカル環境ではcomposer requireコマンドが無難
# 2.ローカル環境で問題なければ composre.json + composer.lock を本番サーバへデプロイ
# 3.SSH でサーバにアクセスして以下のコマンドを実行
$ composer install

# さくらレンタルサーバの場合
$ php ../composer.phar install

# require-dev(開発用のパッケージ)にインストール
$ composer install --dev

# require-dev(開発用のパッケージ)はインストールしない
# ただし config/app.php にサービスプロバイダの記述があるとエラーになる
$ composer install --no-dev

composer.lock がある場合 composer.lock からそのままパッケージをインストールします。
composer.lock がない場合は composer.json から依存関係を解決してインストール + composer.lock を新規作成します。
ポイント2
require と require-dev のちがい
種類 目的
require 本番環境と開発環境で共に利用
require-dev 開発環境のみ利用

composer.json の require-dev に記述して動作確認を行い、問題なければ本番環境にてcomposer install --devしてrequire-devパッケージを入れてしまう方法もあります。

updateコマンド

パッケージを最新のバージョンに更新するコマンド。


# composer.json に記載されているパッケージや依存をすべて最新
$ composer update

# composer.json に記載された特定のパッケージとその依存のみを最新
$ composer update "ベンダー名/パッケージ名"
# 実例
$ composer update "laravelcollective/html"

# 開発用
$ composer update --dev

# 本番環境用
$ composer update --no-dev

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

必要なパッケージを新たに composer.json に追加し、vendor/ 以下にインストールするコマンド。


# パッケージのインストール(書式)
$ composer require "ベンダー名/パッケージ名":"バージョン"

# 5.8 をインストールする場合
$ composer require "laravelcollective/html":"5.8"

# 6.0をインストールする場合
$ composer require "laravelcollective/html":"6.0"

# 正規表現を使ってバージョン指定することも
$ composer require "laravelcollective/html":"6.*"

# 開発用の方にパッケージを追加
$ composer require --dev ベンダー名/パッケージ名

インストールする際に composer.lock ファイルも一緒に更新します。パッケージ名の後に、バージョンを指定してあげれば、指定バージョンをインストールできます。
removeコマンド

インストール済みのパッケージを削除したい場合


$ composer remove [vendor]/[package]

create-projectコマンド(laravelインストール)

Laravelをインストールするときに使うお馴染みのコマンドです。


// 書式
$ composer create-project laravel/laravel プロジェクト名 --prefer-dist "バージョン指定"

// 実例
$ composer create-project laravel/laravel my_project --prefer-dist "5.2.*"

--prefer-source
git cloneでソースを落とす。デフォルト(オプションの指定なし)ではこちらのコマンドが使われる。
--prefer-dist
zipでダウンロードする。このコマンドのほうが高速にソースをダウンロードできるので、このオプションはよく使われる。

dump-autoloadコマンド

名前空間を新たに記述したときはコマンドを叩いて autoload_classmap.php を更新します。
あと、マイグレーションコマンドが効かなくなったときとか、このコマンドを実行すると直ったりします。

databaseディレクトリ 以下は composer dump-autoload を先にやっておく必要があります。
そのあとに、マイグレーションやシーダーを実行する流れになります。

$ composer dump-autoload

self-updateコマンド

composer 自体を最新にアップデートします。


$ composer self-update

グローバルインストールしている場合はroot権限で実行します。
$ sudo composer self-update

 
composer のまとめについては以上です。

本庄マサノリ

仕事で Laravel を使っています。気づいたことや新しい発見など情報を発信していきます。問い合わせはこちら

>> Twitter をフォローする

 

-周辺知識