<?xml version="1.0" encoding="UTF-8"?><!-- generator="WordPress/2.6.2" -->
<rss version="0.92">
<channel>
	<title>エクスギア　Blog</title>
	<link>http://www.exgear.jp/blog</link>
	<description>エクスギアの技術系blog</description>
	<lastBuildDate>Tue, 11 Jan 2011 07:36:16 +0000</lastBuildDate>
	<docs>http://backend.userland.com/rss092</docs>
	<language>ja</language>
	
	<item>
		<title>CakePHP + Ext JS で グリッド 編集 (EditorGridPanel)</title>
		<description><![CDATA[CakePHPとExt JSにはRESTの仕組みがあります。これを利用してExt JSのグリッド編集を行います。
前回のサンプルではグリッド表示だけで、編集機能がありませんでした。
これに編集機能を付けます。
追加・変更部分のみ記載します。

Javascript
 app/webroot/js/books.js
PLAIN TEXT
JavaScript:




Ext.onReady&#40;


&#160; &#160; function&#40;&#41;&#123;


&#160; &#160; &#160; &#160; // １ページに表示する行数 Ext.data.JsonStoreとExt.PagingToolbarの両方で利用


&#160; &#160; &#160; &#160; var limit = 10;


&#160;


&#160; &#160; &#160; &#160; // ストア (JSON用)


&#160; &#160; &#160; &#160; var store = new Ext.data.JsonStore&#40;


&#160; &#160; &#160; &#160; &#160; &#160; &#123;


&#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; // URL


&#160; &#160; &#160; &#160; &#160; &#160; &#160; [...]]]></description>
		<link>http://www.exgear.jp/blog/2011/01/cakephp-ext-js-%e3%81%a7-%e3%82%b0%e3%83%aa%e3%83%83%e3%83%89-%e7%b7%a8%e9%9b%86-editorgridpanel/</link>
			</item>
	<item>
		<title>CakePHP + Ext JS で グリッド 表示 (GridPanel)</title>
		<description><![CDATA[CakePHPとExt JSにはRESTの仕組みがあります。これを利用してExt JSのグリッド表示を行います。
下記のサンプルでは蔵書テーブル(books)と著者テーブル(authors)から情報を取得して一覧をグリッドで表示します。

javascriptファイルの作成
 app/webroot/js/books.js
PLAIN TEXT
JavaScript:




Ext.onReady&#40;


&#160; &#160; function&#40;&#41;&#123;


&#160; &#160; &#160; &#160; // １ページに表示する行数 Ext.data.JsonStoreとExt.PagingToolbarの両方で利用


&#160; &#160; &#160; &#160; var limit = 10;


&#160;


&#160; &#160; &#160; &#160; // ストア (JSON用)


&#160; &#160; &#160; &#160; var store = new Ext.data.JsonStore&#40;


&#160; &#160; &#160; &#160; &#160; &#160; &#123;


&#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; // URL


&#160; &#160; &#160; &#160; &#160; &#160; &#160; [...]]]></description>
		<link>http://www.exgear.jp/blog/2011/01/cakephp-ext-js-%e3%81%a7-%e3%82%b0%e3%83%aa%e3%83%83%e3%83%89%e8%a1%a8%e7%a4%ba/</link>
			</item>
	<item>
		<title>MongoDBでPHPのセッション管理をする</title>
		<description><![CDATA[MongoDBはNoSQLと言われるドキュメント指向データベースとして有名です。
以前個人的にsymfony1系でのセッション管理をMongoDBで行うsfMongoSessionStrageというのを書いたのですが、も [...]]]></description>
		<link>http://www.exgear.jp/blog/2010/11/php-session-mongodb/</link>
			</item>
	<item>
		<title>メールでお手軽デバッグ</title>
		<description><![CDATA[PHPは必ずと言ってよいほど配列を多用することになります。なのでどのような配列になっているのかをちょっとデバッグしたいということは多々あります。このようなデバッグをしようとするとまず最初に思い浮かぶ関数がprint_rや [...]]]></description>
		<link>http://www.exgear.jp/blog/2010/10/debug-with-error_log/</link>
			</item>
	<item>
		<title>Wordpressのテンプレートでsymfonyを使う</title>
		<description><![CDATA[symfonyで開発しつつ、ブログ部分についてはsymfonyでゼロから開発するのではなく、既に使い慣れたWordpressを使えたら便利ですよね。
このWordpressとsymfonyの連携方法について実際にやってみ [...]]]></description>
		<link>http://www.exgear.jp/blog/2010/10/wordpress-with-symfony/</link>
			</item>
	<item>
		<title>960.gsでCSSが苦手な人でも簡単段組みデザイン</title>
		<description><![CDATA[

開発者にとって大変なこととは開発をすることよりも大変だと思うことがあります。それはデザインに関する部分です。
たとえば、私にとって3段組みのモックのHTMLを主要ブラウザできちんと表示されるCSSで奇麗に何の資料も見 [...]]]></description>
		<link>http://www.exgear.jp/blog/2010/10/960gs-simple/</link>
			</item>
	<item>
		<title>Google Analytics APIを使ったアクセスランキング表示</title>
		<description><![CDATA[Google Analyticsを導入するという選択肢はとても一般的なものになりました。
多くのサイトではGoogle Analyticsタグを記述し、管理画面に入り日々にらめっこしている管理者の方も多いと思います。
こ [...]]]></description>
		<link>http://www.exgear.jp/blog/2010/10/googleanalyticsapi-php/</link>
			</item>
	<item>
		<title>PHPUnit と Selenium RCで機能テストをやってみる</title>
		<description><![CDATA[PHPのテストライブラリとしては一番有名どころのPHPUnitと実際のブラウザをJavaScriptを使って画面遷移をテストすることができるSelenium RCを使って実際に結合テストを行ってみたので今回紹介したいと思います。

PHPUnit
PHPUnitはPHPの一番有名なテストライブラリです。テストケースを用意することで仕様変更にも強いアプリケーション開発が可能になります。
さまざまなことができるPHPUnitですが、PHPUnitだけでは画面遷移のような機能テストは難しいものです。
なぜなら、PHPだけで画面遷移を確認するためにはブラウザの動きをシミュレーションしたライブラリを使ったりしてテストする方法になってしまうからです。
たとえばsymfony1系ではsfTestBrowserというライブラリが用意されていてこのライブラリを利用することでテストが行えるようになっていますが、Cookieの操作やベーシック認証下でのテストなど本物のブラウザでテストできれば気にしなくてもいいのにという部分があります。
また、sfTestBrowserでは問題なく動作していても実際のブラウザでは動かなかったということもありました。
これらの問題点を解決してくれるのがSelenium RCです。
Selenium
Selenium RC はテストツールのひとつです。 ウェブアプリケーションのユーザインターフェイスについてのテストを自動化することができます。実際のブラウザを使ってテストを行えることでさきほどの問題点を見事に解決することができます。
Seleniumを簡単に試す方法はFirefoxのアドオンであるSelenium IDEをインストールし、実際に操作した動きをテストパターンとして記録しテストを行う方法です。
インストールすると以下のようなメニューが追加されます。




あとは右上の赤丸を押してレコードをスタートし、実際にブラウザで画面遷移を行うだけでその動きが記録されます。




以下の例は実際に記録し、最後の画面に[Doctrine2を試してみる(5) Timestampableを実装してみる]という文字列が含まれているかどうかをテストしています。
正常だった場合は緑に、エラーだった場合は赤く表示されます。





このように実際のブラウザでのテストはファイルで保存できるのでこのテストファイルを共有しておけば誰もが同じテストを行う事ができます。
そしてこのPHPUnitとSeleniumを連携できれば理想なのにという点を実現しているのがSelenium RCを利用したテストです。
PHPUnitでSeleniumのテストパターンを書く事ができ、Seleniumサーバーを通して実際にブラウザでのテストを実行、その結果をPHPUnitで確認できるという流れです。
簡単に図にすると以下のようなイメージでテストサーバーと会話ができます。


Firefoxのアドオンだけではできなかったあらゆるメリットがあります。

テストケースをPHPUnitで書くことができる。
テストするブラウザを指定できるので1つのテストケースを用意しておけば複数のブラウザでのテストも簡単
テスト結果をPHPUnit側で把握できる

では、実際に簡単に連携を行ってみたいと思います。
準備
PHPUnitとSelenium RCをローカルマシンにインストールします。
PHPUnitはPEARを通してインストールするのが一番楽です。
$ pear channel-discover pear.phpunit.de
$ pear channel-discover pear.symfony-project.com
$ pear install phpunit/PHPUnit

symfonyのコンポーネントを使っているところがあるのでsymfonyのチャンネルも追加する必要があります。もし、PEARを使わずにインストールする場合はPHPUnitに用意されているPHPのパスを書き換える必要があります。私は直接PEARを使わずインストールしましたが以下のページに従えば簡単にできました。ダウンロードして展開したPHPUnitをinclude_pathに追加しておくのを忘れないようにしましょう。
PHPUnitのインストール
Selenium RCはダウンロードページから Selenium RC 1.0.3をダウンロードしてきて展開しておきます。
そして

java -jar /[展開したディレクトリへのパス]/selenium-server-1.0.3/selenium-server.jar

でサーバーを起動させればOKです。
テストケースを書く
では、実際にテストケースを書いてみます。
更に詳しいサンプルコードは公式サイトのドキュメントを見てみてください。
ポイントは以下の２点です。

PHPUnit/Extensions/SeleniumTestCase.phpをrequireしておく。   
テストケースの基底クラスにPHPUnit_Extensions_SeleniumTestCaseを指定する。 
テストを実行するブラザを指定する                           [...]]]></description>
		<link>http://www.exgear.jp/blog/2010/10/phpunit-seleniumrc/</link>
			</item>
	<item>
		<title>Doctrine2を試してみる(5) Timestampableを実装してみる</title>
		<description><![CDATA[多くの機能が実装されているDoctrine2ですが、この4回のブログ記事で大体の扱い方は見えてきたように思います。
今回はDoctrine1であったビヘイビアの機能がどうなったのかを見てみたいと思います。

Doctri [...]]]></description>
		<link>http://www.exgear.jp/blog/2010/10/doctrine2-timestampable/</link>
			</item>
	<item>
		<title>Doctrine2を試してみる(4) リポジトリ</title>
		<description><![CDATA[1回目で触れましたがDoctrine2ではロジック処理をリポジトリクラスに集約しておくことができます。
1エンティティごとに1リポジトリを指定できるようになっているようです。
このリポジトリの中にDQLを閉じ込めてメソッ [...]]]></description>
		<link>http://www.exgear.jp/blog/2010/10/doctrine2-repository/</link>
			</item>
</channel>
</rss>

