cakeコンソールのBakeを使ったアプリケーションのセットアップ

CakePHP 1.3.0 での Bake の動きを調べてみました。
Cookbook って cake コンソールや Bake について、あんまり書いてないんですよね。
Bakeは色々と機能があるようなので、まずは最初のアプリケーションのセットアップと、データベース設定について、
bake project と bake db_config です。

環境

Mac Mac OS X 10.5.8(Leopard
MAMP 1.7.2
CakePHP 1.3.0
php 5.2.6
CakePHP本体(コア)のパス /Users/myuser/Dev/cakephp1.3.0
作成するアプリケーション(APP)のパス /Users/myuser/Dev/cakephp_baked


/Users/myuser/Dev/cakephp1.3.0/app にアプリケーションフォルダがあるけど、コアとAPPは分離したい。
コアもAPPも、PDTのプロジェクトとして別々に登録してます。
なので cake -app オプションを使います。

cake コンソール

/Users/myuser/Dev/cakephp_baked はまだ無い状態からスタート。

cake コンソールの場所
$ cd $HOME/Dev/cakephp1.3.0/cake/console
$ pwd
/Users/myuser/Dev/cakephp1.3.0/cake/console

cake コンソールはコアの方にある。

絶対パスでAPPの場所を指定して cake コンソールを起動
$ ./cake -app $HOME/Dev/cakephp_baked
Welcome to CakePHP v1.3.0 Console
---------------------------------------------------------------
Current Paths:
 -app: cakephp_baked
 -working: /Users/myuser/Dev/cakephp_baked
 -root: /Users/myuser/Dev/
 -core: /Users/myuser/Dev/cakephp1.3.0
以下略
相対パスでAPPの場所を指定して cake コンソールを起動
$ ./cake -app ../cakephp_baked
Welcome to CakePHP v1.3.0 Console
---------------------------------------------------------------
Current Paths:
 -app: cakephp_baked
 -working: /Users/myuser/Dev/cakephp1.3.0/../cakephp_baked
 -root: /Users/myuser/Dev/cakephp1.3.0/..
 -core: /Users/myuser/Dev/cakephp1.3.0
中略
Example: -app relative/path/to/myapp or -app /absolute/path/to/myapp
以下略

相対パスでも使えるみたいですが、なんか汚い感じになっちゃってます。
一応、パスは間違ってるわけじゃないんですけどね。
相対パスは、consoleディレクトリからではなく、コアからの相対のようです。

Bakeについて
$ ./cake -app ../cakephp_baked bake help
Welcome to CakePHP v1.3.0 Console
---------------------------------------------------------------
App : cakephp_baked
Path: /Users/myuser/Dev/cakephp1.3.0/../cakephp_baked
---------------------------------------------------------------
CakePHP Bake:
---------------------------------------------------------------
The Bake script generates controllers, views and models for your application.
If run with no command line arguments, Bake guides the user through the class
creation process. You can customize the generation process by telling Bake
where different parts of your application are using command line arguments.
---------------------------------------------------------------
Usage: cake bake <command> <arg1> <arg2>...
---------------------------------------------------------------
Params:
	-app <path> Absolute/Relative path to your app folder.

Commands:

	bake help
		shows this help message.

	bake all <name>
		bakes complete MVC. optional <name> of a Model

	bake project <path>
		bakes a new app folder in the path supplied
		or in current directory if no path is specified

	bake plugin <name>
		bakes a new plugin folder in the path supplied
		or in current directory if no path is specified.

	bake db_config
		bakes a database.php file in config directory.

	bake model
		bakes a model. run 'bake model help' for more info

	bake view
		bakes views. run 'bake view help' for more info

	bake controller
		bakes a controller. run 'bake controller help' for more info

	bake fixture
		bakes fixtures. run 'bake fixture help' for more info.

	bake test
		bakes unit tests. run 'bake test help' for more info.
bake project
$ ./cake -app ../cakephp_baked bake project


Welcome to CakePHP v1.3.0 Console
---------------------------------------------------------------
App : cakephp_baked
Path: /Users/myuser/Dev/cakephp1.3.0/../cakephp_baked
---------------------------------------------------------------
What is the full path for this app including the app directory name?
 Example:/Users/myuser/Dev/cakephp1.3.0/../cakephp_baked/myapp  
[/Users/myuser/Dev/cakephp1.3.0/../cakephp_baked/myapp] > /Users/myuser/Dev/cakephp_baked
Bake Project
Skel Directory: /Users/myuser/Dev/cakephp1.3.0/cake/console/templates/skel
Will be copied to: /Users/myuser/Dev/cakephp_baked
---------------------------------------------------------------
Look okay? (y/n/q) 
[y] > 
Do you want verbose output? (y/n) 
[n] > 
---------------------------------------------------------------
Created: cakephp_baked in /Users/myuser/Dev/cakephp_baked
---------------------------------------------------------------

Creating file /Users/myuser/Dev/cakephp_baked/views/pages/home.ctp
Wrote `/Users/myuser/Dev/cakephp_baked/views/pages/home.ctp`
Welcome page created
Random hash key created for 'Security.salt'
Random seed created for 'Security.cipherSeed'
CAKE_CORE_INCLUDE_PATH set to /Users/myuser/Dev/cakephp1.3.0 in webroot/index.php
CAKE_CORE_INCLUDE_PATH set to /Users/myuser/Dev/cakephp1.3.0 in webroot/test.php
Remember to check these value after moving to production server

これで /Users/myuser/Dev/cakephp_baked にアプリケーションがセットアップできました。

  • app オプションでAPPのパスを指定してる訳ですが、デフォルト値として[/Users/myuser/Dev/cakephp1.3.0/../cakephp_baked/myapp]と /myapp が余計に付いてくるので、ちょっとめんどくさい。
define('CAKE_CORE_INCLUDE_PATH',  DS . 'Users' . DS . 'myuser' . DS . 'Dev' . DS  . 'cakephp1.3.0');

コアのパスを定義する定数 CAKE_CORE_INCLUDE_PATH もセットしてくれた様ですが、この様に絶対パスでの定義なので、運用環境へのデプロイ時には調整が必要になりそう。

$ ls /Users/myuser/Dev/cakephp_baked/
app_controller.php	config			libs			plugins			vendors
app_helper.php		controllers		locale			tests			views
app_model.php		index.php		models			tmp			webroot

基本的にコアにある /Users/myuser/Dev/cakephp1.3.0/app と同じだとは思いますが、appディレクトリからではなく cake/console/templates/skel/ からコピーされてます。
appディレクトリとの違いとしては、app_controller.php や controllers/pages_controller.php などが作られている事や、空のディレクトリに empty というファイルが無いといった所がありました。



追記
CakePHPでbake projectする際、tmp/logsやlibsなど空ディレクトリにemptyを入れておく方法 - kanonjiの日記
emptyを残したままbake projectする方法を見つけました。

bake db_config
$ ./cake -app ../cakephp_baked bake
Welcome to CakePHP v1.3.0 Console
---------------------------------------------------------------
App : cakephp_baked
Path: /Users/myuser/Dev/cakephp1.3.0/../cakephp_baked
---------------------------------------------------------------
Your database configuration was not found. Take a moment to create one.
---------------------------------------------------------------
Database Configuration:
---------------------------------------------------------------
Name:  
[default] > 
以下略
$ ./cake -app ../cakephp_baked bake config
中略
Creating file /Users/myuser/Dev/cakephp1.3.0/../cakephp_baked/config/database.php
File `/Users/myuser/Dev/cakephp1.3.0/../cakephp_baked/config/database.php` exists, overwrite? (y/n/q) 
[n] > y
Wrote `/Users/myuser/Dev/cakephp1.3.0/../cakephp_baked/config/database.php`

アプリケーションが出来たので、次の操作をしようとBakeを実行すると、データベースの設定を求められます。
どうやら config/database.php が無い場合は、先に設定しないとだめみたい。
データベースの設定は bake db_config でやり直す事が出来ます。
最初から bake db_config を使っても同じです。

$ ./cake -app ../cakephp_baked bake
Welcome to CakePHP v1.3.0 Console
---------------------------------------------------------------
App : cakephp_baked
Path: /Users/myuser/Dev/cakephp1.3.0/../cakephp_baked
---------------------------------------------------------------
Interactive Bake Shell
---------------------------------------------------------------
[D]atabase Configuration
[M]odel
[V]iew
[C]ontroller
[P]roject
[F]ixture
[T]est case
[Q]uit
What would you like to Bake? (D/M/V/C/P/F/T/Q) 

データベース設定が済むと、Interactive Bake Shell が起動するようになります。

cake bakeだけで実行してみる
$ rm -fR /Users/myuser/Dev/cakephp_baked

いったんセットアップしたAPPを消します。

$ ./cake -app ../cakephp_baked bake

bake の後に何もオプションを付けないで起動すると、上記の bake project とデータベース設定までを続けて進められます。