はじめに - Yiiを使ってブログシステムを作る

作成日:2009/03/28
最終更新日:2009/03/28

このチュートリアルでは、Yiiを用いてブログデモのようなブログアプリケーションをどのように開発するのかを説明します。 開発のステップを順を追って詳細に解説してあります。

ここで述べている内容は、他のウェブアプリケーションの開発においても有用でしょう。

Yiiガイドや、クラスリファレンスの補足として、 このチュートリアルでは、Yiiの実践的な使用法を紹介するのが目的です。

このチュートリアルの読者は、前もってYiiについて知っている必要はありません。
しかし、オブジェクト指向プログラミングと、データベースについての基礎知識があれば、このチュートリアルを理解するよい助けになるでしょう。

このチュートリアルは、the Terms of Yii Documentationのもとでリリースされます。

Yiiの試運転

このセクションでは、出発点となるスケルトンアプリケーションを作る方法を解説します。
説明を簡単にするために、ウェブサーバのドキュメントルートを /wwwroot であると仮定し、対応するURLを http://www.example.com/であるとします。

Yiiのインストール

まずはじめにYiiFrameworkをインストールします。

Yiiのリリースファイルをwww.yiiframework.comから取得し、
/wwwroot/yiiディレクトリに解凍します。/wwwroot/yii/frameworkというディレクトリが存在することを確認してください。

ヒント:YiiFrameworkのインストール先はどこでもかまいません。frameworkディレクトリはすべてのフレームワークコードを含み、
Yiiアプリケーションを配布する際に唯一必要となるディレクトリです。
インストールしたYiiを複数のアプリケーションから利用することが可能です。

Yiiのインストール後、ブラウザを開きhttp://www.example.com/yii/requirements/index.phpにアクセスしてください。
Yiiのリリースに含まれる、動作環境チェッカが表示されます。
ウェブサーバとPHPがYiiを動作させるための最小条件を満たしていることを確認してください。

特にpdo拡張とpdo_sqlite拡張はこれから作成するブログアプリケーションで、SQLiteにアクセスするために必要となります。

スケルトンアプリケーションを作る

次に、yiicツールを使って、/wwwroot/blogディレクトリにスケルトンアプリケーションを作ります。
yiicはYiiのリリースに含まれるコマンドラインツールです。
このツールはいくつかのタスクでコードを生成するのに使用します。

コマンドプロンプトを開き、以下のコマンドを実行します。


        % /wwwroot/yii/framework/yiic webapp /wwwroot/blog
		Create a Web application under '/wwwroot/blog'? [Yes|No]y
		......
		
ヒント:上で示したようにyiicを使うには、CLI PHPプログラムにパスが通っていなければなりません。
もしそうでない場合は、次のようにすることでコマンドを利用できます。
path/to/php /wwwroot/yii/framework/yiic.php webapp /wwwroot/blog

作ったばかりのアプリケーションを試してみるには、ブラウザを開き、http://www.example.com/blog/index.phpにアクセスします。
三つの機能を持ったアプリケーションが表示されるでしょう。
ホームページ、コンタクトページ、そしてログインページです。

エントリスクリプト

エントリスクリプトは/wwwroot/blog/index.phpです。
その内容は以下のようになっています。

			
	<?php
	$yii='/wwwroot/framework/yii.php';
	$config=dirname(__FILE__).'/protected/config/main.php';
	 
	// remove the following line when in production mode
	defined('YII_DEBUG') or define('YII_DEBUG',true);
	 
	require_once($yii);
	Yii::createWebApplication($config)->run();
			
		

このエントリスクリプトは、ウェブユーザがアクセスできる唯一のファイルです。
まずYiiブートストラップファイルのyii.phpが読み込まれ、指定した設定でアプリケーションインスタンスが作成されたのち、実行されます。

ベースアプリケーションディレクトリ

/wwwroot/blog/protectedがアプリケーションのベースディレクトリです。
これから作成するコードとデータのほとんどがここに配置されます。
このディレクトリはユーザのアクセスから保護されなければなりません。
Apacheを使っているなら、以下のような.htaccessファイルを置くことでこれを達成できます。

deny from all

他のウェブサーバについてはマニュアルを参照してください。

アプリケーションワークフロー

Yiiがどのように動くか、理解するのを助けるために、スケルトンアプリケーションの主なワークフローを解説します。

ユーザがコンタクトページにアクセスしたとき:

  1. エントリスクリプトが実行され、リクエストを処理します。
  2. アプリケーションインスタンスが作成され、wwwroot/blog/protected/config/main.php コンフィグファイルで指定された初期値が設定されます。
  3. アプリケーションがリクエストをコントローラとアクションに分解します。コンタクトページのリクエストは、siteコントローラのcontactアクションになります。
  4. アプリケーションはSiteControllerインスタンスを作成し、実行します。
  5. SiteControllerインスタンスは自身のactionContact()メソッドを呼ぶことで、contactアクションを実行します。
  6. actionContactメソッドはcontactという名前のviewをレンダリングし、ユーザに提示します。ビューファイルは、wwwroot/blog/protected/views/site/contact.phpであり、

その結果がレイアウトファイル、/wwwroot/blog/protected/views/layouts/main.phpに埋め込まれます。

要求分析

これから作成するブログシステムは、シングルユーザシステムです。 システムのオーナは以下のアクションを行えるものとします。

オーナ以外のユーザはすべてゲストです。ゲストは以下のアクションを行えるものとします。

このシステムの追加要求は以下のとおりです。

全体の設計

要求分析によると、ブログアプリケーションには4つのテーブルが必要と考えられます。

User, Post, Comment および Tag です。

以下のER図がテーブルの構造とリレーションをあらわします。 Post Tag が多対多の関係であることに注目してください。 PostTag テーブルを用いて、この多対多の関係を二つの一対多の関係へと分解します。

ER図をSQLステートメントにしたものが、ブログデモに含まれています。このサンプルでは /wwwroot/yii/demos/blog/protected/data/schema.sqlite.sql になります。

ブログアプリケーション開発を、以下のマイルストーンに分割します。

その2.プロトタイピング