Composerを使ってないphpのアプリにComposerを導入する


意外と知らないことというか、おっかなびっくりでやっていたり、他のところに依存しないで複雑なインストールが必要なんじゃないかと怯んでいる人とかがいらっしゃるようなので、適当に書きます。

## ダウンロードしたやつをphpで実行すればいいだけ。

Composerをシステム全体にインストールしないで``composer.phar``をダウンロードして、プロジェクト直下で最初に使いたいライブラリを``php composer.phar require なんかのライブラリ名``ってすると``composer.json``と``composer.lock``と``vendor``ディレクトリが出来上がります。

その後のライブラリの追加などは、出来上がったものをベースに新しく使いたいものを追加変更していけば良いだけです。
``php composer.phar``をコマンド実行してライブラリを追加していくのでも良いと思います。

## monologのインストールの例

phpのフレームワークLaravelでも利用されている、[monolog](https://github.com/Seldaek/monolog)というログライブラリを、利用したい場合を例にします。

### composer.pharをダウンロード
公式サイトからダウンロードできます。[ここにあります。](https://getcomposer.org/download/)。現在の最新版は、[1.0.0-alpha11 (2015-11-14)](https://getcomposer.org/download/1.0.0-alpha11/composer.phar)です。

ダウンロードします。

```
wget https://getcomposer.org/download/1.0.0-alpha11/composer.phar
```

ダウンロードされました。

### composer.phar実行

composer.pharはphpで実行できるので、


php composer.phar 〜〜〜〜ってオプションつけながら実行すればライブラリがその実行したところの直下に出来上がります。

monologでは、

```
php composer.phar require monolog/monolog
```

とやれば、monolog本体とmonologが依存しているライブラリと、それらのライブラリを一括でloadするためのautoload.phpが出来上がります。
呼び出し方やパッケージ名などは、最近はみんな意識が高いので、[README](https://github.com/Seldaek/monolog/blob/master/README.mdown)にかいてありますね。


### monologがインストール出来たのでみてみる
ファイルは、カレントディレクトリにvendorというディレクトリが出来上がってその配下に置かれます。

```
├── htdocs //例です
│   ├── admin
│   ├── images
│   ├── いろんなパス
│   ├── …
│   └── いろんなパス
├── composer.json // これも出来上がる
├── composer.lock // これも出来上がる
├── lib  //例です
├── tmp  //例です
└── vendor // これが出来上がる
    ├── composer
    ├── monolog
    └── psr
```

これでもうmonologが利用できます。

composer.jsonには、requireしたインストールしたものがバージョンされて書きだされています。

```composer.json
{
    "require": {
        "monolog/monolog": "^1.17"
    }
}
```

composer.lockには、実際にmonolog自体がインストールされた時に依存しているライブラリの一覧やオートロードのための設定が書き出されていますが、こちらは開発している人は直接変更しません。書いてあることがわからなくても恐れるにたりません。必要になるまでは無視しましょう。笑

```composer.lock
{
    "_readme": [
        "This file locks the dependencies of your project to a known state",
        "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file",
        "This file is @generated automatically"
    ],
    "hash": "63946ac2ea8bb27a32cbe4d16644c833",
    "content-hash": "86fa6d774713f6609169690844125b05",
    "packages": [
        {
            "name": "monolog/monolog",
            "version": "1.17.2",
            "source": {
                "type": "git",
                "url": "https://github.com/Seldaek/monolog.git",
                "reference": "bee7f0dc9c3e0b69a6039697533dca1e845c8c24"
            },
            "dist": {
                .... snip 
```

### monologがインストール出来たので使ってみる

この状態で、monologをrequreして使うには、あとはマニュアル通りです。

例えば、アプリケーション用のログクラスを作りましょう。最初の行に``autoload.php``を呼ぶようにして、こんなふうに作り始められます。
いろんなライブラリを使いたくなった時にはrequire_onceを1268万行書かないと動き始めない素のphpがこんなに簡単になりますね。psrとautoload.php最高。


```lib/classes/AppLogger.php
<?php
require_once dirname(__FILE__) . '/../../vendor/autoload.php'; // こう書いとく。

use Monolog\Logger;
use Monolog\Handler\StreamHandler;
use Monolog\Processor\WebProcessor;
use Monolog\Formatter\LineFormatter;

/**
 * Class AppLogger
 *
 */
class AppLogger
{
	
    /**
     * @var Monolog\Logger
     */
	protected $log;
	
	public function __construct() {
		$this->log = new Logger('myLogger');
	}
}
```

実際のログのクラス実装の例は、[こちらのブログの記事](http://kzhishu.hatenablog.jp/entry/2015/10/04/200000)が新しくて参考になるのでリンクを貼っておきます。(Composerの導入のところはこの記事の内容で置き換えてくださいね。もう一回インストールしないでねｗ)

``require_once``を書く場所は一回でいいのでこのクラスファイルに書かないで、最初の呼び出されるphpファイルに書いとくだけでも良いです。


## これを本番環境に持って行くには

これを本番環境に持って行くには、本番環境に``composer.phar``と``composer.json``と``composer.lock``を持って行って、

```
php composer.phar install
```

ってすればいいです。

インストールも嫌だったら、phpのバージョンさえ合えば動くので、

``vendor`` ディレクトリイカも全部本番環境に持って行ったらそのまま動きます。ソの際は、**autoload.php**をrequireしているところを**絶対パスで書かない**ように気をつけてください。