PHP勉強会に行ってきました(後半)

麻布で行われたPHPの勉強会に行ってきました。
PHP勉強会に行ってきました(前半)の続き

テスト厨になりたいあなたのためのDocTest

id:kunitさんによるDocTestというテスティング・フレームワークの紹介。
PHPテスト駆動開発を支援するツールです。コメントの中にテストを書いてしまうというのが特徴的でした。


こんな感じです。

<?php
/**
 * DocTest Example
 */
class Example
{
    /**
     * 挨拶をしてもらおう
     * 
     * #test say
     * <code>
     * $obj = new Example;
     * $this->assertEquals('Hello, Maple!', $obj->say());
     * </code>
     *
     * @return srting 挨拶の文字列
     * @access public
     */
    public function say()
    {
    }
}
?>

http://d.hatena.ne.jp/kunit/20080205#1202142580より)


テストコードと本コードが1つのソースファイルの中に入っているので、両者の距離が近いのですね。開発をしているときに、お互いを切り替えるわずらわしさが軽減されて、「テストを書く→テストを実行する→実装する」というテスト駆動開発のサイクルがサクサク回るようになる。さらに、ここからPHPDocを生成すると、ドキュメントの中にテストコードがそのまんま載っているので、クラスの使い方がすぐにわかるという利点があるということでした。私は英語がキライなので、Pearのサイトとかで英語のPHPDocを読むと泣きたくなります。「御高説は重々賜りましたので、そろそろサンプルコードを見せちゃあもらえませんか」という気持ちになってきます。


突然Javaの話になってアレですが、例えばBigDecimalクラスの説明は日本語で書かれているのに、とても分かりにくいです。
http://java.sun.com/j2se/1.5.0/ja/docs/ja/api/java/math/BigDecimal.html#setScale%28int%29

スケールが指定された値であり、値がこの BigDecimal と同じ数値である、BigDecimalを返します。これが不可能な場合、ArithmeticException をスローします。(中略)BigDecimal オブジェクトは不変であるため、setX メソッドでフィールド X を変更する通常の規則とは対照的に、このメソッドを呼び出しても元のオブジェクトは変更されないことに注意してください。代わりに、setScale は適切なスケールを持つオブジェクトを返します。返されたオブジェクトは、新しく割り当てられる場合とそうでない場合があります。

比べてStringUtilsクラスの説明は、英語なのにサンプルがついてるおかげで実に明快。
http://commons.apache.org/lang/apidocs/org/apache/commons/lang/StringUtils.html#isBlank%28java%2elang%2eString%29

Checks if a String is whitespace, empty ("") or null.

     StringUtils.isBlank(null)      = true
     StringUtils.isBlank("")        = true
     StringUtils.isBlank(" ")       = true
     StringUtils.isBlank("bob")     = false
     StringUtils.isBlank("  bob  ") = false

開発者にとって分かり易く情報価値の高いPHPDocができあがるっていうのが素晴らしいなあと思いました。テストじゃなくてドキュメントの話になってしまいました。なんてこったい。

PHP中級者になるためには

id:shimookaさんによるディスカッション形式のセッション。敷居が低いおかげで初心者が多いので、たまに上級者から「Webアプリをなめるな」とか言われちゃうPHPで、面白いモノを作ってかつキッチリさんな人が量産されるようになったら素晴らしい。入門本を読み終えて、Webアプリが作れるようになった初心者が中級者になるには何をすべき?
私自身がまさにピッタリ当てはまる初心者だったので、「中級者になりたいなー」と思って聞いていました。

  • Webアプリは覚えること多すぎ。セキュリティとか、セキュリティとか、セキュリティとかね
  • 狭い世界の中でやってると見地が偏りがち
  • だから勉強会に出るのはいいことだ
  • でも勉強会の知名度が低いよね
  • 勉強会見つけてもすぐ定員に達するから出られないよう
  • 勉強会で初心者ワク、というか一見さんワクを設けたらいいんじゃない?
  • 待ってるだけじゃなくて、勉強会側から企業にプッシュしていくとかどう?

盛り上がってきたところで時間いっぱいになってしまいました。懇親会には出られなかったのでここまでです。


実は「『ここさえ押さえておけば明日から君も中級者』みたいな、進化の秘法があったらいいなー」と思いながら聞いていたのですが、やっぱりそんなものは存在しなくて、地道に勉強するのが一番の近道っぽいです。学問に王道なしということでしょうか。
セキュリティとかエラー処理とか『地味だけど大事なこと』っていうのがあって、あまり人気のある分野ではないけど大事なことだから覚えておかないといけないよね。っていう空気を感じとりました。今の私がそうなんですが、楽しい部分だけを夢中で追っかけてるのが初心者で、楽しくない部分にも興味を持ってマジメに取り組むのが中級者なのかなーっと思いました。