ComposerでPHPのライブラリ管理について
ComposerはPHPのパッケージ依存管理ツールです。
簡単な説明は下記です。
パッケージリストはここで見えます。
パッケージのインストール
1 | composer require [パッケージ名] |
パッケージの依存関係を含めて必要なパッケージを一括インストールしてくれます。
インストールが終わると、composer.json、composer.lockと1つのディレクトリvenderが作成されます。
1 | composer install |
composer.lockファイルが存在する場合はcomposer.lockに書きだされているバージョンをインストールします。
チーム間で同じバージョンをダウンロードするためなので、composer.lockもgit管理にいれましょう。
もしcomposer.lockというファイルがない場合、composer.jsonの情報を読み取って依存解決し、ダウンロードしたパッケージのバージョン情報を書き出す。
パッケージの削除
1 | composer remove [パッケージ名] |
指定したパッケージが削除され、composer.jsonからもパッケージの管理情報を削除します。
パッケージの更新(アップデート)
1 | composer update |
composer.jsonの情報を読み取ってパッケージとcomposer.lockを最新の状態にアップデートします。
特定のパッケージのみをアップデートしたい場合はcomposer update [パッケージ名]を実行します。
更新後のライブラリがインストールされ、composer.lockが最新に上書きされます。
そういうことなので、インストールする際にcomposer require [パッケージ名]を使えば、ほぼパッケージの依存関係を自動で解決してくれます。
今のプロジェクトは多分手入力でcomposer.jsonを書いて、さらにcomposer update [パッケージ名]を実行します。
依存性を無視するままで、composer updateで全パッケージの更新やcomposer require [パッケージ名]で新たなパッケージをインストールできない状態になっています。
解決方法
今回出たエラーは「Your requirements could not be resolved to an installable set of packages.」
composer.jsonで書かれているバージョンとエラーに出たリストのバージョンとが合わないです。
さっきのパッケージリストから、composer.jsonを見直します。
composer remove [パッケージ名]を実行すると依存性が解決しないままでupdateは失敗になるので、composer remove –no-update[パッケージ名]を実行します。
依存性が解決したかどうかはcomposer update –dry-runで確認しましょう。
このコマンドは何が更新されるかを確認するだけで実際の変更は行われません。
大丈夫だったら、composer updateを実行するかcomposer.lockを削除してcomposer installを実行します。
補足
composer updateはかなり重いので、こういうエラーが出ます。
「PHP Fatal error: Uncaught exception ‘ErrorException’ with message ‘proc_open(): fork failed – Cannot allocate memory’ in phar://path/to/composer.phar/vendor/symfony/console/Symfony/Component/Console/Application.php:983」
スワップファイルを作ってもう一回実行しましょう。
1 2 3 | /bin/dd if=/dev/zero of=/var/swap.1 bs=1M count=1024 /sbin/mkswap /var/swap.1 /sbin/swapon /var/swap.1 |
Author Profile
スターフィールド編集部
SHARE