軽量フレームワーク3eyesの公開
とりあえず、公開を開始した。いつまでも自分の手元でちまちま修正していてもいいソフトにはならないので、公開して、誰かに使ってもらって(使ってもらえればいいのだけれど)、随時修正を加えたほうがいいと思った次第。
バグ報告、機能リクエスト、そのほか各種要望、開発参加・手伝い希望(もしあれば)、そのほか諸々の連絡には、備え付けの掲示板をどうぞ(もちろんPowered by 3eyes)。
とりあえず、公開を開始した。いつまでも自分の手元でちまちま修正していてもいいソフトにはならないので、公開して、誰かに使ってもらって(使ってもらえればいいのだけれど)、随時修正を加えたほうがいいと思った次第。
バグ報告、機能リクエスト、そのほか各種要望、開発参加・手伝い希望(もしあれば)、そのほか諸々の連絡には、備え付けの掲示板をどうぞ(もちろんPowered by 3eyes)。
自分でも開発している軽量フレームワーク、仕事もせず3eyesの開発をたっぷり楽しんでいる。実際に自分で開発するに当たっていろいろ調べると、いくつかPHPの軽量フレームワークに出会うことができた(もっと早くに出会えれば、いろいろおいしいとこ取りできたのに)。そこでちょっととりまとめ。
あれ、たくさんあると思ったら、そんなにない。KohanaPHPはCodeIgnighterから分家したフレームワークでPHP5専用。Petitwork Frameworkは和製。検索をかけてみても実は意外とヒットが少ない。日本では軽量フレームワークは需要が少ないということだろうか。それとも、日本人は権威に弱いので、Zend FrameworkやcakePHPなどの有名どころに落ち着いてしまうのだろうか。
ちょっとしたウェブアプリを開発して、内容もこなれてきて3eyesのリリースも間近になってきた。マニュアル作成にはまだ時間がかかるだろうけど、とりあえずサンプルも用意したし、今週末公開予定だ。
誰か使ってください。
3eyesでのサンプルプログラムを作ってみた。3eyesサイト内のサポート掲示板を3eyes自身を使って構築した。実際にウェブアプリを構築してみると、バグがよく見つけられる。今回も2箇所バグを発見した。リリース前でよかった。
俺俺フレームワークということもあり内情をよくわかっているので、構築効率もすごくいい。掲示板はスレッド+コメント機能で構成され、スレッド発言やコメント発言は入力・確認・完了の3画面構成、入力時にはバリデーションをかけた。データベースにはSQLiteを使いテーブルは2つとシンプルな構成にした。この構成で開発時間は3時間弱で終わった。たぶん開発よりもデザインとコーディングのほうが時間がかかったと思う。開発効率アップという部分では大きな収穫を得られた。
pdoを使ってプリペアードステートメントから各値をバインドするための関数が2つ用意されている。bindParamとbindValueだ。bindValueはコマンドが発行される都度SQL文に値がセットされるのに対し、bindParamは参照で値が渡され、execute実行時に初めて値に変換される。とりあえずマニュアルを読んで理解していたつもりだったのだが、やっぱり「つもり」だった。
$sql=’INSERT INTO table VALUES (?,?)';
上記のSQL文をプリペアードステートメントとしてセットし値をバインドしていくわけだが、こんなことをしてしていた。
$values=array(1=>3,2=>5);
foreach($values as $name => $value){
$preparedStatementObj->bindParam($name,$value);
}
$preparedStatementObj->execute();
こうすると、tableには(3,5)というデータが格納されてほしいのに、(5,5)というデータが入ってしまう。最初はまったく意味がわからなくて30分くらい悩んでしまった。そこでマニュアル読み直し。「参照渡し」「execute実行時に初めて・・・」。あ、そうか。値を渡すときに使う変数がいつも$valueだから、execute実行時には最後の$valueの値に置き換えられてしまっていたのか。
問題を解決する方法はbindValueを使うか、値をセットする都度異なる変数名を使用するか、のいずれか。どちらで試しても大丈夫だった。まさしく生兵法は怪我の基だった。