TDDBC 横浜に参加してきました

10/5に開催されたTDDBC横浜に札幌から参戦してきました。わざわざ札幌から?と不思議に思われるかもしれませんが、福岡からもちょくちょく首都圏のTDDBCに参加されている人もいますのでそれほど不思議なことでもありませんw自分の場合、年に1〜2回程度は、東京で開催されている勉強会やカンファレンスに参加するようにしています。理由は地方で閉じこもっていると視野が狭くなってしまうこと、特にコネクションが閉じてしまうのが大きなマイナスになっているからです。今はTwitterなどで全国各地で活躍されている人とネット上のコミュニケーションが可能ですから、思い立って地方から参戦しても完全なぼっちは避けられるのはうれしい事かと思います。

往路

札幌からスカイマークの最終便で羽田に入り、横浜まで移動してスパ(カプセルホテル+風呂)というプランで考えていましたが、いきなり大変なことに・・・。新千歳発の最終便の羽田着は24:15くらいなのですが、到着時点で定刻だとしても移動手段(深夜バスや電車)が一切ないのです。東京(横浜)は5−6年くらい住んでましたし、その前に埼玉にも4−5年住んでましたから、「まさか0時ちょっとで移動手段がなくなる」という事を想像できませんでした。結局、国際線ターミナル(ここだけ24h営業)へ移動して仮眠するという事になります。この事実を知っている人にとっては最終便で移動して朝まで国際線ターミナルというのが基本らしいですが、知らなかったという人は多いようでよくトラブルになっているそうです。結局、横浜までタクシー使ったら1万と聞いて、移動は諦め、国際線ターミナルでもくもくと1人TDDBC羽田を開催することになったのです。まあ、翌日のLTのネタに出来たので面白かったと考えておきます・・・。

受付してました

今回の参加目的の1つとしては、TAなどではなく自分もペアプロをしたいという点です。なので、TAには立候補しませんでした。しかし、何も協力しないでは面白くないので会場の受付をやっておりました。名前の方を確認していた方が私です。
もし、このようなイベントであまり知り合いがいないようであれば、受付をやるのは良い選択です。まず開会までの間、ぼっちにならないという最大のメリットがあります。また、ほとんどの参加者と形式的とはいえ会話できま、ある程度の顔を認識してもらえるのは大きいです。「あ、受付の人だ」というのは良くある話でしょう。なんで札幌から来て横浜で受付やっているかは謎ですがw尚、自分は和田さんの基調講演は生で2回聴いているということもあり基調講演の最初の方を聞けませんでしたが特に問題ありません。というわけで、やらせていただけて有り難うございます。

基調講演

何度も書いているし、他の人も書いているので省略します。1つだけ書いておくことがあるとすれば、TDDの効果について一言で説明するとき、「実装が2割増えて、バグが半分になる」は過去のもので今は「実装が2割増え、バグが7割減る」というくらいで問題ないと話されていた事です。各所での実績やスキルアップ・研究などの成果は出てきているという事でしょうね。

ペアプロデモ

公開きゃっきゃうふふを堪能しました。あまりにもけまらしい内容で、レポートに起こしたら負けだと思います。

昼食+LT

少しでも多くの演習時間を確保するためにも昼食はお弁当というのがTDDBCの定番となっていますが、横浜でもお弁当でした。また、ランチを取りながらLT(ミニセッション)を聴くというスタイルです。時間の有効活用としては良いのですが参加者同士のコミュニケーションは少なくなってしまうかもしれません。札幌ではランチはチーム(ペア)毎に仕様確認・開発環境の準備・自己紹介などのコミュニケーションに当てています。どちらが良いでしょうかね?
私もLTでは、「テストリストの見つけ方」という題目で10分程度話させていただきました。

内容はスライドにだいたい書いてあるのですが、これまでのTDDBCの経験から、最初にどの辺からとりかかるか、そして気付くと細かすぎる所に迷い込んで上手くまとまらないといった状況に多く遭遇しています。それはどうしてか?どうすればいいのか?という答えの1つが、TDDBC札幌2.1で行ったユースケースをベースとしたBDD(振舞駆動開発)なわけです。システム全体に必要な入出力をキーに最初は全体を把握し、細かく分割・設計・テストを行っていく事が重要という事です。また、入出力は具体的な値を使う事が大切であり、設計(テスト)を書くときには必ず意識する事を話しました。懇親会とかで聴く限りはなかなか好評だったので良かったと思います。ただ、そこそこのボリュームがあるにも関わらず10分程度で話すためにかなり早口&圧縮になってしまったのは残念でした。じっくり聴きたいとかユースケース駆動で受入テスト駆動でのBCをやってみたい人達がいましたら呼んでくださいw

演習

先にも書きましたが、自分はTAではなくJavaペアプロ参戦しました。白状してしまうとGroovyも凄くやりたかったんですが、JUnitで色々試したい事があってJavaを選択してます。今回は、こんな事にチャレンジしてみました。

  • 最初に機能テスト(FunctionalTest)を作成する
    • システムをブラックボックスとしてテストし、システムが機能要求を満たしているかを確認する
    • 選手データの入力と打率ランキングの表示
    • フィクスチャはyamlに定義
    • テストを実行するためのテスター(エージェント)を作成
  • Enclosedを使い、テストの階層化を実現
  • Theoriesを使い、パラメタライズドテストを作成
  • Mercurial + JenkinsCI でローカルCI環境
  • 成果物はBitbucketへpush

流石にやりすぎ感は否めませんが、機能テスト部分はある程度の予習をしていたので、最初から一気に飛ばしまくりで演習を行っています。成果物は、Bitbucket にpushしています。
今回はペアプロということでパートナーと交代しながら演習をしましたが、ギアの入れ方の緩急を付けることを意識しました。基本的には「小さく少しずつ」がTDDのこころですが、それだけでは幾ら時間があっても足らない事がよくあります。したがって、慎重にやる箇所と一気にギアチェンジして進めるところ、そして少しでも気になる部分があればまた慎重に行く、といった緩急をつけたリズムが出来上がると集中力も高まります。疲れますけどw

レビュータイム

他の言語のテストコードを見るのは面白いです。Rubyのテストコードは読みやすいよなといつも嫉妬しながらRSpecを見ていますが、今回はGroovyの存在感が凄かったです。おかげでJava屋にも希望の光が見えたのではないでしょうか?あそこまで綺麗に書けるならば、導入する価値は高いですね。とはいっても、自分の場合はまだまだJUnitを使い倒し、綺麗に書く工夫の余地は多く残っていると思いますから、もうちょっとだけJavaをやりたいです。いえ、Groovy本は持っていて少しずつ読んでいますがw

懇親会

懇親会は会場のある施設内のレストランを借り切って行われました。参加者の7割くらいは参加されていたのではないでしょうか?あまり多くの人と話せなかったのはやや残念でしたが、2次会では「俺がTDDだ」「こんな○○さん、みたくなかった」など名言も多く、楽しい時間を過ごさせていただきました。

運営的な部分

TDDBCは参加希望者が凄く多く、首都圏での開催では、定員30名程度の所に100名以上の参加希望があったりすることが珍しいイベントではありません。地方ではスカスカであるというのはちょっと悲しいところですが…。ただ、今回は先着でなく抽選ということで概ね好評だったようです。ただ、受付をしていたのでだいたい把握できていたのもありますが、連絡の無い欠席者が結構居たのは残念ですね。予定が合わなくなったなど理由があるのは仕方ないかと思いますが、連絡をすることは最低限のマナーでしょう。その連絡により別の参加できたかもしれない人がいるということを肝に銘じるべきです。あと、お弁当も幾つも余ってしまっており、非常に勿体ないです。こうやってみると札幌の勉強会の欠席率は本当に低いな・・・と思います。
会場はネットワークが厳しい点以外は凄く良かったと思います。ただ、自分としてはTDDBCを行うならば会場の選定基準はネットワーク重視としています。Webで情報を検索したり、GitやBitbucketなどのリポジトリにソースを公開できたりと移動の手間よりも多くのメリットがあると感じました。Twitterへの投稿も少な目だったのはその辺も大きく影響しているかと思います。
演習のお題は非常に良かったと思います。やや業務ドメイン(野球知識)に偏る部分はありますが、現実世界の業務でもそんなものです。全く知識無しって人もそれほどいないでしょうからテーマとしては最適ですね。同じようにボーリングのスコアとかサッカーの勝ち点なんかも面白いかもしれません。ただ、課題の量と質に比べて、もう少しだけ演習の時間を多くやりたかったと感じました。だいたい13:30くらいから開始で、18:00くらいまでが演習だったので、4時間程度です。自分は予習をしておいたので、スムーズに進んだ方かとTAの負担や参加者の燃焼度としてはもう少し時間が欲しい。尚、札幌でのスタイルとして、講演あり演習少な目という回と講演なし丸1日演習の回をうまく使い分けようかなと考えています。
最後にペアプロによるTDDのデモについてです。非常に楽しくニヤニヤさせてもらいましたが、やはり初TDDの人にとっては厳しいと言わざるを得ないでしょう。実はこれ、札幌の2.0でも同様のミスを犯しておりまして、いつもやっているし大丈夫だろう・・・と思っていたら結構グダグダになってしまったのです。理由は色々あるのですが、やはり一番の問題はデモという特殊な状況に慣れていない事かと思います。デモコーディングは思った以上に緊張するので、慣れないと伝えたいことが全く伝わりません。準備もされていた2人と思いますが、思ったように進まないでやきもきしているのは伝わってきました。そして、このデモがTDDBCの一番の肝だと思います。和田さんの基調講演(座学)は概念的なものが多く、午後の演習では具体的にどうするの?という問題が発生します。その架け橋をがデモなのです。自分もまだまだデモでは緊張が抜けないので、スキルと経験を高めたいところです。

その他

当初の予定では日曜日の午後くらいに札幌に戻る予定でしたが、日曜日に昇格争い中のコンサドーレの試合があったため、予定を変更して月曜日の始発で帰るという強行軍となりました。試合は残念ながら負けてしまいましたけど、アウェイなのにホームと同じくらいの動員数と盛り上がりには驚きました。たまには地元チームの応援ってのもいいですね。尚、帰りの便は月曜日の始発(6:20発新千歳行き)でした。札幌駅に到着したのは8:45頃でそのまま健康診断だったとかw

終わりに

というわけで札幌から横浜までTDDBCに参加してきましたが、横の繋がりや知らない人の交流は非常に有意義で楽しいものでした。財政的にいつもは難しいですが、年に2回くらいは勉強会で上京したいですねー。