Check! はじめての CakePHP2 〜 bake でプロジェクトスケルトンを利用する

こんにちは、[cloudpack][] の @dz_ こと[大平かづみ][]です。

Prologue - はじめに
====
[Blog Tutorial がだいたいできた](http://qiita.com/dz_/items/2dd4c68f43484f0f78da "Check! はじめての CakePHP2 ポイントまとめ 〜 Blog Tutorial を動かそう")ところで、 `composer` による CakePHP インストールと、`bake` によるプロジェクトのスケルトン作成を試してみました。

以下のドキュメントに沿って進めます。

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


手順のポイント
====
composer で CakePHP2 をインストール
----

アプリを置くディレクトリに以下の `composer.json` を作成します。アプリ名は任意です。

```json:composer.json
{
    "name": "example-app",
    "require": {
        "cakephp/cakephp": "2.6.*"
    },
    "config": {
        "vendor-dir": "Vendor/"
    }
}
```

そして、`composer` でインストールしましょう。`composer` は、そのディレクトリに実行ファイルを置いて `php composer` で実行する方法と、グローバルに設置して `composer` で実行する方法があります。私はグローバルで設置しました。詳細は[公式ドキュメントのインストール手順](https://getcomposer.org/doc/00-intro.md "Introduction - Composer")などを参照くださいませ。

```bash
# composer でインストール
composer install
```

ディレクトリはこのような構成になりました。

```bash
tree -L 1
.
├── Vendor
│   ├── autoload.php
│   ├── bin
│   ├── cakephp
│   └── composer
├── composer.json
└── composer.lock
```


bake でプロジェクトのスケルトン作成
----

そして、プロジェクトのスケルトン（空のプロジェクト）を作りましょう。

```bash
# bake で CakePHP2 のスケルトンを作成
Vendor/bin/cake bake project .

Welcome to CakePHP v2.6.8 Console
---------------------------------------------------------------
App : cakeapp2
Path: /var/www/html/cakeapp2/
---------------------------------------------------------------
Skel Directory: /var/www/html/cakeapp2/Vendor/cakephp/cakephp/lib/Cake/Console/Templates/skel
Will be copied to: /var/www/html/cakeapp2/.
---------------------------------------------------------------
Look okay? (y/n/q) 
[y] > y
---------------------------------------------------------------
Created: . in /var/www/html/cakeapp2/.
---------------------------------------------------------------
 * Random hash key created for 'Security.salt'
 * Random seed created for 'Security.cipherSeed'
 * Cache prefix set
 * app/Console/cake.php path set.
CakePHP is not on your `include_path`, CAKE_CORE_INCLUDE_PATH will be hard coded.
You can fix this by adding CakePHP to your `include_path`.
 * CAKE_CORE_INCLUDE_PATH set to /var/www/html/cakeapp2/Vendor/cakephp/cakephp/lib in webroot/index.php
 * CAKE_CORE_INCLUDE_PATH set to /var/www/html/cakeapp2/Vendor/cakephp/cakephp/lib in webroot/test.php
   * Remember to check these values after moving to production server
Project baked successfully!
```

はい、簡単にプロジェクトのスケルトンが作成されました！プロジェクトの状態はこんな感じです。Blog Tutorial とはディレクトリ構成が異なりますね。

```bash
tree -L 1
.
├── Config
├── Console
├── Controller
├── Lib
├── Locale
├── Model
├── Plugin
├── Test
├── Vendor
├── View
├── composer.json
├── composer.lock
├── index.php
├── tmp
└── webroot
```

初期設定
----

### タイムゾーンの設定
```php:Config/core.php
...

/**
 * Uncomment this line and correct your server timezone to fix
 * any date & time related errors.
 */
        //date_default_timezone_set('UTC');
        date_default_timezone_set('Asia/Tokyo');    // <---- 'Asia/Tokyo' を指定

...
```

### データベース接続情報の設定



```bash
# テンプレート `database.php.default` をコピー
cp Config/database.php.default Config/database.php
```

```php:Config/database.php
...

        public $default = array(
                'datasource' => 'Database/Mysql',
                'persistent' => false,
                'host' => 'localhost',
                'login' => 'user',             // <---- データベースのユーザー名
                'password' => 'password',      // <---- データベースのユーザーのパスワード
                'database' => 'database_name', // <---- データベース名
                'prefix' => '',
                //'encoding' => 'utf8',
        );

...
```

`$test` も必要があれば設定してください。

### DebugKitプラグインのインストールとロード

#### DebugKitプラグインのインストール

`composer.json` があるディレクトリで以下を実行します。

```bash
# DebugKitプラグインをインストール
composer require --dev cakephp/debug_kit "2.2.*"
```

#### DebugKitプラグインのロード

```php:Config/bootstrap.php
...

/**
 * Plugins need to be loaded manually, you can either load them one by one or all of them in a single call
 * Uncomment one of the lines below, as you need. Make sure you read the documentation on CakePlugin to use more
 * advanced ways of loading plugins
 *
 * CakePlugin::loadAll(); // Loads all plugins at once
 * CakePlugin::load('DebugKit'); //Loads a single plugin named DebugKit
 *
 */
CakePlugin::load('DebugKit');    // <---- ロード処理を明記

...
```

#### DebugKitツールバーをコンポーネントに設定

```php:Controller/AppController.php
...

class AppController extends Controller {
  var $components = array('DebugKit.Toolbar');    // <---- コンポーネントを追加
}
```

トラブルシューティング
====

bake project でタイムゾーンの Warning
----
`bake project` で、以下の Warning が出てしまう場合は、以下のように `/etc/php.ini` でタイムゾーンの設定をしてください。

```
Vendor/bin/cake bake project .

PHP Warning:  strtotime(): It is not safe to rely on the system's timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected 'UTC' for 'UTC/0.0/no DST' instead in /var/www/html/cakeapp2/Vendor/cakephp/cakephp/lib/Cake/Cache/CacheEngine.php on line 60

...<略>...

Welcome to CakePHP v2.6.8 Console
---------------------------------------------------------------
App : cakeapp2
Path: /var/www/html/cakeapp2/
---------------------------------------------------------------
Skel Directory: /var/www/html/cakeapp2/Vendor/cakephp/cakephp/lib/Cake/Console/Templates/skel
Will be copied to: /var/www/html/cakeapp2/.
---------------------------------------------------------------
Look okay? (y/n/q) 
[y] > 

```

`php.ini` で、 `date.timezone = ` の部分がコメントアウトされているので、 `"Asia/Tokyo"` を設定して下さい。

```:/etc/php.ini
...

[Date]
date.timezone = "Asia/Tokyo"

...
```

Epilogue - おわりに
====

[昨日の記事](http://qiita.com/dz_/items/2dd4c68f43484f0f78da "Check! はじめての CakePHP2 ポイントまとめ 〜 Blog Tutorial を動かそう") と少し似ていますが、こちらの方がすっきりプロジェクトを始められますね！

さぁ、ざくざく理解を進めてまいります！ :octocat: 

近況
====

最近
----
- [Check! はじめての Zabbix インストール on Debian x Amazon RDS](http://qiita.com/dz_/items/3e85dd369c8053ceffe8 "Check! はじめての Zabbix インストール on Debian x Amazon RDS")
- [[初メモ] はじめての Tomcat 〜 つまづいたところまとめ (Java のバージョン指定、起動パラメータ など)](http://qiita.com/dz_/items/879ca03b5b594007ceab "[初メモ] はじめての Tomcat 〜 つまづいたところまとめ (Java のバージョン指定、起動パラメータ など)")
- [Check! はじめての CakePHP2 ポイントまとめ 〜 Blog Tutorial を動かそう](http://qiita.com/dz_/items/2dd4c68f43484f0f78da "Check! はじめての CakePHP2 ポイントまとめ 〜 Blog Tutorial を動かそう") ← :new: :sparkles:
- [Check! はじめての CakePHP2 〜 bake でプロジェクトスケルトンを利用する](http://qiita.com/dz_/items/3fa2a7a184de645f71d4/ "Check! はじめての CakePHP2 〜 bake でプロジェクトスケルトンを利用する") ← :new: :sparkles:

Phalcon関連
----

- [爆速フレームワーク!! Phalcon PHP Framework](
http://qiita.com/dz_/items/55ae18f7fe3a873bace1 "爆速フレームワーク!! Phalcon PHP Framework")
- [Meet Volt ! Phalcon 謹製テンプレートエンジン Volt - from 第71回 PHP勉強会](http://qiita.com/dz_/items/974a90b32ba6a6e38182 "Meet Volt ! Phalcon 謹製テンプレートエンジン Volt - from 第71回 PHP勉強会")
- [Meet Phalcon! - Phalcon PHPフレームワークを Nginx on Amazon EC2 にインストール！](http://qiita.com/dz_/items/e70d61487224b854b971 "Meet Phalcon! - Phalcon PHPフレームワークを Nginx on Amazon EC2 にインストール！")

fluentd関連
----
- [Check! はじめての fluentd を Amazon Linux で動かしてみる (ログを PHP から送る)](http://qiita.com/dz_/items/960319ffffa0d7355f8c "Check! はじめての fluentd を Amazon Linux で動かしてみる (ログを PHP から送る)")
- [Check! はじめての Fluentd 〜 IAMロールで Amazon EC2 と S3 間をセキュアに](http://qiita.com/dz_/items/224607c84112ccafa2d6 "Check! はじめての Fluentd 〜 IAMロールで Amazon EC2 と S3 間をセキュアに")

技術ブログ寄稿
----

[cloudpack技術ブログ][cloudpack-blog]でも、AWS Lambda や 運用ツール Serf に関して記事を書いています。ご興味あれば読んでいただけると嬉しいです！

- <a href="http://blog.cloudpack.jp/author/oohira/" title="大平 かづみ の記事一覧 | cloudpack技術情報サイト"　target="_blank" rel="nofollow">大平 かづみ の記事一覧</a>

[cloudpack]:https://cloudpack.jp/ "cloudpack（クラウドパック） 400社を超える導入実績! EC2などAWSクラウドの導入設計、構築、運用保守サービス"
[cloudpack-blog]:http://blog.cloudpack.jp/ "cloudpack技術情報サイト"
[大平かづみ]:http://blog.cloudpack.jp/author/oohira/ "大平かづみの記事一覧"