<?xml version="1.0" encoding="utf-8"?><!-- generator="b2evolution/1.8.1-RC" -->
<rss version="0.92">
	<channel>
		<title>ぎじゅっやさん</title>
					  <link>http://hain.jp/index.php/tech-j</link>
			  <description>PHPエンジニアのPHPに関係ありそうな内容のブログ</description>
			  <language>ja-JP</language>
			  <docs>http://backend.userland.com/rss092</docs>
			  			  <item>
			    <title>fuelPHPとmongodbを使ってみた</title>
			    <description>このブログで&lt;a href=&quot;http://codeigniter.com/&quot;&gt;codeIgniter&lt;/a&gt;を紹介したのはもう何年前だろうか。&lt;br /&gt;
&lt;br /&gt;
 (ノ・・)ン。。。。。。(((●コロコロッ&lt;br /&gt;
&lt;br /&gt;
軽量最速のPHPフレームワークとして掲載したが、&lt;br /&gt;
掲載後一年ぐらい経ったときに日本で広まっていた気がする。&lt;br /&gt;
その&lt;a href=&quot;http://codeigniter.com/&quot;&gt;codeIgniter&lt;/a&gt;のメンバーが新たにフレームワークを作っていた。&lt;br /&gt;
それが&lt;br /&gt;
&lt;div style=&quot;text-align:center;&quot;&gt;&lt;a href=&quot;http://fuelphp.com/&quot;&gt;&lt;strong&gt;fuelPHP&lt;/strong&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
一番大きな違いはライセンス。&lt;br /&gt;
&lt;a href=&quot;http://codeigniter.com/&quot;&gt;codeIgniter&lt;/a&gt;はEllisLab Incの独自で、&lt;br /&gt;
気軽に使うにはちょっと微妙な状態になっている。&lt;br /&gt;
その点&lt;a href=&quot;http://fuelphp.com/&quot;&gt;fuelPHP&lt;/a&gt;は安心のMITライセンスだ。&lt;br /&gt;
機能も非常に充実していて&lt;a href=&quot;http://codeigniter.com/&quot;&gt;codeIgniter&lt;/a&gt;の欠点も補っている。&lt;br /&gt;
&lt;br /&gt;
もう一つはジェネレータ。&lt;br /&gt;
&lt;a href=&quot;http://codeigniter.com/&quot;&gt;codeIgniter&lt;/a&gt;にはジェネレータが存在せず、&lt;br /&gt;
Controller, model, viewを手動で作成する必要があったが、&lt;br /&gt;
&lt;a href=&quot;http://fuelphp.com/&quot;&gt;fuelPHP&lt;/a&gt;はジェネレータを使ってController, mode, migrationを生成できる。&lt;br /&gt;
Scaffoldingにも対応。&lt;br /&gt;
&lt;br /&gt;
前回の記事で掲載した&lt;a href=&quot;http://www.mongodb.org/&quot;&gt;mongodb&lt;/a&gt;も標準で対応している。&lt;br /&gt;
なので併せて使ってみようと思う。&lt;br /&gt;
&lt;a href=&quot;http://www.mongodb.org/&quot;&gt;mongodb&lt;/a&gt;のインストール自体は終わっているものとしている。&lt;br /&gt;
詳しくは前回の記事を読んで欲しい。&lt;br /&gt;
&lt;a href=&quot;http://hain.jp/index.php/tech-j/2012/01/09/p250&quot;&gt;mongodbをyumでCentOSにインストール(UTF8対応版)&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;a href=&quot;http://hain.jp/index.php/tech-j/2012/01/23/p251#more251&quot;&gt;[...] Read more!&lt;/a&gt;</description>
			    <link>http://hain.jp/index.php/tech-j/2012/01/23/fuelPHP%e3%81%a8mongodb%e3%82%92%e4%bd%bf%e3%81%a3%e3%81%a6%e3%81%bf%e3%81%9f</link>
			  </item>
			  			  <item>
			    <title>mongodbをyumでCentOSにインストール(UTF8対応版)</title>
			    <description>UTF8対応でつまづいた。&lt;br /&gt;
&lt;br /&gt;
 (ノ・・)ン。。。。。。(((●コロコロッ&lt;br /&gt;
&lt;br /&gt;
---&lt;br /&gt;
RDBばかり長いことやってきたので、&lt;br /&gt;
それ以外のデータベースを扱うのは概念自体を勉強しなおさなければならなくて、&lt;br /&gt;
全然理解が追いついていない状況。&lt;br /&gt;
以下の記事は内容が間違っていることだらけだと思うが。&lt;br /&gt;
ご了承いただきたい。&lt;br /&gt;
---&lt;br /&gt;
&lt;br /&gt;
&lt;a href=&quot;http://fuelphp.com/&quot;&gt;fuelPHP&lt;/a&gt;を触っていたときにmongodbに対応していることに気がついた。&lt;br /&gt;
ということでちょっと触ってみることに。&lt;br /&gt;
&lt;a href=&quot;http://ja.wikipedia.org/wiki/NoSQL&quot;&gt;NoSQL&lt;/a&gt;という概念があることは知ってはいたものの深く関わることはないだろうと思っていたのだが、&lt;br /&gt;
さわりもせずに物事を判断するのは一番やってはいけないことだと思い、&lt;br /&gt;
丁度良いタイミングで触れそうな機会があったのでやってみることにした。&lt;br /&gt;
ただ、アプリケーションサーバををJavaScript(Node.js)にするのはちょっと厳しそうなので、&lt;br /&gt;
そこはPHPのままでやることに。&lt;br /&gt;
&lt;br /&gt;
&lt;blockquote&gt;&lt;div&gt;&lt;ol&gt;  &lt;li&gt;yumでmongodb, mongodb-devel, mongodb-serverをインストール&lt;/li&gt;  &lt;li&gt;jsをソースからビルドしてインストール&lt;/li&gt;  &lt;li&gt;libjs.so.1を置き換え&lt;/li&gt;  &lt;li&gt;/var/lib/mongdbディレクトリ作成&lt;/li&gt;&lt;/ol&gt;&lt;/div&gt;&lt;/blockquote&gt;&lt;br /&gt;
&lt;br /&gt;
普通にyumでインストールするだけだと以下のようなエラーが出る。&lt;br /&gt;
&lt;blockquote&gt;&lt;div&gt;MongoDB shell version: 1.6.4&lt;br /&gt;
Tue Dec  6 11:06:30 *** warning: spider monkey build without utf8 support.  consider rebuilding with utf8 support&lt;br /&gt;
connecting to: test&lt;/div&gt;&lt;/blockquote&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
以下の手順ではUTF8の対策も施している。&lt;br /&gt;
&lt;br /&gt;
&lt;a href=&quot;http://hain.jp/index.php/tech-j/2012/01/09/p250#more250&quot;&gt;[...] Read more!&lt;/a&gt;</description>
			    <link>http://hain.jp/index.php/tech-j/2012/01/09/mongodb%e3%82%92yum%e3%81%a7CentOS%e3%81%ab%e3%82%a4%e3%83%b3%e3%82%b9%e3%83%88%e3%83%bc%e3%83%ab(UTF8%e5%af%be%e5%bf%9c%e7%89%88)</link>
			  </item>
			  			  <item>
			    <title>homebrewでOSXにwgetをインストール</title>
			    <description>ソースコンパイルしか無い・・・のか!?&lt;br /&gt;
&lt;br /&gt;
(ノ・・)ン。。。。。。(((●コロコロッ&lt;br /&gt;
&lt;br /&gt;
ターミナルを使ってて何かをダウンロードしようとするとき、&lt;br /&gt;
手が勝手にwgetと打ち込んでしまう。&lt;br /&gt;
今のところcurlで代用しているがやっぱりwgetのほうが便利だな。&lt;br /&gt;
インストール方法を探してみると意外に見つからない。&lt;br /&gt;
ソース入れれば良いんだろうけどパッケージ管理したい。&lt;br /&gt;
&lt;br /&gt;
MacのLinuxでパッケージ管理ツールはなかなか全然見つからなかったが一応あった。&lt;br /&gt;
&lt;br /&gt;
&lt;div style=&quot;text-align:center;&quot;&gt;&lt;a href=&quot;http://www.macports.org/&quot;&gt;&lt;strong&gt;MacPorts&lt;/strong&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;div style=&quot;text-align:center;&quot;&gt;&lt;a href=&quot;https://github.com/mxcl/homebrew&quot;&gt;&lt;strong&gt;homebrew&lt;/strong&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;a href=&quot;http://hain.jp/index.php/tech-j/2011/12/19/p241#more241&quot;&gt;[...] Read more!&lt;/a&gt;</description>
			    <link>http://hain.jp/index.php/tech-j/2011/12/19/homebrew%e3%81%a7OSX%e3%81%abwget%e3%82%92%e3%82%a4%e3%83%b3%e3%82%b9%e3%83%88%e3%83%bc%e3%83%ab</link>
			  </item>
			  			  <item>
			    <title>git svnでSubversionリポジトリをgitでコントロール</title>
			    <description>Subversionはオワコン&lt;br /&gt;
&lt;br /&gt;
 (ノ・・)ン。。。。。。(((●コロコロッ&lt;br /&gt;
&lt;br /&gt;
実開発ですでに&lt;a href=&quot;http://git-scm.com/&quot;&gt;git&lt;/a&gt;を導入しているが、&lt;br /&gt;
会社では&lt;a href=&quot;http://subversion.tigris.org/&quot;&gt;Subversion&lt;/a&gt;がメインストリームになっている。&lt;br /&gt;
&lt;br /&gt;
gitは後発のバージョンコントロールシステムで、&lt;br /&gt;
ソースコードの分散管理が可能となっている。&lt;br /&gt;
なのでリポジトリサーバが飛んでソースコードが消えるといった自体にならない。&lt;br /&gt;
(もちろん運用次第だが)&lt;br /&gt;
アンチSubversionで構成されている。&lt;br /&gt;
作者は使用に悩んだときはSubversionを参照しSubversionのとった行動とは真逆のほうを選んだとか。&lt;br /&gt;
&lt;br /&gt;
ソースコード管理をgitにさくっと切り替えたくてもなかなか出来ないものなので、&lt;br /&gt;
現状のSubversionシステムを維持しつつ、&lt;br /&gt;
Gitで管理していく方法がある。&lt;br /&gt;
それが&lt;br /&gt;
&lt;br /&gt;
&lt;div style=&quot;text-align:center;&quot;&gt;&lt;strong&gt;git-svn&lt;/strong&gt;&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;a href=&quot;http://hain.jp/index.php/tech-j/2011/12/05/p249#more249&quot;&gt;[...] Read more!&lt;/a&gt;</description>
			    <link>http://hain.jp/index.php/tech-j/2011/12/05/git+svn%E3%81%A7Subversion%E3%83%AA%E3%83%9D%E3%82%B8%E3%83%88%E3%83%AA%E3%82%92git%E3%81%A7%E3%82%B3%E3%83%B3%E3%83%88%E3%83%AD%E3%83%BC%E3%83%AB</link>
			  </item>
			  			  <item>
			    <title>STAR Auto Testing Frameworkでドキュメント駆動開発</title>
			    <description>以前の記事で&lt;a href=&quot;http://lucentcrafts.blog102.fc2.com/blog-entry-57.html&quot;&gt;STAR Auto Testing Framework&lt;/a&gt;を紹介した。&lt;br /&gt;
（作者本人も驚いていたようだ。）&lt;br /&gt;
今回は実践してみたのでその辺りを書いてみようと思う。&lt;br /&gt;
&lt;br /&gt;
テスト駆動開発を実践する上で、&lt;br /&gt;
私はテストケースをというコードを書くことに異議を唱えた。&lt;br /&gt;
（もちろん理解者はゼロ）&lt;br /&gt;
理由は以前も書いたが、&lt;br /&gt;
テスト仕様書とテストケースという内容が全く同じで言語が違うだけもの２回も用意する意味がないからだ。&lt;br /&gt;
仕様書を書けばテストケースが出来上がるのが理想の形だろう。&lt;br /&gt;
そうすれば仕様書とテスト内容が異なるようなことも起きない。&lt;br /&gt;
&lt;br /&gt;
似たような例にデータベースがある。&lt;br /&gt;
MySQLにはMySQL Workbenchというデータベース設計ツールがある。&lt;br /&gt;
（旧DB Designer4と言えばわかるだろうか。）&lt;br /&gt;
これでDB設計し、ER図を書くと、SQL分が発行されデータベースが出来上がる。&lt;br /&gt;
こうすることで設計書と実際の齟齬を無くしている。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
逆にドキュメントを書かないとテストも出来ないし、&lt;br /&gt;
ＥＲ図を描かないとＤＢができないので、&lt;br /&gt;
ドキュメント作成の意識も高まるといえる。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;a href=&quot;http://lucentcrafts.blog102.fc2.com/blog-entry-57.html&quot;&gt;STAR Auto Testing Framework&lt;/a&gt;は単体テストとＳＴに対応している。&lt;br /&gt;
前者はPHPUnit, JUnitを使用、後者はSeleniumを使うことを前提としている。&lt;br /&gt;
これら一つ一つだけでも一冊の本があるぐらいなのでここでは詳細な説明は省く。&lt;br /&gt;
そして私はJavaに明るくは無いのでJUnitのことは今回は取り上げないが内容に差はないと思う。&lt;br /&gt;
あと文章が長くなったので今回は単体テストだけ行う。&lt;br /&gt;
&lt;br /&gt;
&lt;a href=&quot;http://www.phpunit.de&quot;&gt;PHPUnit&lt;/a&gt;は&lt;a href=&quot;http://www.simpletest.org/&quot;&gt;SimpleTest&lt;/a&gt;と並んで割と一般的に使われているテストフレームワーク。&lt;br /&gt;
テストケースを作成しphpunitとコマンドを打てばがんがんテストをしてくれる。&lt;br /&gt;
&lt;br /&gt;
&lt;a href=&quot;http://seleniumhq.org/&quot;&gt;Selenium&lt;/a&gt;はブラウザを使って自動テストをしてくれるテストフレームワーク。&lt;br /&gt;
いくつか種類があるが&lt;a href=&quot;http://lucentcrafts.blog102.fc2.com/blog-entry-57.html&quot;&gt;STAR Auto Testing Framework&lt;/a&gt;ではFirefoxプラグインのSeleniumIDEを使うことを想定しているようだ。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
では実際どのような流れになるのか。&lt;br /&gt;
全体的なフローは以下の通り。&lt;br /&gt;
&lt;blockquote&gt;&lt;div&gt;&lt;ol&gt;&lt;li&gt;仕様書を作成する&lt;/li&gt; &lt;li&gt;空のプログラムを作成&lt;/li&gt; &lt;li&gt;全部エラーになるようにテスト仕様書の作成&lt;/li&gt; &lt;li&gt;テストケースの生成&lt;/li&gt;  &lt;li&gt;テスト実行しエラーになるのを確認&lt;/li&gt; &lt;li&gt;実装作業&lt;/li&gt; &lt;li&gt;テスト実行しエラーがなくなるのを確認&lt;/li&gt;&lt;/ol&gt;&lt;/div&gt;&lt;/blockquote&gt;&lt;br /&gt;
&lt;br /&gt;
重要なのは&lt;strong&gt;最初のテストを全部エラーになる&lt;/strong&gt;ようにし、&lt;br /&gt;
実装後&lt;strong&gt;すべてのエラーが出なくなること&lt;/strong&gt;を確認すること。&lt;br /&gt;
こうすることで一つのメソッドに対する入出力を保障することが出来る。&lt;br /&gt;
テストのパターンは自身が想定しうる問題すべてを網羅しておくこと。&lt;br /&gt;
&lt;br /&gt;
&lt;a href=&quot;http://hain.jp/index.php/tech-j/2011/11/21/p247#more247&quot;&gt;[...] Read more!&lt;/a&gt;</description>
			    <link>http://hain.jp/index.php/tech-j/2011/11/21/STAR+Auto+Testing+Framework%E3%81%A7%E3%83%89%E3%82%AD%E3%83%A5%E3%83%A1%E3%83%B3%E3%83%88%E9%A7%86%E5%8B%95%E9%96%8B%E7%99%BA</link>
			  </item>
			  			  <item>
			    <title>PHPUnitでprivate,protectedのメソッドをテストする方法</title>
			    <description>PHPUnitなどでテストを実行するとき、&lt;br /&gt;
どうしても発生する問題がある。&lt;br /&gt;
それは&lt;br /&gt;
&lt;br /&gt;
privateメソッドをテストできない&lt;br /&gt;
&lt;br /&gt;
クラスを定義するときに、&lt;br /&gt;
privateやprotectedのプロパティ、メソッドを定義することは珍しくも無い。&lt;br /&gt;
特に複数人でシステムを組んでいるときはアクセス制限は非常に重要になってくる。&lt;br /&gt;
ただ、問題としてテストを行う際、&lt;br /&gt;
外部のプログラムであるPHPUnit側からアクセスが出来なくなりテストが出来ない。&lt;br /&gt;
そのためにpublicメソッドにするのは本末転倒といえる。&lt;br /&gt;
&lt;br /&gt;
クラスを拡張してparent::親クラスメソッドとして動かす方法もあるが、&lt;br /&gt;
べた書きコードならともかくフレームワークに組み込まれているものだととり回しがしずらい。&lt;br /&gt;
&lt;br /&gt;
(ﾟωﾟ)? じゃあどうするの?&lt;br /&gt;
&lt;br /&gt;
&lt;div style=&quot;text-align:center;&quot;&gt;そこで使うのが&lt;strong&gt;&lt;a href=&quot;http://jp.php.net/reflectionmethod&quot;&gt;ReflectionMethod&lt;/a&gt;&lt;/strong&gt;&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;a href=&quot;http://hain.jp/index.php/tech-j/2011/11/07/p248#more248&quot;&gt;[...] Read more!&lt;/a&gt;</description>
			    <link>http://hain.jp/index.php/tech-j/2011/11/07/PHPUnit%E3%81%A7private+protected%E3%81%AE%E3%83%A1%E3%82%BD%E3%83%83%E3%83%89%E3%82%92%E3%83%86%E3%82%B9%E3%83%88%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95</link>
			  </item>
			  	</channel>
</rss>

