最近巷で流行っているComposerというものを使用してPHPのパッケージ管理をしてみたいと思います。今回はComposerを使用して、CakePHPを入れてみます。
環境
- CentOS 6.6
- PHP5.6
- Apache2.2
- MySQL 5.6
という環境で行っています。
Composerを使用するにはPHP 5.3.2以上が必要になります。
Composerのダウンロード
Composerのホームページは以下になります。
Composer 公式サイト
残念ながらまだ英語ページしかありません。
早速ダウンロードしてみましょう。以下のコマンドを自分のホームディレクトリで打ってみます。
$ curl -sS https://getcomposer.org/installer | php
#!/usr/bin/env php
All settings correct for using Composer
Downloading...
Composer successfully installed to: /home/userdir/composer.phar
Use it: php composer.phar
composer.phar というファイルができました。このファイルを実行するとComposerを起動することができます。
$ php composer.phar
______
/ ____/___ ____ ___ ____ ____ ________ _____
/ / / __ \/ __ `__ \/ __ \/ __ \/ ___/ _ \/ ___/
/ /___/ /_/ / / / / / / /_/ / /_/ (__ ) __/ /
\____/\____/_/ /_/ /_/ .___/\____/____/\___/_/
/_/
Composer version 1.0-dev (b23a3cd36870ff0eefc161a4638d9fcf49d998ba) 2014-11-21 17:59:11
Usage:
[options] command [arguments]
このままでもいいのですが、PATHが通っている所にファイルを移してどこからでも実行できるようにすると便利です。
ユーザーのホームディレクトリ配下にbinディレクトリを作成し、そこにファイルを移してcomposerという名前に変えます。
$ mkdir ~/bin
$ mv composer.phar ~/bin/composer
これでPATHを気にせずComposerを実行できるようになりました。
$ composer
______
/ ____/___ ____ ___ ____ ____ ________ _____
/ / / __ \/ __ `__ \/ __ \/ __ \/ ___/ _ \/ ___/
/ /___/ /_/ / / / / / / /_/ / /_/ (__ ) __/ /
\____/\____/_/ /_/ /_/ .___/\____/____/\___/_/
/_/
Composer version 1.0-dev (b23a3cd36870ff0eefc161a4638d9fcf49d998ba) 2014-11-21 17:59:11
CakePHPのインストール
次にCakePHPをインストールしていきます。
Composerを利用したインストール方法はCakePHPのホームページに載っていますので、それに従ってインストールしていきます。
CakePHP>Document>Book>インストール>応用インストール>
CakePHP 公式ドキュメント
composer.jsonファイルの作成
Composerを使うにはcomposer.jsonという設定ファイルを作る必要があります。
まずプロジェクト用のディレクトリを作成してそこにcomposer.jsonファイルを作っていきます。
$ mkdir myprjt
$ cd myprjt
$ vi composer.json
composer.jsonファイルの内容は以下になります。
{
"name": "myprjt",
"repositories": [
{
"type": "pear",
"url": "http://pear.cakephp.org"
}
],
"require": {
"cakephp/cakephp": ">=2.4.9"
},
"config": {
"vendor-dir": "Vendor/"
}
}
CakePHPのインストール
これで準備が整いました。myprjtディレクトリでインストールコマンドを実行するとCakePHPがインストールされます。
$ composer install
Loading composer repositories with package information
Initializing PEAR repository http://pear.cakephp.org
Installing dependencies (including require-dev)
- Installing cakephp/cakephp (2.5.6)
Loading from cache
Writing lock file
Generating autoload files
Vendorディレクトリが作成されて、その中にCakePHPがインストールされました。
次にアプリケーションのスケルトン部分を作成するためCakePHPのbakeを実行します。今回は「app」というアプリケーション名で作成します。
$ Vendor/bin/cake bake project app
Welcome to CakePHP v2.5.6 Console
---------------------------------------------------------------
App : myprjt
Path: /home/userdir/myprjt/
---------------------------------------------------------------
Skel Directory: /home/userdir/myprjt/Vendor/cakephp/cakephp/lib/Cake/Console/Templates/skel
Will be copied to: /home/userdir/myprjt/app
---------------------------------------------------------------
Look okay? (y/n/q)
[y] > y
---------------------------------------------------------------
Created: app in /home/userdir/myprjt/app
---------------------------------------------------------------
* 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 /home/userdir/myprjt/Vendor/cakephp/cakephp/lib in webroot/index.php
* CAKE_CORE_INCLUDE_PATH set to /home/userdir/myprjt/Vendor/cakephp/cakephp/lib in webroot/test.php
* Remember to check these values after moving to production server
Project baked successfully!
アプリケーションのスケルトン部分が作成されました。ディレクトリ構造は以下のようになっています。
myprjt/
composer.json
composer.lock
Vendor/
autoload.php
bin/
cakephp/
composer/
app/
Composerを使用した場合、bakeで作成したスケルトンはそのままでは動作しません。app/webroot/index.phpのCAKE_CORE_INCLUDE_PATHを修正する必要があります。
define('CAKE_CORE_INCLUDE_PATH', ROOT . DS . 'Vendor' . DS . 'cakephp' . DS . 'cakephp' . DS . 'lib');
app/webroot/test.phpも同様にCAKE_CORE_INCLUDE_PATH を定義しているので、index.phpと同様に修正しておきます。
Composer で他のライブラリをインストールしている場合、Composerのオートローダーで問題が起きるので、app/Config/bootstrap.phpに以下の行を追加します。
// composerのautoloadを読み込み
require ROOT . DS . '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);
これでApacheのバーチャルホストを設定すれば、いつものCakePHPの初期画面が現れると思います。
DebugKitのインストール
CakePHPの初期画面で「DebugKitがインストールされていませんよ」という警告が出ているので、DebugKitを入れてみます。
こちらもComposerを利用してインストールします。
CakePHPのインストールで使用したcomposer.jsonを編集します。
{
"name": "myprjt",
"repositories": [
{
"type": "pear",
"url": "http://pear.cakephp.org"
}
],
"require": {
"cakephp/cakephp": ">=2.4.9",
"cakephp/debug_kit": "2.2.*"
},
"config": {
"vendor-dir": "Vendor/"
}
}
require の部分にcakephp/debug_kitを追加しました。これでComposerにアップデートをかけます。
$ composer update
Loading composer repositories with package information
Initializing PEAR repository http://pear.cakephp.org
Updating dependencies (including require-dev)
- Installing composer/installers (v1.0.18)
Loading from cache
- Installing cakephp/debug_kit (2.2.5)
Downloading: 100%
Writing lock file
Generating autoload files
myprjtディレクトリの下にPluginというディレクトリができ、その下にDebugKitが作成されました。
次にプラグインを有効化します。app/Config/bootstrap.phpに以下の行を追加します。
App::build(array(
'Plugin' => ROOT . '/Plugin/',
));
CakePlugin::load('DebugKit');
また、app/Controller/AppController.phpでDebugKit.Toolbar を使用するようにします。
class AppController extends Controller {
public $components = array('DebugKit.Toolbar');
}
CakePHPの画面にアクセスしてみると “DebugKit plugin is present” と出ているので有効化されました。
ただ、画面の下の方にスクロールしていくと、表示が崩れてしまっています。DebugKitの画像やCSSがうまく取得できていません。
app/webroot/にDebugKitの画像、CSSへのシンボリックリンクを作ります。
$ cd ~/myprjt/app/webroot/
$ ln -s ../../Plugin/DebugKit/webroot/ debug_kit
無事、DebugKitが動作するようになり、画面の右上にDebugKitのツールバーが表示されました。