Codeigniterで設計(?)

CodeIgnigter
ちっともまとまっていませんが、Codeigniterで設計勉強会の資料を作ったらどうなるかな的に作ってみました。


第二回設計勉強会

課題(?)ほどには深いところまで書けては無いのですが、
ここしばらくCodeigniterを使っていての自分なりのまとめになったような気がします。理解はまだまだ浅いのです (>_< ) 1ヶ月後、3ヶ月後ぐらいに同じ課題で再度資料をつくってみたいなと思います。

追記:2008.10.31
こうしたら、こんな効果があったとか、足りないことを少しずつ自覚中。
やはり1ヵ月後には再度同じテーマで資料を作ってみたいな。

TRACチケット駆動開発(試行錯誤中)

現在自社サイトリニューアルのため、CodeIgniterでサイトを構築中です。
で、1人作業をしているわけですが、開発タスクのTracのチケットを仕様、設計メモにしてみました。

  • チケット登録時に実装する機能の資料をチケットに記載
  • 関連するDBのテーブル定義
  • コーディングルール(意識して気をつけて書いてる点)
  • Class,function,責務,URLの一覧
  • 各責務の特徴、主な役割
  • 実装作業したリビジョン番号をメモ的に記載

実際に作業をしてみると、作業最中は、作っている機能のチケットのページをずっと開きっぱなしで作業をしてます。

修正すべき項目は即時に修正。
ドキュメントとして保存しておくべき項目をすぐに追記。

そのチケットが終わる頃にはチケットが最終のドキュメントになることを狙っています。
実際作業をしてみると、チケットに書いてある内容を元に、PHPdoc形式で書くのに作業がスムーズでした。
目の前の作業中に目の前に資料がある状態のおかげで作業にも集中できました。

しばらく一人作業の場合はこの方法を練ってみて、
うまくいくようであれば事務所に導入してみようと思います。

設計勉強会に参加してきました。

events.php.gr.jp – Event

設計勉強会に参加してきました。
すでに発表くださった方々が資料をUPしてくださってます。

sotarokさんの資料:http://d.hatena.ne.jp/sotarok/20080927
yandoさんの資料:http://docs.google.com/Presentation?id=dct5hfpk_1p2hvp6gg

haltさんの発表。

Actionの中で、DBの処理を書いちゃってるコードがあるよ。
Viewの中でロジックいっぱい書いちゃうコードがあるけど、これってどうなのよという感じのお話でした。

Smartyは使うべき?使わないべき?という話題

  • フレームワークの便利な機能を使おうとすると、Smartyは使いにくいので使わなくなってきている。
  • Smartyは使うと重い。
  • Smartyじゃないとデザイナーがコードさわれない。
  • Smartyであってもデザイナーはコードさわれない。
  • Smartyの中でif文書くの禁止。
  • テンプレートの本来の役割は何か?
  • Viewはテンプレートのために何をしなければならないのか?

デザイナーなお仕事をさせていただく時の自分と、実際PHPでコードを書いてる時とで、矛盾があったなぁなんてことを思いました。

過去に自分自身が書いたSmartyのテンプレートに
foreachとifがいっぱい入っててしまっているダメな自分。
後でtplファイルを見た別のヒトが唖然としそうなカオスなテンプレート。
今思えばとてもとても恥ずかしいわけで、
涙が出そうなぐらいダメなわけで・・・・・

がんばれ、私・・・・

  • htmlを作らせていただくときに個人的に意識していること。

    • 位置情報としてのコード
    • 文書データのフォーマットとしてのコード
    • 役割としてのclass,ID(CSS的なアレ)
    • 無駄なid,classを指定しなくても良い、構造化されたhtmlとCSSの構造
  • 現実
    • IE6とFirefoxの挙動の差のために追加されるタグの存在(けっこう悔しい)
    • デザイン(画面絵図)とマークアップとコーディングが同時進行な罠
    • 開発途中で変わる画面デザインという罠

挙手での「現在Smartyを使っているヒトは?」アンケートがあり、結果は半分ぐらいが使用中とのこと。
全員使ってるのかと思っていたので、意外でした。

もっと既存のフレームワークの中身や構造を知っていれば、もっと参加された皆さんが話していることがわかったのではないかなという部分で、自身の勉強不足を猛反省。

Ethna的ActionとView@設計勉強会

sotarok さんの資料とお話はとてもわかりやすくて、嬉しかったです。
sotarok さんが公開されている資料の15、16、17の絵図で構造の説明があり、
その上で決まりごとのお話、
その決まりごとに対して意識されていること、
その結果と効果のお話。

感想

懇親会でいっぱいnekoyaさんとお話ができました。
WEBアプリケーションに関わるデザイナーよりな方とお話をさせていただく機会は、よくよく考えてみるとあまりなかったなぁと。
とても貴重な体験と、お話でした。

全体像を作る。
レイヤーに分ける。分解する。
パーツに分ける。分解する。
全体像をレンダリングする。

絵を描く時も設計してる。
デザインをしてる時も設計してる。
プログラムを書く時も設計してる。

もっと設計を知りたい。わかりたいと思ったことは
勘違いじゃないし、間違いじゃないんだなと思えました。

参加してよかった!

Dreamweaver CS4 beta

SVNが使える!
チェックアウト、コミットボタンがファイル管理の窓にある!(感涙)

Dreamweaver CS4 パブリックベータ

一番最初のチェックアウトの時に、なぜかチェックインを使う不思議なUIなのですが非常に使いやすいです。
確かに個別のファイルのログを追いにくいということで、eclipseの連動に比べると機能は少ないです。
eclipseの連動を期待して使うと、物足りないかもしれない。
でも、機能が少ない分、実際にコードを書いてブランチにコミットしていくものとしては、迷いが無く使いやすいです。

常に何かブラウザを立ち上げている私としては、その部分はTRACで確認でも良いと思うし、
他のSVNクライアントソフトを使うので良いと思うので、十分♪

今作業をしているファイルをテストのためにFTPでUPする。
うまく動いたらそのファイルをコミットする。
1タスク(1チケットかも)がまとまったら、trunkへマージという流れができるなぁと想像すると、わくわくドキドキ。

楽しみです。

先週のイベント三昧

先週も気がつけばイベント三昧な週末でありました(^-^;)

■8/29 php-hackathon
LL Future前日hackathon。豪雨の中開催(^-^;)。
m-takagiさんが大阪から東京へ向かう中「電車止まりました」なんてイベントも発生し、なかなかに波乱のスタートでした。
(無事到着され、すごく良い笑顔で日本酒をいただくm-takagiさんの姿が目の前にあったわけですがw)

この日の私の課題は、いままで親しんだSNSがどんなものだったのかを改めて考えてみるということで、先日100円ショップで豪遊の結果手に入れた24色色ペンで絵図をがりがりと作画。
皆がノートPCに(主にMacbookAirに)向かいつつ作業をしている中、A4のちょっと大き目の紙ノートに挑む私の姿がありましたw この絵図についてはもうすこしまとまったら公開しようと思います。

■8/30 LL Future

抽選会+閉会宣言

http://ll.jus.or.jp/2008/
・感動の一日でした。
開会から閉会までしっかりと堪能した1日でした。
来年も必ず行きます!!!

・「LLでアート」は衝撃的でした。
あんなすごいモノを作り出す人をつくった、大垣という土地++
http://www.iamas.ac.jp/J/index.html
筋肉につけたセンサーで、音が出る→音を奏でるな制作の風景とか
http://funnel.cc/
「好き」という属性を持たせたデータが作り出す、繋がっていく軌跡のアートとか!!!
あぁ・・・・もっとちゃんとメモっておけばよかった(><)

・基調講演(Larry Wallさん)
英語力の自分のなさに絶望。
iknowのおかげで、言葉は聞き取れているものの、意味は全くorz

他のプログラムもライトニングトークもすごく面白くて、よい1日でした。
すごく刺激を受けましたよ。

私自身、LLというイベントは今回がはじめての参加でした。
lllnorikolllさんに教えてもらって、はじめて存在を知ったわけですが、何故いままで来なかったのか、知らなかったのか悔しいぐらいに良いイベントでした。

当日のイベントの内容をきちんとレポートされているブログを発見(笑)
http://d.hatena.ne.jp/gnarl/20080831/1220109415

・LL Tシャツ争奪戦に負けました(><)
チケットを購入したときにはすでにTシャツを売り切れていて・・・・
あと10枚ほどしかありませんと言われた時に、目の前には30人以上いるっぽい悲劇 ・・・・・(TAT)

余談:マイミクの日記で、マイミクがLL Futureに行くことを知り、運がよければ会えるかも!!!と期待して参加したわけですが、会えるかものその人は、ステージから出ていらっしゃいました。
それはそれでもう、すごく衝撃的(^-^;)
かっこよかったです♪

■8/31 PHP勉強会
http://events.php.gr.jp/event.php/event_show/50
35回目のPHP勉強会。
そして50回目のイベント(event.php的に)
そのうち参加させていただいたのは今回が3回目でした。
参加できない状況でしたが、申し込み時間を延長いただいて、キャンセル枠で滑り込み参加することができました。

・event.phpをCakePHPに置き換えてみたhaltさまの話。
OpenIDを使えるようにしてみた話とか、KeyType認証から、mixi認証や他のOpenIDを使うようにするための注意点等非常に興味深いお話でした。
 
・TDDなkunitさんの話
質疑応答がとても参考になりました。
CodeIgniterでActionにテストをしようとしていた自分がすごく恥ずかしかった。
ユニットテストとはなんぞやというところが私はなかったわけで、不勉強で恥ずかしい・・・(><)

haltさまによるCakePHPでDoctestが即日公開されていました。

・symfonyでモバイルのゆどうふさんの話
モバイルサイトを構築する上で気をつけた点、試み等のお話。
symfonyは私は全くわからないのだけれども、フィルターチェーンという仕組みがすごく気になりました。

・project Zeroなねもとさんの話
PHPから、Javaで作られたメゾットを呼び出して、動くようになってるよという世界の紹介。
http://www.atmarkit.co.jp/fjava/rensai3/eclipseplgn19/eclipseplgn19_1.html
リンク先がここでいいのかどうかはわからないけど、日本語のページが良いよねということでぐぐった結果をメモ的にぺったん。

勉強会が終わっての個人的な疑問
Emacs使いな方やVim使いな方にはたくさん出会うわけなんだけど、DreamweaverでPHPを書いている人に出会えない。
そんな人はいないのか?それとも、勉強会に参加されている人のレイヤーが違うのか?

CodeIgniter 続き

今日は、CodeIgniterでの続きを作成。
unit_test.phpの改造は、

成功の場合:背景がグリーン&テスト名テキストリンクをクリックするとテスト結果が表示
失敗の場合:背景がレッド&テスト名テキストリンクをクリックするとテスト結果が表示

となりました。とても見やすくなってとても満足。
ただしunit_testというものが、私が書いたものが正しいテストなのかどうかはわからないので、ユニットテストそのものを次の課題にします。
(コーディング途中、ユニットテストを書きながら、テストをする方法やテストをする箇所等が十分なのかどうなのかがとても不安です)

で、現在習作しているソレは、自分用のダイエット用に書いています。

1:計測都度の体重の記録と表示
2:食べたものを都度記録と表示

この2つの役割をするものを書いていますが、すごく納得がいかない状態。
最初からやりなおしてみようかと思っています。

CodeIgniter unit_test.phpをいじる

OSC翌日、1.6.3ではunit_testは色が変わるよ!というのをkenjiさんから教わりました。(kenjiさんありがとうございます!)
ということで、早速にコードを確認。

判定部分など、ほぼ1.6.1に対して書いたものと同じような書き方だったことに満足♪
CodeIgniterへの理解力が少しだけ上がっているのかもと嬉しくなりました。

結局unit_testは、1.6.1をそのまま改造し、表示方法を変更しました。

  1. テストを通過したものは背景を緑(明るい緑)
  2. テストを失敗したものは背景を赤(明るい赤・・・ピンクw)
  3. テスト名だけ(つまりテスト結果は1行)を表示
  4. 上記をテキストリンクに変更
  5. テキストリンクをクリックするとテスト結果の詳細を表示
    (Javascript)

if文の処理内等、プログラムが通過する部分には必ずテストを書くというルールで、ふたたびアプリのコーディングを再開しました。
登録、修正、削除の機能が入った小さい小さいアプリですが、一通り書けたら「ふりかえり」をしたいと思います。

CodeIgniter unit_test.phpを眺める

CodeIgniterのunit_test.phpのソースを眺めつつ、
改造しちゃおうかと眺め・・・・


ユーザガイドから参照

テスト結果を初期状態のものとは違ったフォーマットにしたい場合、
ユーザ定義のテンプレートをセットできます。
以下は、シンプルなテンプレートの例です。
必須の擬似変数に注意してください:

<?php
$str = '
<table border="0" cellpadding="4" cellspacing="1">
    {rows}
        <tr>
        <td>{item}</td>
        <td>{result}</td>
        </tr>
    {/rows}
</table>';


$this->unit->set_template($str);
?>

あれれ?{item}と{result}しかないよ?
失敗だったら色を変えたいのに・・・・・

136行目あたりから・・・・

<?
$temp = $this->_template_rows;
$temp = str_replace('{item}', $key, $temp);
$temp = str_replace('{result}', $val, $temp);
$table .= $temp;
?>

あぁ、置き換えてるのね。

unit_test.phpを書き換えちゃうかなぁ・・・
なにか間違ってる気がすごくするんだけれども、結果がずらずらずらっとテーブルで表示されてるだけではあまりにもわかりにくい(>_<)

追記:2008.08.08
メモ

  • 170行目あたりのfunction result($results = array()){}の中で言語ファイルによる翻訳が行われている
  • 翻訳後の$keyで判定して文字色を変えるのは、オレオレすぎてなんだかなぁ・・・
  • 翻訳前の$keyも情報として持っていてほしいよ・・・CodeIgniterたん(TAT)
  • 元々の仕組みとして、色を変える仕組みがは入っててほしかった。置き換えでは元々のフォーマットでは無理っぽいなぁ
  • 元々の仕組みとして、色を変える仕組みがは入っててほしかったなぁ
  • 使うの嫌になってきた・・・
  • なんてことだ・・・試してみたら$this->unit->set_template($str);は、そのメゾットの中でしか有効にならないのか
  • CodeIgniter嫌いになりそう(;A;)うぇーん

CodeIgniter ユニットテスト unit_test

ViewとCSSから少し離れたフリをして・・・・
modelを書いてみようということで、ユニットテストクラスを使ってみようと思います。
データのinsertな処理はそのままcontrollerで書いてしまいました。
これもmodelにいれちゃったほうがいいのかな?

Modelの役割
なんとなくイメージ: Controllerが使役する素敵な式神さまw
(結界師にでてくるかわいい式神さまだと、なんとなく嬉しい)
DBに接続して、あれこれしてくれる役割のもの

CodeIgniter ユーザガイド(日本語版)より参照

<?
$this->unit->run( test, expected result, 'test name' );
?>

ここでの test は、テストしたいコードの実行結果が入り、expected result には、期待するデータ型 [または期待する値] が入ります。それから、test name では、オプションで、テストに名前を付けることができます。

ということなので、テストの名前がつけられる。

….で、2日ほど格闘。
やっぱり書いてみないとわからなかったなぁ的なことがいっぱいありました。
もうすこし試行錯誤してみようと思います。

課題とか疑問とか

  • ユニットテストが楽しい事はわかった。
  • テスト結果を活用したいと思った
  • is_objectでオブジェクト型が判定できないのは何故なのだろうか?
  • テストが失敗したら、テスト結果のテーブルは赤にしたい
    (色を変えたい)
  • 通常処理経路、例外処理経路をユニットテストをみて追えるようにしたい。
    (色変すべきかな?)

せっかく本コードに直接書いてしまうスタイルなわけだから、何かバグが発生したときに、それが通常処理だったのか例外処理だったのかは、テスト結果から追えるようにしたい。
都度誰かが手を入れながら、メンテされていくソースコードであればあるほど
それらはわかった方がいいのではないかなと思うわけです。

テスト名の工夫と、テスト結果を吐き出すViewに手を入れればできるのではないかなと予想してます。

TODO:

  • CodeIgniterでunit_testを活用しているコード(サンプル)を探す。
  • そもそもユニットテストってどうすべきなの?を調べてみる
  • 書きかけのコードをまずは完成させないと!
  • mock-up.html(雛形HTML)のカタチを考える。作る!

CodeIgniter ViewとCSSの思考(3)

サーバにUPはしていませんが、ひな形的に作ったhtmlファイルに追記

  • tableタグとそれに対応するCSS
  • olタグとそれに対応するCSS
  • ulタグとそれに対応するCSS
  • aタグとそれに対応するCSS

あとは都度必要なものを随時作成。

CodeIgniter側での課題:viewファイルを表示する部品ごとに作成
viewsフォルダの中身は表示させる部品を作る為のviewファイルで構成。

views/機能役割名/ファイル名.php

とりあえずPCの場合でしか考えてない訳だけれど、別の切り口でのそれも必要だと思います。
今後の課題ってことでとりあえずCodeIgniterを知る為にPCの場合のみで作成してみてから、考えたいと思います。

  • 用意する必要があるもの
    • モバイルの場合
    • PC用ページの場合
    • PC用ページ(印刷用)の場合