The Cookbook の CakePHP ブログチュートリアルを実践してみる(1)

CakePHP 1.2 の学習を兼ねて The Cookbook の CakePHP ブログチュートリアルを実際に作成してみます ↓↓↓
http://book.cakephp.org/ja/view/219/CakePHP%E3%83%96%E3%83%AD%E3%82%B0%E3%83%81%E3%83%A5%E3%83%BC%E3%83%88%E3%83%AA%E3%82%A2%E3%83%AB

[ 10.1.1 Cakeをダウンロード ]

私のブログの CakePHP のインストールを参考にして cake_blog_tutorial という名前で eclipse のプロジェクトを作成します。
また、http://localhost/cake_blog_tutorial でアクセスできるように Apache の Alias の設定と、CakePHP.htaccess の設定をします。

[ 10.1.2 ブログデータベースの作成 ]

cake_blog_tutorial というデータベースを作成し、その中にテーブルを作成することにします。文字コードUTF-8 を使用します。
ターミナルから mysql に root ユーザでログインし、以下のコマンドを入力します。

mysql> CREATE DATABASE cake_blog_tutorial CHARACTER SET utf8;

CREATE TABLE 文 と、複数の INSERT 文を ターミナルから入力するのは手間なので、SQL ファイルを作成し、それを mysql に読み取らせる方法を取ります。テーブルのストレージエンジンは、トランザクション セーフな InnnoDB を。 文字コードUTF-8 を使用します。
以下の create_table.txt を作成します。

/Users/ユーザ名/create_table.txt
CREATE TABLE posts (
    id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
    title VARCHAR(50),
    body TEXT,
    created DATETIME DEFAULT NULL,
    modified DATETIME DEFAULt NULL
) ENGINE InnoDB CHARACTER SET utf8;

INSERT INTO posts(title, body, created, modified )
    VALUES( 'title1', 'body1', now(), now() );

INSERT INTO posts(title, body, created, modified )
    VALUES( 'title2', 'body2', now(), now() );

INSERT INTO posts(title, body, created, modified )
    VALUES( 'title3', 'body3', now(), now() );


ターミナルから mysql に root ユーザでログインし、以下のコマンドを入力します。 source コマンドが mysql に ファイルから SQL 文を読み取らせるためのコマンドです。

mysql> use cake_blog_tutorial
mysql> source /Users/ユーザ名/create_table.txt


次に、データベースにアクセスするためのユーザを作成します。
cake_blog_tutorial データベースの全テーブルに対し、SELECT , INSERT , UPDATE , DELETE を行う事ができるユーザ : cake_blog を作成します( パスワード : 12345 )。
ターミナルから mysql に root ユーザでログインし、以下のコマンドを入力します。

mysql> GRANT SELECT, INSERT, UPDATE, DELETE ON cake_blog_tutorial.* TO 'cake_blog'@'localhost' IDENTIFIED BY '12345';

CakePHP インストールのつづき ( mod_rewrite の設定 )

CakePHP を動作させるため、URL の書き換えやリダイレクトを行う Apache モジュール mod_rewrite の設定をします。


mod_rewrite を利用せずに CakePHP を動作させることも可能です。


まずは mod_rewriteApache の起動時にロードされるように設定を編集します。 vi 等のエディタで Apache の設定ファイル /etc/apache2/httpd.conf を開きます。


LoadModule の項目に以下の記述があるか確認します。
無ければ追記します。
# でコメントアウトされていれば # を削除し、コメントを外します。

LoadModule rewrite_module libexec/apache2/mod_rewrite.so

httpd.conf を変更後は apachectl コマンドで Apache を再起動します。


次に mod_rewrite の設定が記述されているCakePHP.htaccess を修正します。
CakePHP では以下の 3 箇所に .htaccess が存在します。

インストールディレクトリは ~/Sites/eclipse_workspace/cake_sample としたので、順にファイルを修正していきます。

~/Sites/eclipse_workspace/cake_sample/.htaccess

RewriteBase を追記します。

<IfModule mod_rewrite.c>
    RewriteEngine    on
    RewriteRule      ^$ app/webroot/ [L]
    RewriteRule      (.*) app/webroot/$1 [L]
</IfModule>

↓↓↓

<IfModule mod_rewrite.c>
    RewriteEngine    on
    RewriteBase      /cake_sample
    RewriteRule      ^$ app/webroot/ [L]
    RewriteRule      (.*) app/webroot/$1 [L]
</IfModule>
~/Sites/eclipse_workspace/cake_sample/app/.htaccess

RewriteBase を追記します。

<IfModule mod_rewrite.c>
    RewriteEngine    on
    RewriteRule      ^$ webroot/ [L]
    RewriteRule      (.*) webroot/$1 [L]
</IfModule>

↓↓↓

<IfModule mod_rewrite.c>
    RewriteEngine    on
    RewriteBase      /cake_sample/app
    RewriteRule      ^$ webroot/ [L]
    RewriteRule      (.*) webroot/$1 [L]
</IfModule>
~/Sites/eclipse_workspace/cake_sample/app/.htaccess

RewriteBase を追記します。

<IfModule mod_rewrite.c>
    RewriteEngine    on
    RewriteCond      %{REQUEST_FILENAME} !-d
    RewriteCond      %{REQUEST_FILENAME} !-f
    RewriteRule      ^(.*)$ index.php?url=$1 [QSA,L]</IfModule>

↓↓↓

<IfModule mod_rewrite.c>
    RewriteEngine    on
    RewriteBase      /cake_sample/app/webroot
    RewriteCond      %{REQUEST_FILENAME} !-d
    RewriteCond      %{REQUEST_FILENAME} !-f
    RewriteRule      ^(.*)$ index.php?url=$1 [QSA,L]
</IfModule>


最後に、CakePHP の tmp ディレクトリのパーミッションを 777 に変更します。
ターミナルから下記のコマンドを入力します。

$ cd /Users/ユーザ名/Sites/eclipse_workspace/cake_blog_tutorial/app
$ chmod -R 777 tmp


完了したら http://localhost/cake_sample へアクセスしてみます。


CakePHP の初期画面が表示され、CSS 等が反映されていれば成功です。

CakePHP のインストールと Apache の仮想ディレクトリ ( Alias ) の設定

以下のページより CakePHP をダウンロードします。
ダウンロードするバージョンは最新の 1.2 系です。
http://cakephp.org/


開発には Eclipse を利用しますので、先に Eclipse を立ち上げ、ワークスペースとプロジェクトを作成しておきます。

ワークスペースは ~/Sites/eclipse_workspace とします。

プロジェクトは cake_sample とします。

ワークスペースとプロジェクトを作成すると ~/Sites/eclipse_workspace/cake_sample ディレクトリが作成されます。


ダウンロードしてきた CakePHPdmg ファイルをダブルクリックすると、以下のファイル ( フォルダ ) が表示されます。

README 以外のファイル ( フォルダ ) をドラッグして Eclipse の cake_sample プロジェクトの中へ移動させます。


インストールは以上で完了です。


※ Finder で隠しファイルを表示するようにしておかないと .htaccess が表示されず、ドラッグでの移動もできません。


つづいて ~/Sites/eclipse_workspace/cake_sample ディレクトリへ http://localhost/cake_sample/ でアクセス出来るように、Apache の仮想ディレクトリ ( Alias ) の設定をします。


vi 等のエディタで Apache の設定ファイル /etc/apache2/httpd.conf を開きます。 


LoadModule の項目に以下の記述があるか確認します。
無ければ追記します。
# でコメントアウトされていれば # を削除し、コメントを外します。

LoadModule alias_module libexec/apache2/mod_alias.so


次に ディレクティブの中に以下を追記します。

Alias /cake_sample /Users/ユーザ名/Sites/eclipse_workspace/cake_sample

<Directory "/Users/ユーザ名/Sites/eclipse_workspace/cake_sample">
    Options ExecCGI Includes FollowSymLinks
    AllowOverride All
    Order allow,deny
    Allow from all
</Directory>

httpd.conf を変更後は apachectl コマンドで Apache を再起動します。

このコマンドは一般ユーザには許可されていないため sudo コマンドを利用します。

ターミナルから以下のコマンドを入力します。

$ sudo apachectl restart


次回は mod_rewrite と .htacces の設定を行い、CakePHP の初期ページを表示させます。

CakePHP とは

CakePHPPHP 用のフレームワークです。 
PHP 用のフレームワークとして有名なものは他にも symfony, Zend Framework, CodeIgniter 等々があります。

CakePHP の特徴は以下の通りです。

  • Rails の設計思想がベースになっている
  • ORM で ActiveRecord を実装している
  • PHP4, PHP5 の両方に対応している
  • インストールが容易
  • 軽量

主な点は以上かと思います。


仕事では symfony を利用しているのですが、symfonyPEAR でインストールしないといけない、symfony 自体がデカイというのが symfony を好きになれない理由です。もちろん、良い点もいっぱいあるのですが ... (苦笑)

symfony と比較しての CakePHP ですが、できることは大差無いのではと思いますし、速度的にも大差は無いはずです。個人的に気に入っているのは

  • インストールが容易( ダウンロードして解凍するだけ )
  • しっかりとした日本語のフォーラムがある
  • CakePHP 本体はデカく無いのでソースを読むのが苦では無い
  • DB のカラムを追加等してもモデルクラスを修正する必要が無い
  • bake コマンドでソースの自動生成ができる(symfonyにもソースの自動生成コマンドがあったはず ... )

といったところでしょうか。

逆に不便な点として、CakePHP は配列を多用するので、ネストした配列が見づらくなり、かなり不便です。


次回は CakePHP のインストールを行いたいと思います。

Finder で隠しファイルを表示する

Finder では . で始まる隠しファイルはデフォルトで表示されないようになっています。 ( .bash_profile , .htaccess 等々)


Finder で隠しファイルを表示するには以下のコマンドを入力します。

$ defaults write com.apple.finder AppleShowAllFiles TRUE
$ killall Finder

反対に、隠しファイルを非表示するには以下のコマンドを入力します。

$ defaults write com.apple.finder AppleShowAllFiles FALSE
$ killall Finder

※ killall Finder は、Finder を再起動するためのコマンドです。

統合開発環境 Eclipse ( PDT ) のインストール

PHP の開発がメインとなるので、PDT( PHP Development Tools ) の All-In-One パッケージをインストールします。
以下のサイトより、PDT の All-In-One パッケージ Mac OS X Carbon 用をダウンロードします。
http://www.eclipse.org/pdt/downloads/


ダウンロードしたファイルを解凍し、/Application/eclipse ディレクトリへ展開します。


次に、Eclipse の日本語化プラグイン Pleiades をインストールします。
以下のサイトより、Pleiades の本体ファイルのみをダウンロードします。
http://mergedoc.sourceforge.jp/


ダウンロードしたファイルを解凍し、features ディレクトリ内の jp.sourceforge.mergedoc.pleiades ディレクトリを /Application/eclipse/features ディレクトリ内へ移動します。
同様に、plugins ディレクトリ内の jp.sourceforge.mergedoc.pleiades ディレクトリを /Application/eclipse/plugins ディレクトリ内へ移動します。


最後に Eclipse の設定ファイル eclipse.ini を編集します。
vi 等のエディタで /Applications/eclipse/Eclipse.app/Contents/MacOS/eclipse.ini を開きます。


以下の 2 行を削除します。

-showsplash
org.eclipse.platform


以下の 1 行を末尾に追記します。

-javaagent:/Applications/eclipse/plugins/jp.sourceforge.mergedoc.pleiades/pleiades.jar=no.mnemonic


Eclipse を起動します。
Pleiades 等のプラグインをインストールした初回起動時のみ -clean オプションをつけて起動する必要があります。
ターミナルから以下のコマンドを入力します。

$ /Applications/eclipse/eclipse -clean

PHP と MySQL の連携

PHP が参照している MySQL ソケットファイルのパスを修正します。


まずソケットファイルのパスを確認します。
ターミナルから MySQL へアクセスし、以下のコマンドを入力します。

mysql> status
・・・
UNIX socket:    /tmp/mysql.sock
・・・

表示されたステータスのうち、上記の部分がソケットファイルのパスです。


上記をもとに PHP の設定ファイル /etc/php.ini を編集します。
/etc/php.ini が存在しない場合は /etc/php.ini.default をコピーして作成します。
ターミナルから以下のコマンドを入力します。
一般ユーザには許可されていないディレクトリのファイルを操作するので sudo コマンドを利用します。

$ sudo cp /etc/php.ini.default /etc/php.ini
$ sudo chmod 644 /etc/php.ini


vi 等のエディタで /etc/php.ini を開きます。
以下の行を修正します。

mysql.default_socket =

↓ ↓ ↓

mysql.default_socket = /tmp/mysql.sock

php.ini を変更後は apachectl コマンドで Apache を再起動します。
このコマンドは一般ユーザには許可されていないため sudo コマンドを利用します。
ターミナルから以下のコマンドを入力します。

$ sudo apachectl restart