30分でできる！XOOPSで使う外部ライブラリをComposerでラクラク管理♪


本稿では、XOOPSでパッケージ管理ツールComposerを使う方法について紹介します。「Composerなんて知らん！」というXOOPSerにもできるかぎりわかりやすく紹介していきます。

セクション1ではComposerが何かまだ知らない方のために簡単にComposerの紹介をします。セクション2では、ComposerをまだMacにインストールしていない方向けにインストール方法を解説します。セクション3では、XOOPSにComposerを組み込む手順について解説します。

# 1. Composerって何？

![composer-logo.png](https://qiita-image-store.s3.amazonaws.com/0/889/55e608e6-9348-d414-b443-1632cf7d510c.png)


[Composer](http://getcomposer.org/)はPHPの外部ライブラリを管理してくれるツールです。[packagist](http://packagist.org/)というウェブサービスにてホスティングされているライブラリをコマンド一発でインストールすることができます。まるでiPhoneのAppStoreのようです。もちろんiPhoneのような画面はありませんが。

外部ライブラリの管理で複雑なのは依存関係の管理です。「このライブラリはPHP5.3.2以上じゃないと動かない」「このライブラリはPEARのあのライブラリに依存していてる」などなど、手動で管理するとなかなかの手間です。Composerはこうした依存関係も含めて管理してくれます。

外部ライブラリなどの依存関係を管理することを、パッケージ管理と呼びます。ComposerはPHPでパッケージ管理のデファクトスタンダードになっています。多くのライブラリがComposerで簡単にインストールできる形で提供されています。なので、Composerを使えるようにしておくと、外部ライブラリの利用がより手軽になります。

# 2. まずは下準備！ComposerをMacで使えるようにしよう！

お使いのMacで使えるようにするところから始めましょう。Composerはコマンドツールなので、お使いのMacの `~/bin` や `/usr/local/bin` などにインストールすることになります。ここでは、[/usr/local/binにインストールする方法](http://getcomposer.org/doc/00-intro.md#globally)を紹介します。コマンドに慣れてない人もついてきてください。コマンドは噛み付いたりしませんから :)

ターミナルを立ち上げましょう:

![1.png](https://qiita-image-store.s3.amazonaws.com/0/889/8b101649-c6b9-018e-301c-1b0040c21974.png)

`composer.phar` をダウンロードします:

```
curl -s http://getcomposer.org/installer | php
```

![2.png](https://qiita-image-store.s3.amazonaws.com/0/889/9ba3a14c-a5e3-203b-55aa-0fd7cc615f4d.png)


うまくダウンロードできれば `composer.phar` ができているはずです。`ls` コマンドで確認してみましょう:

![3.png](https://qiita-image-store.s3.amazonaws.com/0/889/a6e96d23-42e5-9602-6f8a-379dcae63454.png)

ためにし、`composer.phar` を叩いてみてもいいでしょう:

```
./composer.phar --version
```


![4.png](https://qiita-image-store.s3.amazonaws.com/0/889/4f62c5b1-1e58-a2cd-5693-2a56a375d1ce.png)

最後に、`composer.phar` を `/usr/local/bin` ディレクトリに移動します:

```
sudo mv composer.phar /usr/local/bin/composer
```

ここでパスワードを聞かれたら、あなたのMacアカウントのパスワードを入れてください。

![5.png](https://qiita-image-store.s3.amazonaws.com/0/889/d8a3b7d8-44cc-8f8d-0843-b27c2e04264d.png)

`which composer`とやって`/usr/local/bin/composer`と出ればインストール成功です。ためしに、`composer` とだけ入力してコマンドを実行すれば、Composerのヘルプ情報が表示されます。

# 3. XOOPS Cube で Composer を組み込んでみよう!

XOOPS CubeでComoserを組み込むには次の3つのステップを行います。

1. バンドル定義ファイル composer.json を作る
2. Composerでライブラリをインストールする
3. XOOPS側でComposerのライブラリを読み込むようにする

ステップ2では、PHPのクールなマイクロフレームワーク [Silex](http://silex.sensiolabs.org/) を組み込む手順を例にとって説明します。

## 3.1 バンドル定義ファイル composer.json を作ろう!

必要なライブラリの情報は `composer.json` という名前のファイルに書きます。拡張子が `.json` なので[JSON形式](http://ja.wikipedia.org/wiki/JavaScript_Object_Notation)で書きます。「PHPのなのにiniじゃないのか！」というツッコミはなしでおねがいします^^b

ひとまず、`xoops_trust_path` に移動します:

```
cd /Applications/MAMP/htdocs/xoopscube/xoops_trust_path
# これは MAMP で環境を構築した場合の例です
```

からっぽの `composer.json` を作ります:

```
touch composer.json
```

CotEditorで `composer.json` を開きます:

```
open -a CotEditor composer.json 
```

![6.png](https://qiita-image-store.s3.amazonaws.com/0/889/62710d7c-3075-49b2-082f-da2de8a3f367.png)


内容はこのようにします:

```json:composer.json
{
	"minimum-stability": "dev",
	"require": {
		"silex/silex": "1.0.*"
	}
}
```

この定義ファイルのより高度な書式については[Documentation](http://getcomposer.org/doc/04-schema.md)を御覧ください。

保存すれば定義ファイルの出来上がりです。


## 3.2 Composerでライブラリをインストールしよう!

さて、定義ファイルの準備ができたので、外部ライブラリをインストールしてみましょう。

インストールは簡単です。composer.json があるディレクトリで次のコマンドを叩くだけです:

```
composer install
```

このような感じで、依存関係にあるパッケージも含めて、ツラツラとダウンロード＆インストールしてくれます。

![7.png](https://qiita-image-store.s3.amazonaws.com/0/889/ceab368f-021b-270d-c9c7-b4ee12fe1eb3.png)

どうでしょう？随分簡単にインストールできるのではないでしょうか。

ちなみに、ここで確認しておきたいのが、`vendor` ディレクトリができているかどうかです。composerでインストールしたパッケージは全部この `vendor` ディレクトリに配置されます。中身を覗いてみると、たった今インストールしたパッケージの名前が目に付くと思います。

## 3.3 XOOPSがComposerのライブラリを読み込めるようにしよう!

ここまでで、外部ライブラリのインストールが完了しました。インストールしたと言っても、ダウンロードしてきて配置したに過ぎません。ライブラリをXOOPSで利用するには、XOOPS側でComposerのライブラリを読み込むようにする必要があります。

Composerでインストールしたライブラリは `vendor/autoload.php` を `require_once` すればすぐに利用できるようになります。(中にはautload.phpに対応していないライブラリもある)

そこで、XOOPSとしては一番最初に読み込まれる `mainfile.php` に思い切って `xoops_trust_path/vendor/autoload.php` を `require_once` してしまします。

```php:mainfile.php
<?php
// …略

    // Default is 'No'. Choose 'No' if you are unsure.
    define('XOOPS_DB_PCONNECT', 0);

    define('XOOPS_GROUP_ADMIN', '1');
    define('XOOPS_GROUP_USERS', '2');
    define('XOOPS_GROUP_ANONYMOUS', '3');

    require_once XOOPS_TRUST_PATH.'/vendor/autoload.php'; // <-- ここに追加

    // You can select two special module process excuting mode with defining following constants
    //
    //  define('_LEGACY_PREVENT_LOAD_CORE_', 1);
    //    Module process will not load any XOOPS Cube classes.
    //    You cannot use any XOOPS Cube functions and classes.


// …略
```

> ### 余談
> 「mainfile.phpに書くのやだよっ！」という方は `require_once XOOPS_TRUST_PATH.'/vendor/autoload.php';` だけを書いたプリロードを作るという方法もありですね。プロジェクトによってはmainfile.phpを自由に変更できない場合がありますからね。


さて、これで、XOOPS側からComposerのライブラリを利用できるようになったはずです。

確認のために、`mainfile.php` のとなりに `composer_test.php` を作って、ライブラリが利用可能かチェックしてみるといいでしょう。

```php:composer_test.php
<?php

require_once 'mainfile.php';

// Silex\Applicationクラスが使える状態か確認っ
var_dump(class_exists('Silex\Application')); // true なら使える！ false ならなにか手順にミスがあるかも...
```

# まとめ

Composerとは何か？というところから入って、XOOPS CubeでComposerのライブラリを使う方法までひと通り解説しました。

Composerはとても手軽に外部ライブラリが使えるようになるツールです。XOOPS Cubeのプロジェクトでもcommonなどにとりあえず放り込んでしまいがちなライブラリをComposerで管理するようになるといいですね。是非試してみて下さい！