コンテンツにスキップ

【PHP】composerの使い方

composerはPHPのライブラリ管理ツールです。以前から存在は知っていたけど、ちゃんと使ったことがありませんでした。

最近、素のPHPを書く機会があり、ライブラリを使わないとかなりキツイことがあったので、調べたことをメモしておきます。

環境

  • vagrant
  • VirtualBox
  • CentOS7
  • PHP 5.6

composerのインストール

### セットアップ用PHPスクリプトをダウンロード
$ php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"

### セットアップ実行
$ php composer-setup.php

### スクリプトを削除
$ php -r "unlink('composer-setup.php');"

### どこでも使えるように/usr/local/binに移動
$ sudo mv composer.phar /usr/local/bin/composer

### 動作確認
$ composer -v
   ______
  / ____/___  ____ ___  ____  ____  ________  _____
 / /   / __ \/ __ `__ \/ __ \/ __ \/ ___/ _ \/ ___/
/ /___/ /_/ / / / / / / /_/ / /_/ (__  )  __/ /
\____/\____/_/ /_/ /_/ .___/\____/____/\___/_/
                    /_/

ライブラリのインストール

試しに、Guzzleをインストールします。

Guzzleとは、PHPのHTTPクライアントで、HTTPリクエストを簡単に実現することができるライブラリです。

その1

requireコマンドでインストールする。

$ composer require guzzlehttp/guzzle
Using version ^6.4 for guzzlehttp/guzzle
./composer.json has been created
Loading composer repositories with package information
Updating dependencies (including require-dev)
Package operations: 5 installs, 0 updates, 0 removals
  - Installing ralouphie/getallheaders (3.0.3): Loading from cache
  - Installing psr/http-message (1.0.1): Loading from cache
  - Installing guzzlehttp/psr7 (1.6.1): Loading from cache
  - Installing guzzlehttp/promises (v1.3.1): Loading from cache
  - Installing guzzlehttp/guzzle (6.4.1): Loading from cache
guzzlehttp/psr7 suggests installing zendframework/zend-httphandlerrunner (Emit PSR-7 responses)
guzzlehttp/guzzle suggests installing psr/log (Required for using the Log middleware)
Writing lock file
Generating autoload files

その2

composer initを利用してインストールする。

### initで対話形式で、composer.jsonを作成します
### この辺の細かいことは分からないので割愛
$ composer init


  Welcome to the Composer config generator



This command will guide you through creating your composer.json config.

Package name (<vendor>/<name>) [masashi/hoge]:
Description []:
Author [masashi <masashi6269>, n to skip]: n
Minimum Stability []:
Package Type (e.g. library, project, metapackage, composer-plugin) []:
License []:

Define your dependencies.

Would you like to define your dependencies (require) interactively [yes]? yes
Search for a package: guzzlehttp/guzzle
Enter the version constraint to require (or leave blank to use the latest version):
Using version ^6.4 for guzzlehttp/guzzle
Search for a package:
Would you like to define your dev dependencies (require-dev) interactively [yes]?
Search for a package:

{
    "name": "masashi/hoge",
    "require": {
        "guzzlehttp/guzzle": "^6.4"
    }
}

Do you confirm generation [yes]?

Search for a package: のとこでguzzlehttp/guzzleを入力すると、composer.jsonrequireに追加してくれます。

これで準備完了。最後にcomposer installを実行してインストールします。

$ composer install
Loading composer repositories with package information
Updating dependencies (including require-dev)
Package operations: 5 installs, 0 updates, 0 removals
  - Installing ralouphie/getallheaders (3.0.3): Loading from cache
  - Installing psr/http-message (1.0.1): Loading from cache
  - Installing guzzlehttp/psr7 (1.6.1): Loading from cache
  - Installing guzzlehttp/promises (v1.3.1): Loading from cache
  - Installing guzzlehttp/guzzle (6.4.1): Loading from cache
guzzlehttp/psr7 suggests installing zendframework/zend-httphandlerrunner (Emit PSR-7 responses)
guzzlehttp/guzzle suggests installing psr/log (Required for using the Log middleware)
Writing lock file
Generating autoload files

ライブラリの利用

オートローダーを読み込んだあとに、普通に使うだけ。

<?php // autoloadを読み込むと、ライブラリを個別にrequire,includeしなくても使えます
require dirname(__FILE__). '/vendor/autoload.php';

$client = new \GuzzleHttp\Client();
$response = $client->request('GET', 'https://api.github.com/repos/guzzle/guzzle');
echo $response->getStatusCode() . PHP_EOL; # 200
echo $response->getHeaderLine('content-type') . PHP_EOL; # 'application/json; charset=utf8'
echo print_r(json_decode($response->getBody()), true); # '{"id": 1420053, "name": "guzzle", ...}'

これだけでだいぶ楽になりました!