ComposerでCakePHPのプロジェクトをセットアップする

インターンでcomposerという便利なものを知ったので、自分の環境でも試してみました。

環境

  • Debian8
  • nginx

 

やること

  • ComposerでCakePHPプラグインを管理する。
  • project/appにアプリケーションを構築する。

 

Composerのインストール

curl -sS https://getcomposer.org/installer | php

curl入ってない場合はwgetでもいいかもしれません(未確認)

wget -O - https://getcomposer.org/installer | php

このままでは使いにくいので、パスの通っているディレクトリに移動します。

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

 

なお、今後出てくるphpコマンドは必要に応じてphp5に読み替えてください。

 

プロジェクトの準備

プロジェクトのルートディレクトリで、composer initを実行します。

composer init

いろいろ聞かれますが、アプリケーション名とか作者とかは適当に入力してください。

途中で、requireとrequire-devを使うか聞かれたら、yを押して以下を入力します。

require

cakephp/cakephp

require-dev

cakephp/debug_kit

入力すると、いくつか候補が表示されるので、該当するものを番号で選択します(おそらく0を入力することになると思います)。

それぞれ決定したあとに、バージョン番号を聞かれるので任意のバージョンを入力します。

最後に生成されるファイルが表示されるのでyesを入力すると完了です。自分の環境では以下のようなファイルが出力されました。

composer.json

{

"name": "zakuro9715/project",

"require": {

"cakephp/cakephp": "2.6.*-dev"

},

"require-dev": {

"cakephp/debug_kit": "2.2.*"

},

"license": "MIT",

"authors": [

{

"name": "YuZakuro",

"email": "zakuro@yuzakuro.me"

}

]

}

最後に、パッケージをインストールします。

composer install

 

CakePHPの設定

まず、cakephpのプロジェクトを作成します。

vendor/bin/cake bake project app

この状態ではCAKE_CORE_INCLUDE_PATHがハードコードされているため、別環境に移した時に動作しなくなってしまいます。

そのため、app/webroot/index.phpおよびapp/webroot/test.phpに存在する定数の定義を以下のように変更します。

define(

'CAKE_CORE_INCLUDE_PATH',

ROOT . DS . 'vendor' . DS . 'cakephp' . DS . 'cakephp' . DS . 'lib'

);

また、オートローダの設定をapp/Config/bootstrap.phpの先頭に追加します。

bootstrap.php

// composerのautoloadを読み込み

require APP . '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);

次に、PluginとVendorのパスをbootstrap.phpに追加します。

bootstrap.php

App::build(array(

'Vendor' => array(ROOT . '/Vendor/'),

'Plugin' => array(ROOT . '/Plugin/')

));

最後に、必要に応じてbootstrap.phpの末尾にCakePlugin::loadAllを追加します。

 

表示の確認

ウェブサーバの設定及びデータベースの設定、git initやhg initなどを行いブラウザでアクセスします。エラーが出ていなければ完了です。

 

疑問とか

CAKE_CODE_INCLUDE_PATHの再設定が必要なのはまあ仕方ないとしても、デフォルトが絶対パスなのはなぜだろう。開発環境とプロダクション環境で絶対パスが同じになるとは限らないし(というか普通ならない)、別に相対パスにするのが技術的に難しいとかいうこともない。

おそらくなにか理由があるのだと思うけれど、微妙に納得行かない部分ではある。

 

参考