1. 基本
  2. パッケージのインストール
  3. パッケージの削除

PHPの外部パッケージ管理ツールComposerについて

Composerのドキュメント Composer Documentation basic-usage などを参考にしています。

基本

  • インストール

  • Composerのインストールについては以下に説明があります。

    Download 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で指定する必要があります。

    例 monologをインストールする場合のcomposer.json
    {
        "require": {
            "monolog/monolog" => "1.*"
        }
    }
    "1.*" がインストールするバージョンの指定になります。1.0.xをインストールしたい場合は、"1.0.*"とします。

  • パッケージのインストール

  • インストールしたいパッケージをcomposer.jsonに追加したら、以下のようにinstallコマンドを実行します。 すると、カレントディレクトリにあるcomposer.jsonの設定から必要なパッケージをvendorディレクトリ以下にインストールしてくれます。

    php composer.phar install
    例 composerのインストールコマンド実行
     $ 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コマンド

  • composer.jsonから削除したいパッケージの項目を手動で取り除いてupdateコマンドを実行すれば、パッケージを削除できます。

  • removeコマンド

  • インストール済みのパッケージ削除と、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"
            }
        ]
    }