cakeでbake

いつかどこかで見た「お前らはだまってcake(笑)でbake(笑)でもしとけよ」という煽りが今でも忘れられません。甘党の僕としては、結構好きな響きなのですが。
初めてbakeした時にちょっとつまったことを思い出し、bakeしつつメモ。
バージョンはCakePHP1.3.14です。XAMPP for Mac 1.7.3 の上で動かしています。

bakeでできること

bakeでは、アプリケーション構築に必要なファイル群を、コマンドライン上での対話形式で作成できます。データベースとテーブルさえあれば、スピーディーにテーブルごとのCRUD機能とデフォルトビューを備えたアプリケーションが完成します。
初見ではMVCそれぞれのファイルを生成できる、という認識でした。しかしそれに加え、database.phpを作成=database設定を作成する機能と、新appディレクトリ=プロジェクトを作成する機能も備えていて、これでちょっと混乱したんですよね。公式のマニュアルと表示が違うぞ、しかもそれについて説明ないぞと。

bakeの実行

alias作成

本筋とは関係ないですが、XAMPPのせいでパスが超絶長いので最初にalias作っちゃいます。VPS上でLAMP環境構築もやったので、そろそろXAMPP卒業すべきかな…
.bashrcを開く(ない場合は新規作成)

$sudo vi .bashrc
.bashrcにCakePHPディレクトリへのaliasを追加
alias cakedir='/Applications/XAMPP/xamppfiles/htdocs/Cake1.3/'
bashの再起動を忘れずに。
.bashrcをbash起動時に読み込ませる設定をしていない場合はこっち

bakeを行うディレクトリに移動

※注意 移動しなくても下記のようにbakeを行うディレクトリパス指定するとかbake開始後正しくパス指定すれば問題ないです。

cake bake -app bakeを実行したいディレクトリのフルパス

本当に情けないんですが、最初僕はこれを知らず行き詰まりました。rootから長々とパスを指定してcakeコンソールを起動していたのですが、

What is the full path for this app including the app directory name?
とbakeのプロジェクト作成モード(cake bake project)に突入しちゃうんですね。話が違うぞと。
これを避けるために、さっき作ったcakedir使いつつappまで移動
$cakedir
$cd app

cakeでbake!

path通してないのでcakeのパスをしっかり指定して実行

$../cake/console/cake bake
これが表示されれば成功。

What would you like to Bake? (D/M/V/C/P/F/T/Q)

M モデルの作成(CとVは略)

XAMPP+bakeでエラーが発生するみたいですね。下記は一例。

Warning: mysql_connect(): [2002] No such file or directory (trying to connect via unix:///var/mysql/mysql.sock) in /Applications/XAMPP/xamppfiles/htdocs/Cake1.3/cake/libs/model/datasources/dbo/dbo_mysql.php on line 561

これはdatabase.phpの'localhost'を'127.0.0.1'に書き換えることで解決します。
詳しい知識はないのであれですが、mysqllocalhostと指定すると unix domain socketを使うのですが、IPで指定することで TCP socket を強制的に使わせることができるのだそうです。

あるいは素直に設定のずれを解消する方法もあります。下記の記事が参考になるかと思います。