Composerを使ってCakePHP環境を楽々構築！(Windows)

## はじめに
一般的なCakePHP環境構築手順として、CakePHPのzipファイルをダウンロード、解凍し、Apacheのドキュメントルート配下に配置するといった手順だと思います。ここでは、上記とは異なりComposerを使ってCakePHPの環境を構築していきます。

### 今回使用するミドルウェア・パッケージ
* Xampp(PHP/Apache/MySQL)
* Composer

## Xamppのインストール
PHP、Apache、DBサーバをインストールするため、All in OneでインストールできるXamppをインストールします。インストール完了したら、ApacheとMySQLを起動しておきましょう。既にこれらの環境がある場合は読み飛ばしてください。

一応、私が作った手順のリンクです。

* [お手軽PHP開発環境構築(Windows)](http://qiita.com/mikoski01/items/af9ba7283f28033a3083)


## MySQLのDB作成
MySQLのDBも作成しておきましょう。すでに作成済みであれば、読み飛ばしてください。MySQL Workbench等のツールを使ってSQLを発行し、DBを作成しましょう。ここでは「sampledb」というDBを作成します。

`create database sampledb`


## Apacheのドキュメントルートの変更
Apacheのドキュメントルート配下に、CakePHPとCakePHPで作成したAPPプロジェクトを配置する想定です。変更の必要がない場合やXamppインストールしていてデフォルト(xampp\htdocs)のままで良い場合は、読み飛ばしてください。

「httpd.conf」ファイルの「DocumentRoot」の箇所をドキュメントルートにしたいディレクトリに書き換えます。 ここでは"C:/workspace"に設定します。

```xampp/apache/conf/httpd.conf
 ...
 ...
DocumentRoot "C:/workspace"
<Directory "C:/workspace">
 ...
</Directory>
 ...
 ...
```

## Composerのインストール
Composerをインストールしてきいきます。下記リンクの手順でインストールしましょう。

* [Composerインストール手順(Windows)](http://qiita.com/mikoski01/items/266469535e860312145d)



## CakePHPのインストール
ドキュメントルート配下にCakePHPをインストールします。まず、ドキュメントルート直下にcomposer.jsonファイルを作成します。

```composer.json
{
    "name": "example-app",
    "repositories": [
        {
            "type": "pear",
            "url": "http://pear.cakephp.org"
        }
    ],
    "require": {
        "cakephp/cakephp": "2.5.*"
    },
    "config": {
        "vendor-dir": "Vendor/"
    }
}
```

インストールを行います。
コンテキストメニュー(右クリックメニュー)で利用できる場合は、composer.jsonをクリック選択した状態で右クリックで「Composer Install」を選択。
![composer_9.jpg](https://qiita-image-store.s3.amazonaws.com/0/61752/04931baf-fb4b-f18e-912a-902c5ddea60b.jpeg)

コンテキストメニュー(右クリックメニュー)で利用できない場合は、コマンドプロンプトを起動し、composer.jsonを保存したディレクトリに移動(cd)して次のコマンドを実行します。

`composer install`

実行すると下のような結果が表示されます。
![cake_install.jpg](https://qiita-image-store.s3.amazonaws.com/0/61752/97885a6f-3a78-46ef-658e-e038813dd1d4.jpeg)

下記にインストールされます。
\----------------------------------------------
<ドキュメントルート配下>(C:\workspace)
　　└ Vendeor/
　　　　├ bin/
　　　　├ cakephp/　　← CakePHPです。
　　　　├ composer/
　　　　└ autoload.php
\----------------------------------------------

これでCakePHPのインストールは終了です。
続いてプロジェクトを作成していきます。

### Bakeを実行してプロジェクトを作成
コマンドプロンプトでプロジェクトのルートディレクトリをカレントディレクトリに設定します。
`cd /d <プロジェクトのルートディレクトリ> `
【例】`cd \d C:\workspace`

コマンドプロンプトでbakeを実行します。下記コマンドを実行してください。ここではsampleプロジェクトを生成します。
`.\Vendor\bin\cake bake project C:\workspace\sample`


もしbashがないって言われたらcake.batを下記のように書き換えてください。

```Vendor/bin/cake.bat
修正前: bash "%BIN_TARGET%" %*
修正後: cmd /C "%BIN_TARGET%" %*
```

![create_project.jpg](https://qiita-image-store.s3.amazonaws.com/0/61752/c220db44-b01e-9912-b6c0-884efef88a92.jpeg)

### CAKE_CORE_INCLUDE_PATHの設定
デフォルトでは、 bake は CAKE_CORE_INCLUDE_PATH をハードコードするようになっています。 アプリケーションの移植性を高めるためには、 webroot/index.php を修正し、 CAKE_CORE_INCLUDE_PATH を相対パスに変更します。

```sample/webroot/index.php
define(
    'CAKE_CORE_INCLUDE_PATH',
    ROOT . DS . 'Vendor' . DS . 'cakephp' . DS . 'cakephp' . DS . 'lib'
);
```

 *ROOT -- アプリケーションのディレクトリパス* 


### DebugKitプラグイン等をインストール
<ドキュメントルート配下>(C:\workspace)/Vendor/cakephp/cakephp/にあるcomposer.jsonファイルをコピーしてプロジェクト配下(C:\workspace\sample)にペーストします。そのペーストしたcomposer.jsonファイルを「composer install」します。

* 右クリックで「Composer Install」or コマンドプロンプトで`composer install`実行

```composer.json
{
	"name": "cakephp/cakephp",
	"description": "The CakePHP framework",
	"type": "library",
	"keywords": ["framework"],
	"homepage": "http://cakephp.org",
	"license": "MIT",
	"authors": [
		{
			"name": "CakePHP Community",
			"homepage": "https://github.com/cakephp/cakephp/graphs/contributors"
		}
	],
	"support": {
		"issues": "https://github.com/cakephp/cakephp/issues",
		"forum": "http://stackoverflow.com/tags/cakephp",
		"irc": "irc://irc.freenode.org/cakephp",
		"source": "https://github.com/cakephp/cakephp"
	},
	"require": {
		"php": ">=5.2.8",
		"ext-mcrypt": "*"
	},
	"require-dev": {
		"phpunit/phpunit": "3.7.*",
		"cakephp/debug_kit" : "2.2.*"
	},
	"bin": [
		"lib/Cake/Console/cake"
	]
}
```

実行後、プロジェクト直下の「Plugin」「Vendor」ディレクトリに「DebugKit」や「phpunit」がインストールされています。

### オートローダー競合の問題解消
composerオートローダーとcakephpのオートローダーが競合するたConfig/bootstrap.php のコードの先頭に次の行を追加して、問題を回避します。

```sample/Config/bootstrap.php
// composerのautoloadを読み込み
require ROOT . '/Vendor/autoload.php';

// CakePHPのオートローダーをいったん削除し、composerより先に評価されるように先頭に追加する
// https://github.com/composer/composer/commit/c80cb76b9b5082ecc3e5b53b1050f76bb27b127b を参照
spl_autoload_unregister(array('App', 'load'));
spl_autoload_register(array('App', 'load'), true, true);

CakePlugin::loadAll();
```

### DB設定ファイル
Configディレクトリ配下にdatabase.php.defaultがあるので、同ディレクトリでコピペして「database.php」ファイルを作成し、中身を参照するDBの設定に書き換えます。

 ```sample/Config/database.php
		....
	public $default = array(
		'datasource' => 'Database/Mysql',
		'persistent' => false,
		'host' => 'localhost',
		'login' => 'root',
		'password' => '',
		'database' => 'sampledb',
		'prefix' => '',
		'encoding' => 'utf8',
	);
		....
		....
```

## 確認
下記URLにアクセスして確認する。

 * http://localhost(:ポート番号)/(プロジェクト名)

 【例】http://localhost:8888/sample

下の画面のようにオールグリーンになっていればOK!。
![2014-12-09_215531.jpg](https://qiita-image-store.s3.amazonaws.com/0/61752/2b44e6ba-3303-9aae-bb7b-403509f8f3a4.jpeg)



## 参考
* [応用インストール — CakePHP Cookbook 2.x ドキュメント](http://book.cakephp.org/2.0/ja/installation/advanced-installation.html)


以上。