CodeIgniter HMVC その後(2)

CodeIgniter Mobile

◆ここまでのあらすじ
最初1.7.2にCIUnitを組み込んでから、HMVC modular extensions 5217.zipを組み込み後、CIUnitを組み込み。携帯対応で混乱をしたため、上記作業のメモを元に、再度仕切りなおしをしました。

CodeIgniterを1.7.2にHMCV modular extensions 5219.zipを組み込み、その動作を確認しました。
/modules/{モジュール名}/controllers/{モジュール名}.phpの動作を確認

設置場所URL/index.php/{モジュール名}/

でアクセスできました。

/modules/{モジュール名}/controllers/{モジュール名と違う名前}.phpの動作を確認
この場合はURLは 

設置場所URL/index.php/{モジュール名}/{コントローラ名}

でアクセスできました。

◆その後やったこと。◆
(HMVC) modular extensions 5217.zipのコードを拝見。
(=▽=).o(勉強になるなぁ♪)

(HMVC) modular extensions 5217.zipに+携帯関連のコードを追加しました。

  • 【携帯対応】モバイル判定 (MyNETS2より移植)
  • 【携帯対応】文字コードの処理および絵文字関連 (MyNETS2より移植)
  • 【携帯対応】セッションIDの発行 url_helperの拡張
  • 【携帯対応】携帯の場合のDBからのセッションの読み込み、セッション(Cookie)は暗号化することを前提です。

携帯、PCを意識することなく、コードが書ける環境ができました。

◆課題◆
CIUnitを外してしまいました。
modular extensions 5217.zipでは、うまく動かなかったことと、
やはり本体の本体/system/codeigniter/CodeIgniter.phpを書き換えることが、やっぱり引っかかります。

テストをする仕組みを再度組み込む必要があります。
とりあえずは、unit_testクラスを使う方向で考えたいと思います。

メモ*テストを書くべき場所はどこか?*
CodeIgniterのUnit_testクラスでテストを書くなら、testコントローラを作って、そこにテストを書きたいなと思います。
controllerからcontrollerを呼べないわけだけれど、controllerからモデルもライブラリもヘルパーも呼べる。
ということは、呼ぶ、値を渡す、返ってくる値を評価するというお仕事は、controllerが適役。

modular extensions 5217.zipを組み込むと、モジュールから、他のモジュールのコントローラを呼ぶことが出来ます。これを利用して、とりあえずはunit_testクラスを使う方向で、使ってみようと思います。

<?php 
 echo modules :: run ( 'module/controller/method' , $param , $...); 
?>

参考サイト:

CodeIgniter HMVC のその後

CodeIgniter

その後ですが、HMVCは一旦取り外してしまいました。
ごにょごにょしてたコードを一旦置いて、CodeIgniter1.7.1に対して、欲しかった機能を拡張するほうを優先しました。まだ私の理解力では足りない感じなので、順番に確実に進めていくことにしました。

この作業で、意識したのは次の3点。
(1)PCサイトと携帯サイトを構築するためのベースをつくる。
(2)PCサイトと携帯サイトをどう組み分けるか?を考える
(3)アプリとしての使い勝手と、アプリを組むために便利であることとのバランス。

(2)について。
愛読させていただいているCodeIgniter徹底入門では、携帯判定を行って、行った結果表示する情報量を減らす等の処理をして、モバイルとPCで両方使える掲示板の構築例がありました。コードを書く側から思えば、この方法のほうが、書くコードの量も少なくて楽です。そのようにしようと、サイトマップを作り始めたのですが・・・・・

実際アプリではなくてサイトとして考えると、PCと携帯を同時に考えるのは、結構複雑です。

携帯だけに実装したい機能、PCだけに実装したい機能、そしてそれらの機能に対する運用開始後の機能追加・・・を考えるとコントローラの中が結構複雑になってしまうし、作った人と運用後の機能追加をする人が違う場合には混乱しそうです。結局、コントローラを分けて、モデル、ライブラリは共通のものを使う方向で考えることにしました。。

モバイル対応が落ち着いたら、改めて挑戦したいと思います。

(=_=;).o(MyNETS2を素直に使えば良いとは思うんですよね・・・でももう少しそこに至るところまでを理解したいのです・・・・)

追記 2009.09.29
(=_=;).o0(追記の内容の方が、多いのでタイムスタンプを追記時間で書き換えました。)
やはりあきらめちゃダメだろうってことで、trac gitを用意。
とりあえずの携帯対応ができたCodeIgniter1.7.1を元にHMVCの組み込みを開始。

HMCV modular extensions 5219.zip
もう、HMVCエクステンションのバージョンがあがってる!!!
混乱して来たので、いままで触っていたものはそれはそれとして、置いておいて、
素の状態に、HMCV modular extensions 5219.zip を組み込んで、動くかどうか試してみた。
あっさりと、application/modules/{モジュール名}/以下のコントローラを読み込んでくれた。
また、モジュール名と同じコントローラ名でコントローラを作ったものは、コントローラ名を省略してくれている。モジュール名と違うコントローラ名の場合はURLが

モジュール名/コントローラ名/メソッド名

Machboxとほぼ同じ挙動になっている。

あとはmodelが動くかどうかも確認をしてみた。

  • welcomeなモデルをつくって試してみた。
    (なんだか呼ばれたのが嬉しい感じのテキストを返すモデルw)
  • application/modules/{モジュール名}/models/model_welcome.php
  • application/modules/{モジュール名}/controllres/welcome.phpから呼び出せた。
<?php
class Model_welcome extends Model {


    function Model_welcome()
    {
        // Call the Model constructor
        parent::Model();
    }
    
    function get_welcome()
    {
        $text = "Oh! Wecome Model !!!!";
        return $text;
    }
}

?>

動いてほしいと思っていた部分が確実に動く事を確認できたので、
次は中身を理解するためにコードを読むことにしてみます。

rhaco2をインストールしてみた。

rhaco2

rhaco2をインストールしてみました。
http://rhaco.org/
setup.phpをダウンロード。
設置をしてから、http越しにアクセス。

setup.php
とってもシンプル。

で、設置したパスが表示されたので、何も考えずポチ。

インストール後

フォルダができてました。

rhaco2のドキュメントはここにあるらしいです。
http://wikihub.org/wiki/rhaco2-doc

setup.php

そして、アプリケーションインストールを実行。
org.rhaco.sample.calcと入力して、ボタンをクリック。

すると、セットアップが表示されました。
setup

[メモ]CodeIgniterでHMVC

CodeIgniterCodeIgniter 1.7.1にHMVCを組み込みたいと思います。参考にさせていただいたサイトはhttp://d.hatena.ne.jp/dix3/20090828です。

Modular Extensions – HMVC
・(Google翻訳はこちら)

File:modular extensions 5217.zipをダウンロード後、application以下に設置ししました。 modules/welcomeを作成し、元々の1.7.1に梱包されていたコントローラ、とViewをコピーし保存。もともとのファイルを削除しました。 正常に動いているかどうかを確認するため、modules/welcome/views/welcome_message.phpを改変し表示確認。modules以下が参照されていることを確認しました。

welcome message

Controller.phpとModel.phpの内容を修正。
大文字小文字の問題は、CIUnitを組み込む際にもひっかかった所なのでサイトを参考にさせていただきつつ、改変。

TODO:
・CIUnitの組み込み
・絵文字・携帯機能の組み込み
 チェック中:http://sns.usagi-project.org/?m=diary&a=page_detail&target_c_diary_id=12433
 チェック中:http://www.revulo.com/PHP/library/HTML_Emoji.html
 チェック中・・・

kunitsujiさんってやっぱりすごいなと、MyNETS2の絵文字周り,携帯周りを見つつ再確認。←今ココ
携帯対応を後回しにして、とりあえず主目的だったCIUnitの組み込み中
Unit_testクラスで試し中
↑Unit_testクラスでテストを書いてみて思ったこと。
テストはコントローラで書いて、コントローラ以外のテストをする・・・・が良さそう。
ここらへんの思想はどうなってるんだろうか?

◆testコントローラを作って、モジュールのテストにUnit_testクラスを使う
ランゲージファイルが原因でのエラーが発生
unit_test_lang.phpのファイルの最後を?>で閉じたところ、エラーは解消されました。

◆結局やってる事と言うと・・・
MyNETS2の成り立ちをトレースしてる感じです。
今まで意識になく、でも考えなきゃいけなかったことを目の前のコードと動きが問題提起してくれてる感じ。お手本もあり、なんて恵まれてるんだろうと感謝感謝

◆CIUnitはというと・・・
CIUnitのために必要なライブラリの読み込みに失敗。
原因はなんとなくわかったけれども、まだ未解決。

◆1.7.1のセッションをDBに保存の部分
ユーザガイドのように設定してみたけれど、DB接続エラーが出ちゃう(><)
上記は解決。config/database.phpをうっかり上書きしてしまい、データベースの設定が消えていたと言う恥ずかしい原因・・・・・

1.7.1のユーザマニュアルのデータベースのテーブル設定部分

$config['sess_table_name'] = 'ci_sessions";

‘ではじまって”で閉じてるwww あわててたんだろうな♪
癒されました(^-^)

CIUnitの私の使用状況と考えについて

CodeIgnigter

以前に作成した資料を拝見くださった方が、twitterにてフォローいただいたとのことなので、
現状手元にあるCIUnitがどのような状況なのか、書いてみたいと思います。

◆ネコネットデザイン事務所ホームページ
CodeIgniter 1.6.2に組み込み
modelを中心にテストを書いてみました。
運用サーバ上にテストをアップしないように、applicationフォルダ以下をSVN管理上のファイルとして扱い、
テストは自分だけに見える状態として扱ってます。

◆MyNETS2 にCIUnitを組み込み
リビジョン番号を控えわすれてますが、リポジトリからエクスポートさせていただいたのが2009年4月9日となっているので、かなり古いものです。確認しましたがその頃のファイルは残ってないようなので、現在レポジトリで公開されているものとは中身が違うようです。
設定ファイルの設定でCIUnitのON OFFを制御させています。
テストコードも複数人で共有できるようにSVN管理しています。
現在これをベースに組んでいたものは、途中でやる気を失ってしまい放置状態ですorz
この時点で発生した問題としては、セッション系の部分とモバイル、PCの判定部分を突破できず、コントローラのテストはできませんでした。モジュール、ヘルパー、ライブラリに関してはphpUnitは正常に動作し、テストが実行できる状況が作れています。
この2ヶ月ほどは、7月頭ぐらいにコミットされてるリビジョンのMyNETS2をいじっていますが、まだそれにはCIUnitは組み込んでいません。CIUnitとは違う方法でのphpUnitの利用を模索中です。

◆まだTDDにはたどり着いていないという事
去年のOSC、
そしてt-wadaさんの「TDDテスト駆動開発」を拝見してから、テストせねばということでテストをするということに取り組んでるわけですが、実際のところまだTDDの、「先にテストを書く」というところには、まだたどり着いていません。

コードを書く→ちゃんと動くかテストを書く→テストを動かしてみる。

私はついつい長々とコードを書いてしまうので、
処理を分割する→テストを動かす→うごいてる♪
な、動作の確認にもテストを動かして、確認をしている感じです。

CIUnitで書いているテストは、Modelに対して行っています。
少しずつですが、最近はhelperに対するテストを書き始めました。
不器用なので、まだテストという技術を身につけるには至っていないと思いますが、少しずつできるようになってきているのかなと感じています。

◆コントローラのテストに対する考え
MyNETS2に組み込んだCIUnitも素の状態の1.6.2に組み込んだCIUnitも、
現状Controllerのテストはやりにくい状態です。
この部分は、無理にUnitテストではなく、目視での確認
バッチでコントローラを走らせた後に、DBの値を検証をする、もしくはWebアプリケーション用のテストツールSelenium等を利用した、別の形で行うのが良いかと思っています。
model,helper,ライブラリ等で、何を投げて何が返ってくるのかにだけ注目し、他は行わないという割り切りがあっていいかなと思っています。

2009.09.10 追記

phpカンファレンス2009 テックディ

今日はphpカンファレンス2009 テックディに行ってきます!

2009.09.07追記
sotarokさんとriafさんとの「新しくなったOpenpear 」
非常におもしろかったので、動画を貼り付けておきます。

1年を振り返ってみる
PHPカンファレンス2008から丁度1年。
去年のPHPカンファレンス終了後の焼肉屋さんにて、
フレームワークに対しての疑問とか不信感を払拭してくれた、柴田さんの言葉を糧に1年、フレームワークと向き合うことが出来ました。(結構失礼な質問もたくさんしちゃったように思います。本当にすみませんでした(><))

CakePHP1.1とCodeIgniterに対して、諦めずに取り組むことが出来ました。

まだまだしっかりと理解できたというところまでは辿りつけていませんが、
諦めずにこれたこの1年に感謝です。

今年のPHPカンファレンスでも、たくさんの方に出会え、またたくさんの話を直に聞くことができました。
大感謝。

来年のカンファレンスまで1年。頑張りたいと思います(^-^)

CodeIgniter読書会@東京があるらしい!

CodeIgniter徹底入門

OSC2009 Nagoyaで第一回CodeIgniter読書会が開催されましたが、東京でも開催されるようです。
このまま各地で広がっていくのかな?と期待デス♪

http://groups.google.co.jp/group/codeigniter-reading/web/codeigniter–1

以下上記URLより参照

日時
2009年9月4日(金) 19:00〜21:00
場所
CafeMiyama渋谷東口駅前店 会議室 5号室

主な対象
PHPフレームワークに興味がある人。PHPフレームワークを覚えたい人。PHP初心者でも構いません。PHPに関する雑誌や本を書いている人、フレームワークを作ってます、というような人は主な対象ではありませんので、サポートする側にまわってください。

参加資格
この Googleグループに参加していること。

メモ pleiades

CodeIgniter徹底入門

http://groups.google.co.jp/group/codeigniter-reading/web/codeigniter-1?hl=ja

CodeIgniter読書会で、pleiadesの話題が出ていたので、調べてみる〆(。。)

CodeIgniterメーリングリスト・・・・そろそろ諦めて登録するかなぁ・・・・
(現在未登録・・・(><))

登録してしまいましたorz ・・・・そのうちまた退会するかも・・・・ML苦手なのです(><)