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"
}
]
}