PHPの外部パッケージ管理ツールComposerについて
Composerのドキュメント Composer Documentation basic-usage などを参考にしています。
基本
-
インストール
Composerのインストールについては以下に説明があります。
curlが使用できる場合は、以下のように実行します。
$ curl -sS http://getcomposer.org/installer | phpすると、カレントディレクトリに、composer.pharができます。
使い方
composer.pharのパスを環境変数に登録していない場合は、PHPの第一引数にcomposer.phar指定して、第二引数にcomposerのコマンドを指定します。
php composer.phar [コマンド]
$ php composer.phar help
パッケージのインストール
Composerに対応しているパッケージをインストールする方法。
-
設定
-
パッケージのインストール
パッケージをインストールする場合、インストールしたいパッケージの情報をcomposer.jsonに追加する必要があります。 基本的にはrequireの項目にパッケージ名とバージョン情報を指定します。 ただし、Packagistに未登録のパッケージは、パッケージのある場所をrepositoriesで指定する必要があります。
{ "require": { "monolog/monolog" => "1.*" } }"1.*" がインストールするバージョンの指定になります。1.0.xをインストールしたい場合は、"1.0.*"とします。
インストールしたいパッケージをcomposer.jsonに追加したら、以下のようにinstallコマンドを実行します。 すると、カレントディレクトリにあるcomposer.jsonの設定から必要なパッケージをvendorディレクトリ以下にインストールしてくれます。
php composer.phar install
$ php composer.phar install Loading composer repositories with package information Installing dependencies (including require-dev) from lock file - Installing psr/log (1.0.0) Loading from cache - Installing monolog/monolog (1.17.2) Downloading: 100% monolog/monolog suggests installing aws/aws-sdk-php (Allow sending log messages to AWS services like DynamoDB) monolog/monolog suggests installing doctrine/couchdb (Allow sending log messages to a CouchDB server) monolog/monolog suggests installing ext-amqp (Allow sending log messages to an AMQP server (1.0+ required)) monolog/monolog suggests installing ext-mongo (Allow sending log messages to a MongoDB server) monolog/monolog suggests installing graylog2/gelf-php (Allow sending log messages to a GrayLog2 server) monolog/monolog suggests installing php-console/php-console (Allow sending log messages to Google Chrome) monolog/monolog suggests installing raven/raven (Allow sending log messages to a Sentry server) monolog/monolog suggests installing rollbar/rollbar (Allow sending log messages to Rollbar) monolog/monolog suggests installing ruflin/elastica (Allow sending log messages to an Elastic Search server) monolog/monolog suggests installing videlalvaro/php-amqplib (Allow sending log messages to an AMQP server using php-amqplib) Generating autoload files
エラーが無い場合、カレントディレクトリのvendorディレクトリ以下にパッケージがインストールされます。 vendorディレクトリが無い場合は、自動的に作成されます。
composer.jsonでmonologだけを指定してインストールすると、以下のようになっていました。
$ ls -l vendor 合計 16 -rw-r--r-- 1 mikan pub 183 10月 25 15:41 2015 autoload.php drwxr-xr-x 2 mikan pub 4096 10月 25 15:41 2015 composer drwxr-xr-x 3 mikan pub 4096 10月 25 15:41 2015 monolog drwxr-xr-x 3 mikan pub 4096 10月 25 15:41 2015 psr
requireコマンドでパッケージのインストールとcomposer.jsへの追加をまとめて行う
composerのrequireコマンドでは、追加したいパッケージを引数に指定すると、パッケージをインストールして、composer.jsのrequireの項目にパッケージ情報を追加してくれます。
php composer.phar require [パッケージ名] [引数(バージョンなど)]
以下の例では、パッケージ twbs/bootstrap の指定バージョン 4.0.0-alpha.2 をインストールし、 composer.jsのrequireに指定したパッケージ情報を追加しています。
# php composer.phar require twbs/bootstrap 4.0.0-alpha.2 Running composer as root/super user is highly discouraged as packages, plugins and scripts cannot always be trusted ./composer.json has been updated Loading composer repositories with package information Updating dependencies (including require-dev) - Installing twbs/bootstrap (v4.0.0-alpha.2) Loading from cache Writing lock file Generating autoload files > Illuminate\Foundation\ComposerScripts::postUpdate > php artisan optimize Generating optimized class loader以下の赤の部分が追加
"require": {
"php": ">=5.5.9",
"laravel/framework": "5.2.*",
"twbs/bootstrap": "4.0.0-alpha.2"
},
※引数のバージョン指定は無くても良い。。
特定のパッケージだけインストール
Composerで複数のパッケージを管理している場合、その中の1つだけ対象にしてインストールや更新したい場合があります。 そのようなケースでは以下のように、Composerのコマンドのあとに、パッケージ名を指定します。
php composer.phar install [パッケージ名]
updateを実行する場合も同様です。
php composer.phar update [パッケージ名]
追加でインストールしたいパッケージが、ajisaba/sitereaderの場合
$ php composer.phar update ajisaba/sitereader > php artisan clear-compiled Loading composer repositories with package information user@example.com's password: Updating dependencies (including require-dev) - Installing ajisaba/sitereader (dev-master 8e45ecf) Cloning 8e45ecf475ab67168fe4590a6941d42a1c2b8a7a user@example.com's password: user@example.com's password: Writing lock file Generating autoload files > php artisan optimize Generating optimized class loader
パッケージの削除
インストール済みのパッケージを削除する場合、remove か update コマンドを使います。
参考
-
updateコマンド
-
removeコマンド
composer.jsonから削除したいパッケージの項目を手動で取り除いてupdateコマンドを実行すれば、パッケージを削除できます。
インストール済みのパッケージ削除と、composer.jsonのrequiresから指定パッケージの行を削除する場合、removeコマンドを使います。
$ php composer.phar remove phpunit/phpunit Loading composer repositories with package information Updating dependencies (including require-dev) - Removing phpunit/phpunit (4.8.21) Writing lock file Generating autoload files
removeコマンドの実行後に、composer.jsonを確認すると、requireの項目にあった "phpunit/phpunit" が削除されています。
]$ cat composer.json { "name": "test/comp", "type": "project", "require": { "ajisaba/DeviceDetect": "1.*", }, "repositories": [ { "type": "vcs", "url": "https://github.com/ajisaba/DeviceDetect.git" } ] }