• 追加された行はこの色です。
  • 削除された行はこの色です。
RIGHT:&tag(CakeShop);
#contentsx

* 1-A1 商品の詳細を表示する [#i50fa8d2]
最初のイテレーションなので、いろいろとやることがある。
インストール手順などは、メモで残しつつWiki上に書いていくこと!(忘れないうちに)
|~イテレーション番号|1|
|~対象ユースケース|A-商品を注文する|
|~期間|2007-01-29〜2007-02-04|
|~メンバー|opaken|
|~目標|調べることいっぱいだが、頑張って環境を一通り整理し、1画面でも見れるようにすること!|

** 基本仕様整理 [#s1e7a0fb]
-Wikiに基本仕様となるユースケースや特徴(要望)などをまとめる

** 動作環境構築 [#xd926744]

*** 開発ツール [#f7508506]
-Java Runtime Environment (JRE) 5.0 Update 10
http://java.sun.com/javase/downloads/index_jdk5.jsp
jre-1_5_0_10-windows-i586-p.exe
-Eclipse PHPIDE Download All in one package
http://downloads.zend.com/pdt/all-in-one/
pdt-0.7.0.I20070111_debugger-0.1.7-all-in-one-win32.zip
|~Eclipseのインストールフォルダ|C:\eclipse_pdt|
|~workspaceフォルダ|C:\eclipse_pdt\workspace|
-Pleiades(Eclipse プラグイン日本語化プラグイン)
http://mergedoc.sourceforge.jp/
pleiades_1.2.0.p7.zip
--設定方法
--eclipse.ini 最下行に以下の指定を追加
 -javaagent:plugins/jp.sourceforge.mergedoc.pleiades/pleiades.jar
-Aptanaプラグイン(Web2.0を支援する、HTML、JavaScriptエディター)
http://update.aptana.com/update/
-Subclipseプラグイン(Subversion)
http://subclipse.tigris.org/update_1.2.x

** ローカルサーバー環境 [#t74dc569]
-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
にする。
*** データベース [#n398ebb2]
-MySQL 4.4(XAMPPに入っている)
--XAMPPでMySQLのインストールに失敗した場合は、一旦アンインストールし、サービスとして先に登録されているMySQLのレジストリを削除する。
ファイル名を指定して実行で、regedit.exeを起動し、レジストリから下記のキーを削除する。
 \HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\MySQL
その後、再起動してから、XAMPPを再インストールする。
-phpMyAdminを使ってDB操作をする
http://localhost/phpmyadmin/
-データベースは、とりあえずローカルのみ準備
|~ホスト|~DB名|~ユーザー|~パスワード|
|localhost|cakeshop|cakeshop|cakeshop|
-&color(Red){phpMyAdminの新規データベース作成時に、接続照合順序を「utf8_unicode_ci」にして作成すること!(これを忘れると後で文字化けします)};
-cakeshopユーザーには全ての特権を与えておく

*** サーバ [#kb080d97]
-Apache 2.2(XAMPPに入っている)
-エイリアスは、下記のように設定する
|~用途|~エイリアス|~URL|
|フロント系|/cakeshop|http://localhost/cakeshop|
|管理系|/cakekitchen|http://localhost/cakekitchen|
-XAMPPのインストール先は
C:\apachefriends
にする。
-PHPは4.4を使う。
--PHP switchを実行してXAMPPのPHPを4に切り替えておく。(Apacheを停止してからやりましょう)
--C:\apachefriends\apache\bin\php.iniに下記を追加する。
 default_charset="UTF-8"
 
 magic_quotes_gpc=off
 
 mbstring.input_encoding="pass"
 mbstring.internal_encoding="UTF-8"
 mbstring.output_encoding="pass"
 mbstring.language="japanese"
 mbstring.substitute_charactor=""
http://localhost/xampp/phpinfo.php
にアクセスして確認する。
-phpにパスを通しておく。
--環境変数の設定で、PATHに
C:\apachefriends\xampp\php
を追加する。


*** ソース管理、バグ管理 [#y6f6717f]
-Eclipseの設定
[チーム] > [SVN] で SVNインタフェースを(Pure Java)に切り替えておく
-Subversion
svn+ssh://cre8system.sakura.ne.jp/home/cre8system/var/svn/repo/trunk/cakeshop
-Trac 0.10.3
http://dev.cre8system.jp/trac/
-文字コード
UTF-8に統一する!

*** ルール [#gee7c4d8]
-イテレーション番号
イテレーション番号−ユースケース番号+ユースケース毎の通番とする
(例)1-A1 = イテレーション1で「A 商品を注文する」ユースケースの1回目を意味する
-コーディングルールはどうする?
-Trac(チケット、マイルストーン)の運用はどうする?
-バージョンの付け方
cakeshop_0_1_イテレーション番号
-バージョンタグの付け方
リポジトリールート/tags/cakeshop/0_1_イテレーション番号
とする。
イテレーション完了時にタグを付けて管理する。
-ドキュメント
Wiki上に書いていくこと。絵や図などは、手書きで残しておいても良い。(無くさないように)
-テストケース
コントローラ毎にテストケースを書いていくことにする。

*** アーキテクチャ(フレームワーク) [#qecb8a18]
-CakePHP 1.1を基盤として構築する。
--cake_1.1.12.4205.zip
-その他、ライブラリは随時、吟味しながら入れていく。

** テーブル設計 [#ta71fb83]
-[[CakeShop/テーブル設計]]を考える。
-とりあえず必要と思われる項目を入れる。
-基本的には商品の情報は1つのテーブルで管理する。
-在庫は、別のテーブルで管理するので、後で考える。

** テーブルの準備 [#ead4fa5c]
-phpMyAdminでテーブルを作る。
-とりあえず手入力・・・
--最終的にWikiの表組みからDDLに変換するツールを作りたいな・・・

** プロジェクトの準備 [#s2566e61]
-Eclipseで新規PHPプロジェクトを作成する。
プロジェクト名は、cakeshopにする。
-CakePHPの1.1系の最新をダウンロードする。
-Eclipseのworkspace/cakeshopに解凍したものを置く。
C:\eclipse_pdt\workspace\cakeshop
-もともとのappをコピーして、shopフォルダはフロント系、kitchenフォルダは管理系として用意する。
-.htaccessの修正が必要
--shop/.htaccessに下記を追加
 RewriteBase    /cakeshop
--shop/webroot/.htaccessに下記を追加
 RewriteBase    /cakeshop/webroot
--kitchen/.htaccessに下記を追加
 RewriteBase    /cakekitchen
--kitchen/webroot/.htaccessに下記を追加
 RewriteBase    /cakekitchen/webroot
-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に変更して先程と同様に修正

** MySQL文字化け対応 [#h50403f4]
-CakePHPのMySQL用DBOを修正する。
--cake/libs/model/dbo/dbo_mysql.php
connect関数の所を下記のように修正
 if (mysql_select_db($config['database'], $this->connection)) {
   $this->connected = true;
   // encoding add start
   if(!empty($config['encoding'])){
     $this->query("SET NAMES '".$config['encoding']."'");    
   }
   // encoding add end
 }

** 画面の確認 [#o91251ab]
-下記にアクセスして画面を確認する
--フロント側
http://localhost/cakeshop/
--管理側
http://localhost/cakekitchen/
-次のようなメッセージが表示されていれば、データベースに接続できているのでOK!
 Your database configuration file is present. 
 
 Cake is able to connect to the database.

** 画面のテンプレートレイアウト [#m0ffedf0]
-よさげのレイアウトをいれておく。
-shopとkitchenで違うものにしておく。(見分けつけるように)
-[[CakePHP のおいしい食べ方 default.thtml 7 free designs for Cake PHP:http://cakephp.seesaa.net/article/20355864.html]]のテンプレートを使う。
--contented5.zip フロント側
--contented3.zip 管理側
-テンプレートファイル default.thtml をそれぞれのview/layoutフォルダにいれる。
-default.thtmlの下記の部分を修正する。(53行目)
 if ($this->controller->Session->check('Message.flash')) $this->controller->Session->flash();
 ↓
 if ($session->check('Message.flash')) $session->flash();
-スタイルシートのファイルは、それぞれのwebroot/cssフォルダにいれる。
-画像ファイルは、それぞれのwebroot/imgフォルダにいれる。

** デバッグモードにしておく [#sba25700]
-CakePHPのDEBUG定数を2にしておく
それぞれのフォルダのconfig/core.php
 define('DEBUG', 2);
これで、画面にSQLが表示されるようになる。

** CRUDページ [#kba93067]
-bakeの代わりに使うdecorateをダウンロードしてcake/scriptフォルダにおいておく
[[CakePHP のおいしい食べ方 Scaffolding and Decorating your web app with CakePHP:http://cakephp.seesaa.net/article/25299712.html]]
-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/

** 商品表示ページの実装 [#l0796e82]
-商品詳細ページは、コントローラ名を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

** テストケースの準備 [#pbd8c2c2]
-次回イテレーションで準備する。

** デモページの用意 [#y943ebf5]
-さくらのサーバーにアップしてデモ見れるようにしたいな。
-サブドメインの設定をする
|~用途|~フォルダ|~URL|
|フロント系|$HOME/www/cakeshop|http://cakeshop.cre8system.jp/|
|管理系|$HOME/www/cakekitchen|http://cakekitchen.cre8system.jp/|
-公開は次回イテレーションで準備する。

* ふりかえり [#c7784b4f]
イテレーション終わったら、ふりかえりをしましょう!

** Keep(よかったこと) [#a76b12e6]
-CakePHPの仕組みを理解できた。
-ローカルの環境もXAMPPなどを利用して簡単に構築できた。
-Wikiでイテレーションの作業予定(タスク)をまとめていくのは、Good!
--何をやるのかが整理できる。
--作業の結果メモを簡単に残していける。

** Problem(わるかったこと) [#k2016113]
-PHPのデバッグがうまくいかない。
--これの調査にすごく時間がかかった。
--あきらめが肝心!
-作業を自宅と事務所の二カ所でやっていたため、ソースをコミットし忘れると辛い。

** Try(次回挑戦) [#j7cdd8ee]
-常に動くものを完成させる姿勢で取り組むと、目標が見えやすいのでよかった。
-CakePHPの日本語ドキュメントがあったお陰で、早く理解することができた。感謝!
-Wikiでドキュメントをまとめていくのは、これからも続けていこう。
-ハマリ気味の時は、諦めて別の方針に切り替えることを考えよう。
-一人でもルールは肝心。整理することで、理解も深まると思う。

** イテレーション評価・得点 [#j90840b4]
今回のイテレーションは、準備がメインだったので調べることが多かった。
少し手間取ったところもあったが、画面を表示するというところまではたどり着いたので良かった。
評価としては、&color(Red){80点};!

** 関連ページ [#b3a3b0e2]
#lsx

#newpage_subdir()

** コメント [#e2ce95fc]
#comment


    ホーム 一覧 単語検索 最終更新 バックアップ リンク元   ヘルプ   最終更新のRSS