スポンサード リンク
1-A1 商品の詳細を表示する 
最初のイテレーションなので、いろいろとやることがある。
インストール手順などは、メモで残しつつWiki上に書いていくこと!(忘れないうちに)
イテレーション番号 | 1 |
---|
対象ユースケース | A-商品を注文する |
---|
期間 | 2007-01-29〜2007-02-04 |
---|
メンバー | opaken |
---|
目標 | 調べることいっぱいだが、頑張って環境を一通り整理し、1画面でも見れるようにすること! |
---|
基本仕様整理 
- Wikiに基本仕様となるユースケースや特徴(要望)などをまとめる
動作環境構築 
開発ツール 
ローカルサーバー環境 
- XAMPP Windows
http://sourceforge.net/project/showfiles.php?group_id=61776&package_id=89552
xampp-win32-1.5.5-installer.exe
- Apache 2.2.3
- MySQL 5.0.27
- PHP 5.2.0 + PHP 4.4.4 + PEAR
- PHP-Switch win32 1.0
- XAMPP Control Version 2.3 from www.nat32.com
- XAMPP Security 1.0
- SQLite 2.8.15
- OpenSSL 0.9.8d
- phpMyAdmin 2.9.1.1
- ADOdb 4.93
- Mercury Mail Transport System v4.01b
- FileZilla FTP Server 0.9.20
- Webalizer 2.01-10
- Zend Optimizer 3.0.2
- eAccelerator 0.9.5 for PHP 5.2.0 (please comment out in the php.ini)
- XAMPPのインストール先は
C:\apachefriends
にする。
データベース 
- MySQL 4.4(XAMPPに入っている)
- phpMyAdminを使ってDB操作をする
http://localhost/phpmyadmin/
- データベースは、とりあえずローカルのみ準備
ホスト | DB名 | ユーザー | パスワード |
---|
localhost | cakeshop | cakeshop | cakeshop |
- phpMyAdminの新規データベース作成時に、接続照合順序を「utf8_unicode_ci」にして作成すること!(これを忘れると後で文字化けします)
- cakeshopユーザーには全ての特権を与えておく
サーバ 
- Apache 2.2(XAMPPに入っている)
- エイリアスは、下記のように設定する
- PHPは4.4を使う。
- phpにパスを通しておく。
- 環境変数の設定で、PATHに
C:\apachefriends\xampp\php
を追加する。
ソース管理、バグ管理 
ルール 
- イテレーション番号
イテレーション番号−ユースケース番号+ユースケース毎の通番とする
(例)1-A1 = イテレーション1で「A 商品を注文する」ユースケースの1回目を意味する
- コーディングルールはどうする?
- Trac(チケット、マイルストーン)の運用はどうする?
- バージョンタグの付け方
リポジトリールート/tags/cakeshop/0_1_イテレーション番号
とする。
イテレーション完了時にタグを付けて管理する。
- ドキュメント
Wiki上に書いていくこと。絵や図などは、手書きで残しておいても良い。(無くさないように)
- テストケース
コントローラ毎にテストケースを書いていくことにする。
アーキテクチャ(フレームワーク) 
- CakePHP 1.1を基盤として構築する。
- その他、ライブラリは随時、吟味しながら入れていく。
テーブル設計 
- CakeShop/テーブル設計を考える。
- とりあえず必要と思われる項目を入れる。
- 基本的には商品の情報は1つのテーブルで管理する。
- 在庫は、別のテーブルで管理するので、後で考える。
テーブルの準備 
- phpMyAdminでテーブルを作る。
- とりあえず手入力・・・
- 最終的にWikiの表組みからDDLに変換するツールを作りたいな・・・
- Eclipseで新規PHPプロジェクトを作成する。
プロジェクト名は、cakeshopにする。
- CakePHPの1.1系の最新をダウンロードする。
- Eclipseのworkspace/cakeshopに解凍したものを置く。
C:\eclipse_pdt\workspace\cakeshop
- もともとのappをコピーして、shopフォルダはフロント系、kitchenフォルダは管理系として用意する。
- .htaccessの修正が必要
- C:\apachefriends\xampp\apache\conf\httpd.confを修正
mod_rewriteを有効にする。(コメントを外す)
LoadModule rewrite_module modules/mod_rewrite.so
下記を最終行に追加
Alias /cakeshop "C:/eclipse_pdt/workspace/cakeshop/shop/"
<Directory "C:/eclipse_pdt/workspace/cakeshop/shop/">
Options FollowSymLinks Indexes MultiViews ExecCGI
AllowOverride All
Order allow,deny
Allow from all
</Directory>
Alias /cakekitchen "C:/eclipse_pdt/workspace/cakeshop/kitchen/"
<Directory "C:/eclipse_pdt/workspace/cakeshop/kitchen/">
Options FollowSymLinks Indexes MultiViews ExecCGI
AllowOverride All
Order allow,deny
Allow from all
</Directory>
- database.phpの修正
- shop/config/database.php.defaultの名前をdatabase.phpに変更して下記のように修正
var $default = array('driver' => 'mysql',
'connect' => 'mysql_connect',
'host' => 'localhost',
'login' => 'cakeshop',
'password' => 'cakeshop',
'database' => 'cakeshop',
'encoding' => 'utf8',
'prefix' => '');
※encodingをutf8にできるように後でMySQLのコネクト部分のソースを修正する。
- kitchen/config/database.php.defaultの名前をdatabase.phpに変更して先程と同様に修正
画面の確認 
画面のテンプレートレイアウト 
デバッグモードにしておく 
- CakePHPのDEBUG定数を2にしておく
それぞれのフォルダのconfig/core.php
define('DEBUG', 2);
これで、画面にSQLが表示されるようになる。
CRUDページ 
- bakeの代わりに使うdecorateをダウンロードしてcake/scriptフォルダにおいておく
CakePHP のおいしい食べ方 Scaffolding and Decorating your web app with CakePHP
- decorateを使ってkitchenフォルダにGoodsテーブルのCRUDを作る。
- 最初にモデル(M)から作成する。
コマンドプロンプトで下記を実行
cd C:\eclipse_pdt\workspace\cakeshop
php cake\scripts\decorate.php -app kitchen
___ __ _ _ ___ __ _ _ __
| |__| |_/ |__ |__] |__| |__] == Decorated Bake ==
|___ | | | \_ |___ | | | | = SDozono/Cba =
---------------------------------------------------------------
[M]odel
[C]ontroller
[V]iew
Please select a class to Bake: (M/V/C)
> M
---------------------------------------------------------------
Model Bake:
---------------------------------------------------------------
Possible models based on your current database:
1. Item
Enter a number from the list above, or type in the name of another model.
> 1
Would you like to supply validation criteria for the fields in your model? (y/n)
[y] > n
Would you like to define model associations (hasMany, hasOne, belongsTo, etc.)?
(y/n)
[y] > n
---------------------------------------------------------------
The following model will be created:
---------------------------------------------------------------
Model Name: Item
DB Connection: default
Model Table: items
Validation: Array
(
)
---------------------------------------------------------------
Look okay? (y/n)
[y] > y
Creating file \kitchen\models\item.php
Wrote \kitchen\models\item.php
Cake test suite not installed. Do you want to bake unit test files anyway? (y/n
)
[y] > n
- 次にコントローラ(C)を作る。
php cake\scripts\decorate.php -app kitchen
___ __ _ _ ___ __ _ _ __
| |__| |_/ |__ |__] |__| |__] == Decorated Bake ==
|___ | | | \_ |___ | | | | = SDozono/Cba =
---------------------------------------------------------------
[M]odel
[C]ontroller
[V]iew
Please select a class to Bake: (M/V/C)
> C
---------------------------------------------------------------
Controller Bake:
---------------------------------------------------------------
Controller name? Remember that Cake controller names are plural.
> items
Would you like bake to build your controller interactively?
Warning: Choosing no will overwrite Items controller if it exist. (y/n)
[y] > n
Creating file \kitchen\controllers\items_controller.php
Wrote \kitchen\controllers\items_controller.php
- 最後にビュー(V)を作る。
php cake\scripts\decorate.php -app kitchen
___ __ _ _ ___ __ _ _ __
| |__| |_/ |__ |__] |__| |__] == Decorated Bake ==
|___ | | | \_ |___ | | | | = SDozono/Cba =
---------------------------------------------------------------
[M]odel
[C]ontroller
[V]iew
Please select a class to Bake: (M/V/C)
> V
---------------------------------------------------------------
View Bake:
---------------------------------------------------------------
Controller Name? (plural)
> items
Would you like bake to build your views interactively?
Warning: Choosing no will overwrite views if it exist. (y/n)
[y] > n
Creating file \kitchen\views\items\index.thtml
Wrote \kitchen\views\items\index.thtml
Creating file \kitchen\views\items\sindex.thtml
Wrote \kitchen\views\items\sindex.thtml
Creating file \kitchen\views\items\view.thtml
Wrote \kitchen\views\items\view.thtml
Creating file \kitchen\views\items\add.thtml
Wrote \kitchen\views\items\add.thtml
Creating file \kitchen\views\items\edit.thtml
Wrote \kitchen\views\items\edit.thtml
---------------------------------------------------------------
View Scaffolding Complete.
- テストデータをCRUDで完成したページから入力して作る。
http://localhost/cakekitchen/items/
商品表示ページの実装 
- 商品詳細ページは、コントローラ名をitemsにする。
- CRUDで作ったものをコピーして流用する。
コントローラをコピー
kitchen/control/items_controller.php
↓
shop/control/items_controller.php
Viewをコピー
kitchen/items/view.php
↓
shop/items/index.php
- コントローラのviewメソッドをindexメソッドに変更し、その他の不要な部分を削除する。
<?php
class ItemsController extends AppController
{
//var $scaffold;
var $name = 'Items';
var $helpers = array('Html', 'Form', 'Session' );
function index($id) {
$this->set('item', $this->Item->read(null, $id));
}
}
?>
- Modelは、kitchen側のものをそのまま利用できるようにする。
- cake/config/paths.phpを修正
// モデルのパスが先に定義されていれば、そっちを使う
if(!defined('MODELS')) {
define ('MODELS', APP.'models'.DS);
}
- shop/webroot/index.phpでモデルのパスをkitchen側に向ける
if (!defined('APP_DIR')) {
//define('APP_DIR', 'DIRECTORY NAME OF APPLICATION';
define('APP_DIR', basename(dirname(dirname(__FILE__))));
}
// フロントでは、管理側(kitchen)のモデルを使用する
define ('MODELS', ROOT.DS.'kitchen'.DS.'models'.DS);
- shop側の商品詳細ページにアクセスしてみる。とりあえずテストデータで作った商品IDが1のものを表示してみる。
http://localhost/cakeshop/webroot/items/index/1
テストケースの準備 
デモページの用意 
- さくらのサーバーにアップしてデモ見れるようにしたいな。
- サブドメインの設定をする
- 公開は次回イテレーションで準備する。
ふりかえり 
イテレーション終わったら、ふりかえりをしましょう!
Keep(よかったこと) 
- CakePHPの仕組みを理解できた。
- ローカルの環境もXAMPPなどを利用して簡単に構築できた。
- Wikiでイテレーションの作業予定(タスク)をまとめていくのは、Good!
- 何をやるのかが整理できる。
- 作業の結果メモを簡単に残していける。
Problem(わるかったこと) 
- PHPのデバッグがうまくいかない。
- これの調査にすごく時間がかかった。
- あきらめが肝心!
- 作業を自宅と事務所の二カ所でやっていたため、ソースをコミットし忘れると辛い。
Try(次回挑戦) 
- 常に動くものを完成させる姿勢で取り組むと、目標が見えやすいのでよかった。
- CakePHPの日本語ドキュメントがあったお陰で、早く理解することができた。感謝!
- Wikiでドキュメントをまとめていくのは、これからも続けていこう。
- ハマリ気味の時は、諦めて別の方針に切り替えることを考えよう。
- 一人でもルールは肝心。整理することで、理解も深まると思う。
イテレーション評価・得点 
今回のイテレーションは、準備がメインだったので調べることが多かった。
少し手間取ったところもあったが、画面を表示するというところまではたどり着いたので良かった。
評価としては、80点!
関連ページ 
コメント 
スポンサード リンク