環境

mixiPHP環境スレ
[mixi]これぞ最強のPHP開発環境ってある!? - Let's PHP | mixiコミュニティ


svnのコミットをトリガーにしてアップしてる人って実際に居るんだなぁ。
仕組みとしては知っていても実践までなかなかいかない。


この場合は

  1. コードを書く
  2. テストする
  3. コミットする

って順になるのかな。


ここで問題が。
慣れてきたり急いでたりしたら

  1. コードを書く
  2. コミットする

というようにテストを飛ばしてしまうんじゃないかっていう不安が。


コミットにテストを含めればいいんだろうか?
テストコードをフックするような。
簡単にはいかなさそうだ・・。

フレームワーク

[PHP-users 29994] フレームワーク

たまにフレームワークについての話題を見かける。


こういうときに胸を張って他人に勧められるフレームワークが完成してるといいなぁ。
自分のフレームワークは簡単なページを手早く作るのには向いているけれど、大人数(?)で開発しやすいかどうかは不明。

マニュアル

英語で書かれたマニュアルが読めないという以前に | 日経 xTECH(クロステック)

なるほど。これは納得できる。


PHPで開発するにあたって「サンプルコードが載っているものをください」と言う人が居る。
そりゃーあった方がいいけれど「PHPはWebのマニュアルでほとんど理解できるよ」と言ってもマニュアルを見ようとしない。
「ここに説明が書いてあるよ」とまで言っても見ようとしない。


理解したがらない人は居るもんだなぁと思った。



コメントより

昔は先輩に質問しに行くと、「マニュアル読んだ?」とよく言われたものですが・・・
おかげで、人に質問する前には自分なりに調べてからという習慣がつきました。
でも、最近の会社(社会全体かも?)って、「自分で調べるより知ってる人に聞きなさい」っていう教育をするところが多いから、自分で調べる癖がつかないんでしょうね!!

はてなとかはズバリこの流れなんかね。

エラー制御

今日のハマりどころ。


フレームワークのエラー制御と標準のエラーハンドラを統合するところで気が付きにくいポイントがあった。
set_error_handler()でユーザ指定の関数を登録すると、@(エラー制御演算子)がついてる場合でもエラーが表示されてしまう。

標準のエラーハンドラはerror_reporting()で判断しているので、同じような動作をさせるためには

function output(){
    if (error_reporting() === 0)
        return;
    
    ....// エラー出力処理
}

のようにerror_reportingの値を見て判断する。
@がついている場合はerror_reportingがゼロに設定される。
要するに@付き関数の処理の間だけerror_reportingがゼロに設定され、それを抜けると元のerror_reportingの値に戻るらしい。

ファイルアップロードの処理

[PHP-users 29980] 別サーバーへのアップロード

これは私も知りたい。
既にsocketを使ったベタな関数は作ったんだけど、もうちょっとスマートにやりたいなぁ。
できればsimpletestに組み込んでほしい・・。

受け入れテスト+アップロード

simpletestでグリーンのバーが表示されたら、アップロードボタンを表示するようにした。
それを押したらrsyncで本番用にアップロードが開始される。


デメリットは、例えば一文字変更しただけでも全てのテストが終わるのを待たないといけないところ。
PHPの手軽さが消えている。
今後どうするかはしばらく使ってみて考えますか・・。



受け入れテストは重複部分を減らして370個程度になった。
3画面のフォームなんだからこれでも多い気がするが、真面目にやるとここまで増えるんだなーと実感。


アップロード云々は別にして、受け入れテストは便利だから他でも使えると思う。
フレームワークコンポーネントとして作ったけれど、普通にnewすれば単体でも使える。



あとはマニュアルを書かないとな・・。
自分で作ったコンバータの書式を忘れてしまったりとかしたし。。


今日のハマり所は、全角英数を半角に変換したら括弧まで変換されて受け入れテストに失敗したこと。
括弧は常日頃から半角で書こうと思いました。

確認画面

フォームの要素が何十個もあったら、すこぶる面倒だ。
フレームワークを使って設定ファイルに変数を羅列するだけで済んでいるんだけれど、それでも面倒だ。


現在たった2画面での受け入れテストのassert()が400個・・・手動でテストコード書いてたらやる気なくなる数だなぁ。
一応自動生成だからinputタグの確認と値の代入で重複してたりする。
しかし一つ一つ別のエラーメッセージを作ってinputタグの横に表示するようにしているので、重複している部分も含めていくつかのパターンを試さなければならない。



そして確認画面なんだけど。
hiddenを書くのがこれまた面倒・・。
これも例によって設定ファイルに変数を羅列するだけなんだけど、実行用のフォームと戻る用のフォームの2つを書かなくちゃいけない。


少し考えて

<input type="button" value="戻る" onClick="form.setAttribute('action', 'InputAction');form.submit();">

とやることにした。
JavaScriptをオフにしている人はブラウザの機能で戻ってくださいということで・・。



しかしflexyは凄い。
HTMLでは

<form name="form" action="Exec">
<input type="submit" value="実行">

<input type="button" value="戻る" onClick="form.setAttribute('action', 'InputAction');form.submit();">
</form>

これだけしか書いていない。
そこにフレームワークflexyのおかげでどさっとhidden要素が挿入される。
デザイナに易しいテンプレート機構という自分の理想は、現状でほぼ完成しているように思う。
どんな変数が挿入されるのかはiniファイルを見れば分かるし、これも誰でも読めるだろう。