CakeFest 2014
Improve this Doc

ブログチュートリアル

Cakeをさっそく使ってみましょう。 このチュートリアルを読んでいるのは、Cakeの動作に関してさらに学びたいと思っているからだと思います。 私たちは、生産性を高め、コーディングがさらに楽しいものになることを目指しています。 コードを調べているうちに、きっとあなたもそのことに気が付くでしょう。

このチュートリアルでは、シンプルなブログアプリケーションを作成します。 Cakeを取得してインストールし、データベースの設定を行い、ブログの投稿記事の一覧表示(list)、追加(add)、編集(edit)、削除(delete)などのアプリケーションロジックを作成します。

必要なもの:

  1. 動作しているWebサーバ。 Apacheを使っているという前提で書いてありますが、他の種類のサーバを使用する場合でも、ほぼ同じにいけるはずです。 サーバの設定を少し変える必要があるかもしれませんが、たいていの人は、そのままの設定でCakeを動作させることが可能です。 PHP 5.2.8以上が動作していることを確認してください。
  2. データベースサーバ。 このチュートリアルでMySQLを使用します。 データベースを作成できる程度のSQLの知識が必要です。 その先はCakeが面倒をみてくれます。 MySQLを使用するので、PHPで pdo_mysql が有効になっていることを確認してください。
  3. PHPの基本的な知識。 オブジェクト指向プログラミングに慣れていれば非常に有利ですが、手続き型に慣れているという人でも心配する必要はありません。
  4. 最後に、MVCプログラミングに関する基本的な知識が必要です。 概要については、 MVC(Model-View-Controller)を理解する を見てください。 半ページぐらいの説明ですので、心配はご無用です。

それでは、はじめましょう!

Cakeのダウンロード

まずは、最新のCakeのコードをダウンロードしてきましょう。

最新のCakeをダウンロードするには、GitHubにあるCakePHPプロジェクトを見てみましょう: https://github.com/cakephp/cakephp/tags そして、2.0の最新リリースをダウンロードします。

または、 git を使ってレポジトリをcloneすることもできます。 git clone git://github.com/cakephp/cakephp.git

どちらにしても、ダウンロードしたコードをDocumentRoot内に配置してください。 そうすると、ディレクトリは次のようになります:

/path_to_document_root
    /app
    /lib
    /plugins
    /vendors
    .htaccess
    index.php
    README

Cakeのディレクトリ構造について少し学んでおきましょう: CakePHPのフォルダ構造 のセクションをチェックしてください。

Tmpディレクトリのパーミッション

次に、 app/tmp ディレクトリをWebサーバから書き込めるように設定します。 これを行うためのいちばんいい方法は、 Webサーバを動作させているユーザーを見つけることです。 次のコード <?php echo exec('whoami'); ?> を任意のPHPファイルに記述して、Webサーバで実行してみましょう。 すると、Webサーバを実行しているユーザの名前が表示されるはずです。 そのユーザーに app/tmp ディレクトリの所有権を変更します。 実行するコマンドは (*nixで) このようになります:

$ chown -R www-data app/tmp

何らかの理由でCakePHPがそのディレクトリに書き込めない場合は、キャッシュデータが書き込めないという警告や例外が表示されます。

ブログデータベースの作成

次に、ブログで使用する基礎的なデータベースをセットアップしましょう。 データベースをまだ作成していないのであれば、このチュートリアル用に好きな名前で空のデータベースを作成しておいてください。 このページでは、投稿記事を保存するためのテーブルをひとつ作成します。 次のSQLをデータベースで実行してください。:

/* まず、postsテーブルを作成します: */
CREATE TABLE posts (
    id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
    title VARCHAR(50),
    body TEXT,
    created DATETIME DEFAULT NULL,
    modified DATETIME DEFAULT NULL
);

/* それから、テスト用に記事をいくつか入れておきます: */
INSERT INTO posts (title,body,created)
    VALUES ('タイトル', 'これは、記事の本文です。', NOW());
INSERT INTO posts (title,body,created)
    VALUES ('またタイトル', 'そこに本文が続きます。', NOW());
INSERT INTO posts (title,body,created)
    VALUES ('タイトルの逆襲', 'こりゃ本当にわくわくする!うそ。', NOW());

テーブル名とフィールド名は適当に選んだわけではありません。 Cakeのデータベース命名規約とクラスの命名規約に従っておくと、(どちらも、 CakePHPの規約 の中で説明されています)たくさんの機能を自由に使うことができ、設定作業をする必要がなくなります。 Cakeはフレキシブルなので、最悪な従来型のデータベーススキーマにも対応することができますが、規約に従えば、時間を節約することができます。

詳細は、 CakePHPの規約 を参照してください。 簡単に言うと、’posts’というテーブル名にしておけば、自動的にPostモデルが呼び出され、’modified’と’created’というフィールドがあると、自動的にCakeが管理するようになります。

Cakeのデータベース設定

どんどん進みましょう。 データベースがどこにあって、どうやって接続するかをCakeに教えます。 多くの人にとって、設定(configure)をする最初で最後の機会です。

CakePHPのデータベース設定ファイルの元は、 /app/Config/database.php.default の中にあります。 同一ディレクトリ上にこのファイルのコピーを作り、 database.php という名前にしてください。

この設定ファイルの中身は一目瞭然です。 $default 配列の値を自分のセットアップに合わせて変更するだけです。 完全な設定の配列の例は次のようなものになるでしょう:

public $default = array(
    'datasource' => 'Database/Mysql',
    'persistent' => false,
    'host' => 'localhost',
    'port' => '',
    'login' => 'cakeBlog',
    'password' => 'c4k3-rUl3Z',
    'database' => 'cake_blog_tutorial',
    'schema' => '',
    'prefix' => '',
    'encoding' => 'utf8'
);

新しくできた database.php ファイルを保存したら、ブラウザをあけて、Cakeのwelcomeページを開いてください。 データベース接続のファイルがある、そしてデータベースに接続できる、というメッセージが表示されるはずです。

ノート

PDOとpdo_mysqlがphp.iniで有効になっている必要があることを覚えておいてください。

追加の設定

設定できる項目があといくつかあります。 たいていの開発者はこれらの詳細なリストも仕上げますが、このチュートリアルに必要不可欠、というわけではありません。 ひとつは、セキュリティハッシュ用のカスタム文字列(「salt」ともいう)です。 二つ目は、独自の番号(「seed」ともいう)を暗号化用に定義するということです。

セキュリティ用のsaltは、ハッシュの生成に用いられます。 /app/Config/core.php を編集し、デフォルトの Security.salt の値を変更してください。 この値は、ランダムで長い文字列にします。そうすることで推測がより困難になります。:

/**
 * A random string used in security hashing methods.
 */
Configure::write('Security.salt', 'pl345e-P45s_7h3*S@l7!');

サイファシード(cipher seed)は暗号化・復号化のための文字列です。 /app/Config/core.php を編集して Security.cipherSeed をデフォルト値から変更してください。 この値は、大きくてランダムな整数でなければなりません:

/**
 * A random numeric string (digits only) used to encrypt/decrypt strings.
 */
Configure::write('Security.cipherSeed', '7485712659625147843639846751');

mod_rewriteについて

新しいユーザはmod_rewriteでつまずくことがよくあります。 例えばCakePHPのwelcomeページが少しおかしくなったりします(画像が表示されない、CSSが効いていない)。 これはおそらく、システム上のmod_rewriteが機能していないということです。 以下のいずれかの項目を参照して、URLリライティングが有効になるように設定してください。

はじめてのCakePHPアプリケーションを構築しはじめるには、続けて ブログチュートリアル - レイヤーの追加 を見てください。