LIGのメルマガ、はじめました!
LIGのメルマガ、はじめました!
2012.07.09

楽々開発!CakePHP2.1.3でBakeを利用する方法(+注意事項)【第一章】

tetsu

こんにちは、tetsuです。今回はCakePHPでBakeを利用する方法について紹介します。

Bakeとは

CakePHPのMVCによるWebアプリケーションの基本部分を自動生成するためのPHPスクリプトです。対話型インターフェイスにより、基本的なMVC関係のファイルを超高速で作成することができます。

注意事項

Bakeを利用するにあたって注意があります。2012.07.02時点ではCakePHP2.1.3でBakeを行うと、環境によって「PHP Warning」が大量に発生するようです。これを回避するには、Bakeで利用されるファイルの修正が必要になります。

次のようなエラーが発生した場合は修正を行ってください。
■「PHP Warning」内容

PHP Warning: preg_replace_callback(): Compilation failed: unrecognized character after (?< at offset 4 in /var/www/cakelib/cakephp_2_1_3/Cake/Console/ConsoleOutput.php on line 186

■修正箇所
「/Cake/Console/ConsoleOutput.php」の186行目にある

'/[a-z0-9-_]+)>(?.*?)/ims', array($this, '_replaceTags'), $text

'/[a-z0-9-_]+)>(?P.*?)/ims', array($this, '_replaceTags'), $text

と変更します。

この問題は上記の対象ファイルにもともと記載されている処理内容は
PCREの7.0からサポートされている正規表現の書き方のため、
PCREのバージョンが低い場合に発生します。
ご利用されるサーバー環境に合わせて書き換えてあげる必要があります。

ここから始まり始まり

冒頭から注意点でしたが、ここからBakeについてです。Bakeを実行するコマンド例は次の通りです。

cd Cake/Console/
php bake.php bake -app /var/www/html/test

最初の「cd」コマンドでCakePHPのコアライブラリにある「Console」ディレクトリへ移動するので、ご利用の環境に合わせて変更してください。2行目のコマンドで実際Bakeが起動します。

Welcome to CakePHP v2.1.3 Console
---------------------------------------------------------------
App : test
Path: /var/www/html/test/
---------------------------------------------------------------

上記のように表示されればBakeが開始された状態になり、ここで最初の質問が入ります。

What is the path to the project you want to bake?
[/var/www/html/test/myapp] >

プロジェクトへのパスを指定する質問です。ここではBakeのプロジェクトを利用しないので、最初にapp指定したパス「/var/www/html/test」を入力して次へ進みます。

What is the path to the directory layout you wish to copy?
[/Cake/Console/Templates/skel] >

続いての質問ではコピーするデフォルトのレイアウトデータを指定します。ここではCakePHPデフォルトのレイアウトデータを利用する前提にするので未入力のまま次へ進みます。

Look okay? (y/n/q)
[y] >

ここまでの入力に問題が無ければ「y」を入力することでデータベースへの接続設定について質問が始まります。入力をやり直したい場合は「n」を入力してください。

データベース設定

---------------------------------------------------------------
Database Configuration:
---------------------------------------------------------------
Name:
[default] >

ここでは、データベースの設定名を入力します。複数のデータベース接続設定を行う場合を除き、未入力で進みます。

Datasource: (Mysql/Postgres/Sqlite/Sqlserver)
[Mysql] >

ここでは利用するデータベースを指定します。未入力の場合は「MySQL」が選択されますので、ご利用の環境に合わせて指定してください。

Persistent Connection? (y/n)
[n] >

ここではデータベースの持続的接続を行うかどうかを指定します。基本的に持続的接続は行わないので、未入力で次へ進みます。

Database Host:
[localhost] >

ここではデータベースの接続先ホスト名を指定します。ほとんどの場合は「localhost」なので未入力で次へ進みますが、ご利用の環境で、Webサーバーとデータベースサーバーが別々に存在する場合はここで指定してください。

Port?
[n] >

ここではデータベースへの接続ポート番号を指定します。何らかの理由でデータベースのポート番号がデフォルトから変更されている場合は、ここでポート番号を指定してください。ほとんどの場合は未入力で進みます。

User:
<pre>[code] >

ここではデータベースへの接続ユーザー名を入力します。ご利用の環境に合わせてユーザー名を入力して次へ進みます。

Password:
>

ここではデータベースの接続ユーザーのパスワードを入力します。ご利用の環境に合わせてパスワードを入力して次へ進みます。

Database Name:
<pre>[code] >

ここでは利用するデータベース名を指定します。未入力の場合はデータベース名「cake」が指定されますので、ご利用の環境に合わせてデータベース名を入力してください。

Table Prefix?
[n] >

ここではテーブルのプレフィックスを指定します。「app_users」や「app_products」のテーブル名が存在した場合に、このままBakeを行うとモデル名が「appUser」や「appProduct」になるので「app_」を含まない場合はここで「app_」を指定することで「User」や「Product」のモデルとされます。ご利用の環境に合わせて入力してください。

Table encoding?
[n] >

ここではデータベースの文字コードを指定します。ほとんどの場合「UTF-8」の文字コードを利用するかと思いますので「utf8」と入力します。開発に合わせて指定してください。

入力が完了すると、入力した内容が表示されます。
例)

---------------------------------------------------------------
The following database configuration will be created:
---------------------------------------------------------------
Name: default
Datasource: {入力した 利用データベース}
Persistent: false
Host: {入力したデータベース ホスト名}
User: {入力したデータベース ユーザー名}
Pass: ********
Database: {入力したデータベース名}
Encoding: {入力した文字コード}
---------------------------------------------------------------
Look okay? (y/n)
[y] >

入力内容に間違えが無ければ「y」と入力して進むことで最後の質問に行きます。

Do you wish to add another database configuration?
[n] >

最後に別のデータベース設定を追加する場合に「y」と入力することで、複数のデータベース設定を設定することが可能です。ここでは複数のデータベースは利用しないので「n」と入力してBakeを完了させます。

Bake完了

ここまでの作業で、Bakeの最初の出力作業が完了します。

…が、ブラウザから出力された場所へアクセスすると表示されません。
というのも、Bakeのデフォルトテンプレートである「webroot/index.php」にある61行目がコメントアウトされているため動作しないのです。Bakeするたびにコメントアウトを外すことで次のような画面が表示されます。

これでBakeの基本作業は完了です。

次回はモデルやコントローラー、ビューの出力について 解説していきます。