PHPのcomposerはパッケージを管理するコマンドツールです。
composerには開発環境でしか使わないパッケージはインストールを分けることで、本番環境構築では除外できるようになっています。
今回は、開発環境用のパッケージの扱い方、開発環境用、本番用の展開の仕方を学びます。
require --dev - 開発環境用にパッケージ追加・アップデート
開発環境でしか使わないパッケージ専用のrequireコマンドです。
ここではサンプルとして、本番・開発環境にロガーのMonolog、開発環境でしか使わないものに、PHPコーディング規約チェックツールのPHP_CodeSnifferをインストールします。
通常の使い方が分からない人はこちらから。
composer require --dev "squizlabs/php_codesniffer=*"
composer require "monolog/monolog=*"
コマンドを見ても分かるように、開発環境用では '--dev' オプションをつけます。
comoser.jsonの中身はこうなります。
{
"name": "test-user/test",
"require-dev": {
"squizlabs/php_codesniffer": "*"
},
"require": {
"monolog/monolog": "*"
}
}
開発環境用は'require-dev'という項目に追加されます。
'--dev' オプションはかつてrequire以外でも使われましたが、非推奨になりました。
くわしくは後述。
install - 開発用と本番用の環境を構築
今度は、さっき作ったPHPプロジェクトを別の場所で同じものを作りましょう。
composer.json, composer.lockの2つのファイルを別のディレクトリへコピーしてコマンドを実行します。
composer install --dev
You are using the deprecated option "--dev". It has no effect and will break in Composer 3.
Installing dependencies from lock file (including require-dev)
Verifying lock file contents can be installed on current platform.
Package operations: 3 installs, 0 updates, 0 removals
- Installing psr/log (1.1.4): Extracting archive
- Installing monolog/monolog (2.3.4): Extracting archive
- Installing squizlabs/php_codesniffer (3.6.0): Extracting archive
Generating autoload files
1 package you are using is looking for funding.
Use the `composer fund` command to find out more!
ここで気になるメッセージが出ています。'--dev' オプションは非推奨で次期composerのバージョンでは無意味になるか壊れるらしい。
壊れるという言葉がけっこうキツい。
(このコマンドはver.2.1.8で実行している。)
開発環境も含めたフルインストールはオプション無しで実行します。
composer install
Installing dependencies from lock file (including require-dev)
Verifying lock file contents can be installed on current platform.
Package operations: 3 installs, 0 updates, 0 removals
- Installing psr/log (1.1.4): Extracting archive
- Installing monolog/monolog (2.3.4): Extracting archive
- Installing squizlabs/php_codesniffer (3.6.0): Extracting archive
Generating autoload files
1 package you are using is looking for funding.
Use the `composer fund` command to find out more!
MonologもPHP_CodeSnifferもインストールされました。
一方、開発環境用のパッケージを除いて本番環境にインストールするときにオプションを付けます。'--no-dev' を使います。
composer install --no-dev
Installing dependencies from lock file
Verifying lock file contents can be installed on current platform.
Package operations: 2 installs, 0 updates, 0 removals
- Installing psr/log (1.1.4): Extracting archive
- Installing monolog/monolog (2.3.4): Extracting archive
Generating autoload files
1 package you are using is looking for funding.
Use the `composer fund` command to find out more!
Monologはインストールされましたが、PHP_CodeSnifferはインストールされません。
'--dev' オプションは使えない。
通常インストールのコマンドでは、開発用も含めたフルインストール。
本番用の方にオプション(--no-dev)を付ける。
オプションなしのインストールが本番用と勘違いしやすいので注意が必要。
update - composer.jsonのみで開発用と本番用の環境構築
updateコマンドとinstallコマンドのちがいは、composer.lockファイルを使うかどうかです。機能としては一括インストールに変わりはない。
updateコマンドは、composer.jsonファイル1つから環境を構築します。
これもinstallコマンドと同じで、'--dev'コマンドは非推奨です。使うのはやめましょう。
開発環境も含めたフルインストールはオプションなしで実行します。
composer update
Loading composer repositories with package information
Updating dependencies
Lock file operations: 3 installs, 0 updates, 0 removals
- Locking monolog/monolog (2.3.4)
- Locking psr/log (1.1.4)
- Locking squizlabs/php_codesniffer (3.6.0)
Writing lock file
Installing dependencies from lock file (including require-dev)
Package operations: 3 installs, 0 updates, 0 removals
- Installing psr/log (1.1.4): Extracting archive
- Installing monolog/monolog (2.3.4): Extracting archive
- Installing squizlabs/php_codesniffer (3.6.0): Extracting archive
13 package suggestions were added by new dependencies, use `composer suggest` to see details.
Generating autoload files
1 package you are using is looking for funding.
Use the `composer fund` command to find out more!
本番用はinstallコマンドと同じで、'--no-dev' オプションをつけます。
composer update --no-dev
Composer is operating significantly slower than normal because you do not have the PHP curl extension enabled.
Loading composer repositories with package information
Updating dependencies
Lock file operations: 3 installs, 0 updates, 0 removals
- Locking monolog/monolog (2.3.4)
- Locking psr/log (1.1.4)
- Locking squizlabs/php_codesniffer (3.6.0)
Writing lock file
Installing dependencies from lock file
Package operations: 2 installs, 0 updates, 0 removals
- Installing psr/log (1.1.4): Extracting archive
- Installing monolog/monolog (2.3.4): Extracting archive
13 package suggestions were added by new dependencies, use `composer suggest` to see details.
Generating autoload files
1 package you are using is looking for funding.
Use the `composer fund` command to find out more!
'--dev' オプションが使えるのはrequireコマンドだけ。
install, updateコマンドのオプション無しは開発用も含めたフルインストール。
本番用にオプション(--no-dev)を付ける。
通常のinstall, updateコマンドを使うと環境用になることに注意。
show - インストールされたパッケージの表示
showコマンドで本番用と開発用を分けて表示できます。
オプションの使い方はinstall, updateコマンドと同じ。
composer show
monolog/monolog 2.3.4 Sends your logs to files, sockets, inboxes, databases and various web services
psr/log 1.1.4 Common interface for logging libraries
squizlabs/php_codesniffer 3.6.0 PHP_CodeSniffer tokenizes PHP, JavaScript and CSS files and detects violations of ...
composer show --no-dev
monolog/monolog 2.3.4 Sends your logs to files, sockets, inboxes, databases and various web services
psr/log 1.1.4 Common interface for logging libraries
showコマンドは、--devオプションは使えません。エラーになります。
composer show --dev
[Symfony\Component\Console\Exception\RuntimeException]
The "--dev" option does not exist.
show [--all] [--locked] [-i|--installed] [-p|--platform] [-a|--available] [-s|--self] [-N|--name-only] [-P|--path] [-t|--tree] [-l|--latest] [-o|--outdated] [--ignore IGNORE] [-m|--minor-only] [-D|--direct] [--strict] [-f|--format FORMAT] [--no-dev] [--] [<package>] [<version>]
--devオプションがコマンドによって使えたり使えなかったりするのがややこしいから、require専用にしたんじゃないかな?