somemo's diary

プログラマ、雑記、プログラミング関係はLinkから、数式はこっちでまとめていることが多い

【php】composer使ってみた

前々から使おうと思っていたcomposerを使ってみました。

composer

一言で言うと、パッケージ管理ツールです。プロジェクトごとに管理できるようになっているので、複数のプロジェクトで使うときにも便利です。

インストール

composer自体をインストールします。

php -r "eval('?>'.file_get_contents('http://getcomposer.org/installer'));"

#!/usr/bin/env php
All settings correct for using Composer
Downloading...

Composer successfully installed to: C:\work\programming\php\chat\composer.phar
Use it: php composer.phar

WindowsXPではcurlwgetなど標準では存在しないと思うので、紹介されていたevalでやってみました。httpsではダメだったので、httpにしたら、成功しました。

eval後のphp終了タグをつけているのは、file_get_contentsで取得する内容にphp開始タグが含まれているからです。単純に、ダウンロードしてphpとして実行でも大丈夫です。

composer.phar

インストールを終えると、このようなファイルが作成されています。pharは、php archiveの略です。phpファイルがつまっているようです。また、pharを読み込むことで中に詰まったファイルを扱うことができます。しかし、エラーが起きた際に、エラーを特定するためには展開しないと分からないこともあるようです。

展開

pharの展開方法です。

<?php
try {
    $phar = new Phar('composer.phar');
    
    $dir_path = 'composer_phar_dir';
    if (is_dir($dir_path)) {
        mkdir($dir_path);
    }
    
    $phar->extractTo($dir_path);
    
} catch (Exception $e) {
    $e->getTraceAsString();
}

中身のファイルのインデントおよびコメントは除去してありました。アーカイブなので容量削減は、当たり前ですね。

vendorディレクトリにはSymfonyComponentがありました。

  • console
  • finder
  • process

ほかには、以下のようなものがありました。

    ├─justinrainbow
    │  └─json-schema
    │      └─src
    │          └─JsonSchema
    │              │  Validator.php
    │              │  
    │              └─Constraints
    │                      Collection.php
    │                      Constraint.php
    │                      ConstraintInterface.phpEnum.php
    │                      Number.php
    │                      Object.php
    │                      Schema.php
    │                      String.php
    │                      Type.php
    │                      Undefined.php
    │                      
    ├─seld
    │  └─jsonlint
    │      └─src
    │          └─Seld
    │              └─JsonLint
    │                      JsonParser.php
    │                      Lexer.php
    │                      ParsingException.php
    │                      Undefined.php

JSON関連のライブラリっぽいですね。

composer.json

conmposerでインストールする対象を決める設定ファイルです。

今回は、Silexをインストールしますので、https://github.com/fabpot/Silex#installationを参考にjsonファイルを作成します。

Silexのインストール

以下のコマンドを実行します。

php composer.phar install

実行結果です。

Installing dependencies
  - Installing pimple/pimple (dev-master)
    Cloning db836b8cfadc0f39dacafa2bf311a1ab603600bb

  - Installing symfony/routing (dev-master)
    Cloning v2.1.0-RC1

  - Installing symfony/http-foundation (dev-master)
    Cloning 9a509ac3bb52076f5a765a85e9552042b40ce287

  - Installing symfony/event-dispatcher (dev-master)
    Cloning v2.1.0-BETA4

  - Installing symfony/http-kernel (dev-master)
    Cloning 0d0ee371ab0425f3399dba9e25d7ad98ca5c0d62

  - Installing silex/silex (dev-master)
    Cloning 6d7cf048c704c0c58276b01eccfacab4dd11d013

symfony/routing suggests installing symfony/config (dev-master)
symfony/routing suggests installing symfony/yaml (dev-master)
symfony/routing suggests installing doctrine/common (>=2.2,<2.4-dev)
symfony/event-dispatcher suggests installing symfony/dependency-injection (dev-master)
symfony/http-kernel suggests installing symfony/browser-kit (dev-master)
symfony/http-kernel suggests installing symfony/class-loader (dev-master)
symfony/http-kernel suggests installing symfony/config (dev-master)
symfony/http-kernel suggests installing symfony/console (dev-master)
symfony/http-kernel suggests installing symfony/dependency-injection (dev-master)
symfony/http-kernel suggests installing symfony/finder (dev-master)
silex/silex suggests installing symfony/browser-kit (2.1.*)
silex/silex suggests installing symfony/css-selector (2.1.*)
silex/silex suggests installing symfony/dom-crawler (2.1.*)
Writing lock file
Generating autoload files

vendorディレクトリが作成され、silexがインストールされました。また、silexが依存しているライブラリも一緒んインストールされています。

silexディレクトリの中にもcomposer.jsonがあるので、再帰的なインストールになっているのか気になるところです。

lock

vendorディレクトリ以外に、composer.lockファイルが作成されています。これは、インストール時の情報が記載されています。

更新

lockファイルが存在する状態で更新したい場合、jsonファイルを修正後、下記コマンドを実行します。

php composer.phar update

これで更新できます。lockファイルとjsonファイルを管理しておけば、今まで何をし敵鷹を把握することができると思います。