PHPのcomposerはパッケージを管理するコマンドツールです。
パッケージはPHPのいろいろな機能の拡張プログラムで、これを必要に応じてインストールし効率的に目的の機能を実装したプログラムを作ります。
そのcomposerコマンドの使い方をご紹介します。
- PHPのパッケージとは何か?
- composerのインストール方法
- composerを利用したパッケージのインストール方法
- OSの実行ユーザ環境にインストール
- PHPプロジェクトにインストール
- Step1. プロジェクトのホームディレクトリに移動
- Step2. composerの初期処理を実行
- Step3. パッケージの追加
- composer.jsonとcomposer.lockファイルのちがい
- composerのコマンド
- init - 初期処理
- require - パッケージ追加・アップデート
- remove - パッケージの削除・アンインストール
- install - まとめてインストール
- update - パッケージの再構築
- show - パッケージ情報表示
- self-update - composerコマンドのアップデート
- create-project - 開発プロジェクト作成
- dump-autoload - クラスマップ再構築
- validate - composer.json構文チェック
- まとめ
PHPのパッケージとは何か?
PHPはいろいろな機能を追加できます。それらの機能がパッケージという単位でGitHubなどで公開されています。そのパッケージを管理するツールがcomposer。
Pythonのpip、Rubyのgemと同じようなものと考えればよいでしょう。
プログラム | パッケージ管理 |
---|---|
PHP | composer |
Python | pip |
Ruby | gem |
composerのコマンドを使って、パッケージの追加・アップデート・削除などの処理を行います。
また最近では、Laravelなどのフレームワークもcomposerを使ってかんたんにインストールできます。
PHPをあつかうときはcomposerは必ず使うものと思ってください。
composerはOSS (Open Source Software)です。composerでインストールするパッケージもOSSです。OSSは無償で使えます。でもすべてがフリーウェアではないことに注意が必要です。
OSSにもライセンスがあります。ただ、
- 『お金はいりません』
- 『プログラムの改修を認めます』
- 『プログラムの再配布を認めます』
などを許可しているだけです。
(くわしいライセンスは設定ファイルに書きます。)
決して、すべて『フリー』ではないことに注意。
(何をしてもかまわないという考えはやめましょう。)
composerのインストール方法
composerは、PHPに標準でついていません。別途インストールが必要です。
composerを利用したパッケージのインストール方法
インストール方法は、
- OSの実行ユーザ環境にインストール
- 特定のPHPプロジェクトだけにインストール(指定ディレクトリに限定)
の二つがあります。
OSの実行ユーザ環境にインストール
composer global require package_name
OSの実行ユーザにインストールするとき、複数のPHPプロジェクトで同じパッケージが使えます。静的コードチェックツールなど、複数のプロジェクトが共通で使えるパッケージをインストールします。
パッケージのインストールはrequireコマンドを使います。これにglobalオプションをつけると、OSの実行ユーザ環境にインストールします。
このとき、compoerのホームディレクトリは次の場所になります。
Windows | C:\Users\{user_name}\AppData\Roaming\Composer |
Mac, Linux | ~/.composer もしくは ~/.config/composer (いつの間にかこっちに変わったらしい。) |
このホームディレクトリにcomposer.jsonファイルとvendorディレクトリが作られます。
composer.jsonは、composerで管理するパッケージ情報が書かれた設定ファイル。
また、composerでインストールされたパッケージがvendorディレクトリに追加されます。
PHPプロジェクトにインストール
PHPプロジェクトだけで使うパッケージをインストールします。
LaravelフレームワークなどのWebフレームワークは、プロジェクトごとにバージョンが異なるので、特定のプロジェクトにインストールしなければなりません。
PHPプロジェクトへのインストールを、順を追ってみてみましょう。
Step1. プロジェクトのホームディレクトリに移動
PHPプロジェクトのホームディレクトリへ移動します。
Step2. composerの初期処理を実行
すでにPHPプロジェクトにcomposerがある場合は不要です。次のステップへ進んでください。
composer init
を実行して、PHPプロジェクトのcomposerでパッケージ管理ができるようにします。
コマンドプロンプトでいろいろと入力を求められますが、あとで設定ファイルで編集できるのですべてEnterでいいです。
すると、プロジェクトのホームディレクトリにcomposer.jsonファイルが生成されます。プロジェクトとcomposerのホームディレクトリは同じです。
{
"name": "***/***",
"authors": [
{
"name": "***",
"email": "***@***"
}
],
"require": {}
}
(***は適当に作られます)
PHPプロジェクトのホームディレクトリでcomposerコマンドを実行すると、PHPプロジェクト内だけでパッケージの追加などが行えます。
Step3. パッケージの追加
composerを使ってインストールします。次のコマンドを実行するだけです。
composer require pagekage_name
OSのユーザ環境にインストールするコマンドからglobalをはずしたものと同じです。
composer.jsonとcomposer.lockファイルのちがい
composer.jsonとcomposer.lockファイルは、パッケージの依存関係を記述した点では同じです。しかし、決定的にちがいます。
composer.jsonは設定ファイルです。一方、composer.lockは結果ファイルです。composerでパッケージの依存関係に変更があるようなコマンドを実行すると作成されます。
composer.jsonファイルは直接編集してもかまいません。
しかし、composer.lockファイルは直接編集してはいけません。自動で書きだされる結果ファイルだからです。
またcomposer.jsonは、composerでインストールしたパッケージを書き出します。しかし、そのパッケージがさらにどのパッケージに依存しているかは管理しません。
composerでパッケージをインストールすると、依存関係のあるパッケージを同時にインストールしてくれます。
この依存しているパッケージはcomposer.jsonには書かれず、composer.lockにだけ書かれます。
インストールしたすべてのパッケージの情報が書かれるのはcomposer.lockだけ。
composer.json | すべてのパッケージの依存関係の検査が未完了の状態のファイル。 ユーザーがインストールするパッケージだけを書く。 |
composer.lock | パッケージの依存関係の検査が完了済みのファイル。 依存パッケージも含め、composerにインストールされたすべてのパッケージを書く。 |
composer installを実行するとどうなるのか?
このようなことから、composer installを実行するとき、composer.lockの有無でパッケージのインストールのスピードがちがいます。
composer.lockがないとき |
---|
composer.jsonからすべてのパッケージの依存関係を検査。 ↓ composer.lockに結果を出力。 ↓ パッケージのインストール。 |
composer.lockがあるとき |
---|
インストール済みパッケージの依存関係の検査をスキップ。 ↓ すでにあるcomposer.lockを使う。 ↓ composer.jsonから追加・変更分だけ依存関係の検査を実行。 ↓ パッケージのインストール。 |
composer.lockファイルがあれば、インストール済みパッケージの依存関係の検査が完了した状態からインストールがはじまるので作業がはやく終わります。
composer.lockは、すべてのパッケージがまったく同じの、PHPプロジェクトのコピー作成や、本番環境の構築などで使います。
composerのコマンド
composerのサブコマンドにはいろいろな操作があります。ここでは、よく使うものを紹介します。
init - 初期処理
composer init
パッケージ管理の初期化処理です。基本的に最初に1回だけ実行します。
composerのホームディレクトリにcomposer.jsonファイルを作成します。composer.jsonは環境に追加されているパッケージとそのバージョン、また、開発環境用のパッケージなど、パッケージに関する設定をします。
composer.jsonがある状態で実行すると、composer.jsonの内容が上書きされてしまいます。
require - パッケージ追加・アップデート
composer [global] require package_name[version]
global | OS実行ユーザーインストールのオプション |
package_name | パッケージ名 |
version | パッケージのバージョン |
パッケージの追加、アップデートに使います。composer.jsonファイルにパッケージを追加したり、既存パッケージのバージョンを更新します。
また、composer.json, composer.lockを更新します。composer.lockには、パッケージのインストール情報が出力されます。このファイルを共有化して同じPHP環境をかんたんに構築できます。
アップデートはupdateコマンドでもできます。
このコマンドは開発用と本番用に分離することができる。
remove - パッケージの削除・アンインストール
composer [global] remove package_name
global | OS実行ユーザーインストールのオプション |
package_name | パッケージ名 |
パッケージの削除・アンインストールは、パッケージを指定して行います。複数のパッケージを削除するには、パッケージ名を半角スペースで区切るだけ。
このコマンドは、依存するパッケージも削除します。その依存パッケージがほかでも使われているときは残すので安心。
install - まとめてインストール
composer install
composer.lockがあるときはそれを使って、ないときはcomposer.jsonからcomposer.lockを新たに作成してPHP環境を構築します。
開発現場では同じ環境を作成する場面があるので、そのときに使います。
- 開発環境から本番環境を構築する。
- 開発サーバからローカルの仮想環境を構築する。
- 負荷分散のために同じ環境のサーバを複数個構築する。 etc...
installコマンドは、composer.json, composer.lockのすべてのパッケージを走査します。
requireコマンドは個別にパッケージを指定します。
このコマンドは開発用と本番用に分離することができる。
update - パッケージの再構築。パッケージの削除
composer update [package_name[version]]
package_name | パッケージ名。 省略するとすべてのパッケージを再構築。 |
version | パッケージのバージョン |
いまのインストール状況を、composer.lockの内容を無視して、パッケージのリソースをcomposer.jsonファイルから再構築します。そして、composer.lockを再生成します。
パッケージのバージョンを変更するなど、composer.jsonファイルを直接編集したときに使います。
開発時には頻繁に使いますが、運用時で利用するときはバージョンアップ作業以外ないでしょう。
このコマンドは開発用と本番用に分離することができる。
show - パッケージ情報表示
composer show [package_name]
package_name | パッケージ名。 省略するとすべてのパッケージの情報を表示。 |
インストールされているパッケージ情報を表示します。
パッケージ名を省略するときパッケージリストを表示します。パッケージ名を指定しするときは、そのパッケージの詳細情報を表示します。
このコマンドは開発用と本番用に分けて表示できる。
self-update - composerコマンドのアップデート
composer self-update
composerコマンドのアップデートを実行します。
create-project - 開発プロジェクト作成
composer create-project package_name path ver
package_name | パッケージ名。 |
path | インストール先。 プロジェクトホームパス。 |
ver | 2.1.1 * 2.1.* 2.* (*は最新を選ぶ) |
Webフレームワーク・Laravelなど、composerを利用したプロジェクトが作成できます。これでかんたんに速く環境が構築できます。
dump-autoload - クラスマップ再構築
composer dump-autoload
クラスのオートロード機能で使うクラスマップを再構築します。パッケージのバージョン管理は変更しません。
クラスのオートロードを利用した環境で使います。クラスを追加、削除するなどしたときにこのコマンドでクラスマップを更新します。
validate - composer.json構文チェック
composer validate
composer.jsonの構文チェックを行います。composer.jsonを直接編集した後に実行して、編集内容にエラーがないかチェックします。
composer.jsonの編集後は必ず実行するようにしましょう。
まとめ
composerの使い方はこれだけではありません。
ほかにもテスト用パッケージの設定方法、開発環境、本番環境のコマンドの使い分けなど大事なことはたくさんあります。
とりあえず最低限の使い方だけを紹介しました。
そのほかのくわしい使い方おいおい追記していく予定です。