PHP
Windows
CentOS
pear
Composer

Composer のグローバルインストール

More than 1 year has passed since last update.

導入

Composer は PEAR、および Pyrus に代わる新しい PHP ライブラリ管理システムです。Pyrus と同じようにプロジェクト単位で管理することもできますが、PEAR の代替としてサーバー単位で管理する場合について考えてみます。Composer のドキュメントは、一部が日本語訳されています。

CentOS 7 で動作確認をしています。それ例外の OS では、テキストエディタの設定方法や Composer 自体のインストール方法など、この記事の内容と手順が異なる場合があるのでご注意ください。

*.json のシンタックスハイライト

Composer の設定ファイルは JSON 形式です。CentOS 標準の yum リポジトリで提供されているテキストエディタのうち Emacs、gedit、nano は、初期状態で JSON ファイルのシンタックスハイライトが機能しません。以下のように設定ファイルの編集などを行い、シンタックスハイライトを有効にします。

Emacs

個人設定ファイルを新規作成 (または追記) し、ファイル名が .json で終わるファイルを java-mode で開くようにする設定を追加します。

~/.emacs
;; .json ファイルを Java モードで開く
(add-to-list 'auto-mode-alist '("\\.json$" . java-mode))

gedit

ファイル名が .json で終わるファイルを JavaScript ファイルとして開くようにします。

/usr/share/gtksourceview-*/language-specs/javascript.lang
                    <!--##############
                        ## 以上省略 ##
                        ##############-->

<language id="js" _name="JavaScript" version="2.0" _section="Scripts">
  <metadata>
    <property name="mimetypes">application/javascript;application/x-javascript;text/x-javascript;text/javascript;text/x-js</property>
    <property name="globs">*.js;*.node;*.json</property><!--## *.json を追加 ##-->
    <property name="line-comment-start">//</property>
    <property name="block-comment-start">/*</property>
    <property name="block-comment-end">*/</property>
  </metadata>

                    <!--##############
                        ## 以下省略 ##
                        ##############-->

nano

Arch Linux の nano-syntax-highlighting-git パッケージを利用します。1 2

# JSONファイルのシンタックスハイライトを行う設定ファイルをダウンロード
sudo wget https://raw.githubusercontent.com/scopatz/nanorc/master/json.nanorc --directory-prefix=/usr/share/nano

# nanoの個人設定ファイルから読み込むようにする
echo $'\n\n'## JSON files$'\n'include "/usr/share/nano/json.nanorc" >> ~/.nanorc

インストール

CentOS において EPEL リポジトリをインストールしていなければ、sudo yum install epel-release を実行してインストールしておきます。3

# Composer のインストール
sudo yum install composer

EPEL リポジトリのGPG公開鍵を取り込んでも良いか訊ねられた場合、Fingerprintが https://getfedora.org/ja/keys/ の指紋と大文字小文字無視で一致するか確認します。

Windowsへのインストールには、インストーラーが利用できます。

home の設定 4

composer コマンドを実行したときの作業ディレクトリ (composer.json が置かれているディレクトリ) は、通常、カレントディレクトリになります。composer global init のようにコマンドラインオプションの最初に global を挟むと、composer global config home で参照できる home 設定オプションの値が作業ディレクトリとなります。

home 設定オプションの値は、COMPOSER_HOME 環境変数によって変更可能です。ここでは、sudo コマンドによってroot権限で実行するときのみ、同環境変数にPEARディレクトリのパスを設定します。

pear コマンドが存在しない場合 (php-pear パッケージをインストールしていない場合など) は、$(pear config-get php_dir) の代わりに、/usr/share/pear のような絶対パスを記述します。

# suders から読み込むファイルの作成
echo COMPOSER_HOME=$(pear config-get php_dir) | sudo tee /root/.sudo_env

sudo の設定変更には、visudo コマンドを使用してください。既定のテキストエディタは Vim なので、それ以外のエディタを使用する場合は sudo EDITOR=emacs visudo のようにします。

/etc/sudoers
                        ##############
                        ## 以上省略 ##
                        ##############

# 変身対象ユーザがrootの場合のみ設定する変数が含まれるファイルの指定
Defaults>root env_file = /root/.sudo_env
## ↑この行を追加 ##

初期設定

ミラーサイトを設定し5 6composer コマンドを高速化するプラグインを導入しておきます7

# Packagistのミラーサイトを設定
sudo composer global config repositories.packagist composer https://packagist.jp

# Composerの通信を並列化するプラグインのインストール
sudo composer global require hirak/prestissimo

Windowsの場合

hirak/prestissimo は cURLサポート機能 に依存しています。Windowsでこの機能を利用するには、次のように curl.cainfoディレクティブ にCA証明書リストのパスを設定する必要があります。CA証明書リストがない場合は Git をインストールしておきます。8

%ProgramFiles%/php/php.ini
                        ;;;;;;;;;;;;;;
                        ;; 以上省略 ;;
                        ;;;;;;;;;;;;;;

[curl]
; A default value for the CURLOPT_CAINFO option. This is required to be an
; absolute path.
curl.cainfo = C:/Program Files/Git/usr/share/pki/ca-trust-source/ca-bundle.trust.crt
;; ↑ curl.cainfo のコメントアウトを外し、値をCA証明書へのパスに

                        ;;;;;;;;;;;;;;
                        ;; 以下省略 ;;
                        ;;;;;;;;;;;;;;

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

以下のようにして、必要なライブラリやツールの依存関係を定義し、インストールすることができます。

# パッケージのインストール
sudo composer global require zendframework/zend-db zendframework/zend-eventmanager esperecyan/url
# 開発環境でのみ利用するパッケージのインストール
sudo composer global require phpunit/phpunit apigen/apigen --dev

パッケージに含まれるコマンドは sudo composer global config bin-dir --absolute でパスを取得できるディレクトリにインストールされます。

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

PEAR、および PEAR2 のライブラリは、Composer で管理することができます。ここでは、PEAR の公式リポジトリに置かれているライブラリをインストールする方法について考えてみます。

PEAR 公式リポジトリを追加する

まずは、お手軽ですがおすすめできない方法を紹介します。

# リポジトリの追加
sudo composer global config repositories.pear pear https://pear.php.net

# pear/net_ipv6 をインストールしてみる
sudo composer global require pear-pear.php.net/Net_IPv6

PEAR リポジトリの構造上、パッケージの一覧を取得するのに非常に時間がかかります。そのため、この方法でライブラリをインストールすると、各種 composer コマンドの実行が極めて遅くなります。

# リポジトリの削除
sudo composer global config --unset repositories.pear

# pear/net_ipv6 の削除
sudo composer global remove pear-pear.php.net/Net_IPv6

🐘 Packagist からインストール

ほとんどのPEARライブラリは、GitHub上のリポジトリ に composer.json が用意されています。その一部は Packagist にも登録されています。Packagistに登録されているライブラリ は、リポジトリを追加せずにインストールできます。

# pear/archive_tar をインストールしてみる
sudo composer global require pear/archive_tar

開発版のインストール

Packagistに登録されているPEARライブラリでも、対応するリポジトリで バージョン番号のように見えるタグ が付けられていない場合があります。そういったライブラリの最新版を追うためには、以下のように開発版としてインストールする必要があります。

# pear/services_w3c_htmlvalidator の開発版をインストール
sudo composer global require pear/services_w3c_htmlvalidator:@dev

GitHub からインストール

Packagist に登録されていないパッケージは、以下のように GitHub 上のリポジトリを追加してインストールします。Gitがインストールされていない場合は、sudo yum install git を実行してインストールしておく必要があります。

# pear/net_smartirc のGitリポジトリを追加
sudo composer global config repositories.pear/net_smartirc git https://github.com/pear/Net_SmartIRC.git

# pear/net_smartirc をインストール
sudo composer global require pear/net_smartirc

依存性の解決に失敗するとき

インストールしようとしたパッケージの依存しているパッケージが開発版であるために、インストールに失敗する場合があります。

Your requirements could not be resolved to an installable set of packages.

  Problem 1
    - pear/net_ipv6 dev-topics/test-for-pr5 requires pear/pear * -> satisfiable by pear/pear[dev-master] but these conflict with your requirements or minimum-stability.
    - pear/net_ipv6 dev-master requires pear/pear * -> satisfiable by pear/pear[dev-master] but these conflict with your requirements or minimum-stability.
    - Installation request for pear/net_ipv6 @dev -> satisfiable by pear/net_ipv6[dev-master, dev-topics/test-for-pr5].

上のエラーメッセージの requires pear/pear * から、安定版の pear/pear が存在しないことがわかります。

# pear/net_ipv6 のGitリポジトリを追加
sudo composer global config repositories.pear/net_ipv6 git https://github.com/pear/Net_IPv6.git

# pear/net_ipv6 の開発版と依存している pear/pear の開発版をインストール
sudo composer global require pear/net_ipv6:@dev pear/pear:@dev

実行時に例外が発生するとき

Fatal error: require_once(): Failed opening required 'HTTP/Request2.php' in /usr/share/pear/vendor/pear/services_w3c_htmlvalidator/Services/W3C/HTMLValidator.php on line 20 のような例外が発生する場合があります。

composer.json
                     /* ##############
                        ## 以上省略 ##
                        ############## */

    "type": "library",
    "require": {
        "pear/pear_exception": "*"
    },
    "require-dev": {
        "phpunit/phpunit": "*"
    }
}
package.xml
                    <!--##############
                        ## 以上省略 ##
                        ##############-->

 <dependencies>
  <required>
   <php>
    <min>5.1.6</min>
   </php>
   <pearinstaller>
    <min>1.5.4</min>
   </pearinstaller>
   <package>
    <name>HTTP_Request2</name>
    <channel>pear.php.net</channel>
    <min>0.2.0</min>
   </package>
  </required>
 </dependencies>

                    <!--##############
                        ## 以下省略 ##
                        ##############-->

pear/services_w3c_htmlvalidator の composer.json と package.xml を比較してみると、実際に依存しているのは pear/pear_exception ではなく pear/http_request2 であることがわかります。composer.jsonのrequreキーの記入漏れです。9

# pear/services_w3c_htmlvalidator が依存している pear/http_request2 をインストール
sudo composer global require pear/http_request2

参考ページ・脚注