すがブロ

sugamasaoのhatenablogだよ

デブサミ2010

二日目だけ、参加してきました

強く印象に残ったところだけ書きます。
当日の発表資料は下記にどんどん追加されていくようです*1

【19-B-3】三周遅れのXP -僕とドワンゴのXP-

id:Yoshiori さんのTDDの話。個人的に一番刺さったのはこの発表でした。

  • タイトルについて
    • 1週目はケントベックが道を作った
    • 2週目は角谷さんたちが道を広めた
    • そして今僕たちは三週目(だから正確にはタイトルは間違っていて、二週遅れ)
    • 3週目の僕たちは高速道路を作る
  • 「XPの4つの価値」を実現するための方法
    • コミュニケーション(チームで気軽にコミュニケーションできるように"おやつ神社"というのがある)
    • シンプルさ
    • フィードバック
    • 勇気
  • TDDとは(極端に言えば)
    • 開発手法であって、テスト手法ではない
    • リファクタリングできれいなコードにしていくための手法
    • 結果として(副作用として)品質もあがる
    • 参考:
  • TDD で伝わりにくいこと
    • UnitTest になってしまって、網羅的にテストケースを書いてしまう
      • 自分の不安な箇所に対してテストコードを書いてテストしていくので、UnitTestではないよ
    • 開発のためのテストであって品質のためのテストではない
  • 社内でTDD写経会
    • WebDBPress v35 のテスト駆動開発が良い教材
    • 最初にチームに入ったときに、システムがよくわからないので、ペアプロでやらしてくれ! と無理やりもっていった→ペアプロの際に、TDDでコードを書いてチームの人に啓蒙していった(それがTDD写経会に発展していった)
  • ペアプロの有効な点
    • コードの共有ができる
    • ○○さんが書いたソースだからわからない><というのはナシ。
    • コードはチームのものだよ
    • コードの指摘は人格批判ではないよ(指摘されると凹むけどそれは良くするための指摘だよ)
  • とはいえソースを晒すのは結構大変
    • 新人にはブログを書かせる
    • 晒しなれ(?)させる
    • 返信とかもブログでやる
  • CIの話
    • Hudson使ってるよ
    • SLOW TEST 問題(テストケースの完了までにとても時間が掛かる問題)
      • (DB周りで圧倒的に重くなったので)ローカルでのDBのはオンメモリDB*2にすることで緩和
      • insert や update でのテスト以外はテーブルのリセットをしないようにした
      • 実DBのテストは CI でテストすることでやることにしてる
  • 見積もりと計画
    • アジャイルな見積もりと計画作りを社内読書会を開催
    • 機能をユーザストーリーに分割
      • プランニングポーカーをする
      • 各ストーリーの中で平均的な難度のストーリーを選んで、基準として5SP*3として、それを基準に別のストーリーにポイントを割り振る
      • 実際の割り振りは、メンバー全員で話しをせずに「いっせーのせ」でカードを出す。そこで、大きかったり小さかったりした場合は各人の話を聞いて、改めて全員でカードを出す。これを全員で揃うまで繰り返す
  • イテレーション
    • 一ヶ月でリリース(ちょっとうろ覚え)
    • 二週間で1イテレーション
    • これを繰り返すことで、自分のチームが一週間でいくつのSPを消化出来るのかわかる
    • ストーリーからタスクに分割して時間単位での見積もりを出して、1イテレーション内でのスケジュールを決める
  • 進捗管理
    • ホワイトボードにタスクの付箋を貼る
    • Tracにも書くけど、一目でわかるように、紙の付箋とホワイトボードで実践
    • 自分の仕掛り中のタスクを自分の名前のところに移す。(ここのタスクがずっと残っている場合は見積もりが間違っているかハマッているかがわかる)
    • バーンダウンチャートで時間を可視化
      • 正直に書く(ちょっとここらへんもう少し詳しく聞きたい)
  • その他
    • 入出力の項目をExcelでの提出が求められた
    • ソースとExcelの二重管理やりたくない→ExcelからJavaのバリデーションコードに落とすプログラムを書いた
    • IRCのall:の内容を毎日メールで送ることで、休んでいる人にも伝わるようにしてるよ
    • 便利にするための野良スクリプトとかは結構ある。

あと、スライド内のこのセリフが突き刺さりました(別のサイトから引用)。

「わたしは“結果”だけを求めてはいない。“結果”だけを求めていると、人は近道をしたがるものだ…近道した時真実を見失うかもしれない。やる気も次第に失せていく。大切なのは『真実に向かおうとする意志』だと思っている。向かおうとする意志さえあれば、たとえ今回は犯人が逃げたとしても、いつかはたどり着くだろう?向かっているわけだからな…違うかい?」(殉職した警官)第59巻

ジョジョ・名セリフ集

だから!ぼくは!三週目・・・もしかしたら4週目を走るであろうぼくからはッ!この言葉を送りたいッ!

「ミスタあなたの『覚悟』はこの登りゆく朝日よりも明るい輝きで『道』を照らしている。そして我々がこれから『向うべき…正しい道』をもッ!」(ジョルノ)第55巻

ジョジョ・名セリフ集
【19-B-6】実践Cucumber 〜ユーザの視点でシステムの振る舞いをテストしよう

id:moro さんによる Cucumber の話。

  • Ruby x Agile
    • 文に対応するRubyコード(stepと呼ぶ)を実行
    • ストーリテストだよ
    • 語彙を自分で定義できるように
    • 表を書いてテストできる(Transformで定義できるよ)
  • 読むのはみんな(お客様含む)
    • 書くのは開発者
    • これを元にお客様とシステムに対する対話ができるようになる
      • ココの三行目まで実装していますとか。
      • 進捗の説明に使用できるように
  • お客様と対話できるテストコード
    • メンテナンスされ続ける仕様書
    • 可読性の高いテストが動く
  • 開発者への価値
    • Ruby で書けるよ
    • @インスタンスを使うことで step 間で共通の値を使えるよ
    • Cucumber でテストが通ってる分のUnitTestを(SLOW TEST対策等として)捨てる事もできる
    • rspec でのテストコードをモデルに注力できる
【19-B-7】次世代Web標準 HTML5 最新動向

HTML5の話。

  • なぜHTML5 なのか
    • Webの使われ方が大きく変わった(動的なページの更新など)
    • プラットフォームが安定していなかった(実装がブラウザによって異なる><)
  • 新しい機能
  • マークアップ
    • cnvas, audio, video, ...etc
    • DOCTYPE や charset を簡略化(古いブラウザでもちゃんと動く!)
    • フォームが拡張された
      • input の型(textとかpassword)が増えた
      • 属性が拡張された(autofocusとか、"検索項目を入力してください"みたいな、テキストフィールドに灰色で書いてるヤツとかが実装されるとか)
      • 入力項目のバリデーションなど
    • canvas タグ + 2D Context でJSで描画できるようにるようになった
      • 描画されたオブジェクトはImmedietable なので画像と同じ感じになる(描画後のオブジェクトをグリグリ動かせない)
      • アニメーション等の場合は毎回描画する必要がある
      • でも 2DContext は軽いから結構イケる
      • audio, video は img と同じ感じで動画などを表示できるように
  • API
    • WebStrage
      • localStrage(永続的に保存される)
      • sessionStorage(セッションが終わったら消える)
    • web Worker
      • 別スレッドで動く感じの機能
      • DOMは直接触れない(逆に、ロジックと描画部分を分離しやすくなる)
    • Application Cache, online/offline
      • どのファイルはキャッシュしないか、というキャッシュの設定ファイルを作り、タグからその設定ファイルを読み込ませるだけ
      • window.online = function... とか、 window.onffline = function で、オンライン時とオフライン時の挙動を変えられる
    • WebSocket
      • 全二重の双方向通信が可能
  • 今とこれから
    • 現在仕様をまとめてる段階
    • HTML5の各ブラウザでの実装具合はHTML5の仕様書に書いてある
    • とはいえ、実装されてるブラウザではよりリッチに、されてないブラウザではそれなり、っていうやり方もあるんじゃないのかな
      • excanvas.js とかでcanvas の無い場合でもなんとかしてくれる(ちょっと詳しくわからん)
  • LTのまとめ(若干ついていけなかった)
    • WebWorkerの話
      • WebWorker内でのみ使える API がある
      • callBack で関数登録して... じゃなくて手続き型っぽくかけるので実装が楽
      • とはいえ、結構面倒><
      • web-messaging-rpc っていうフレームワーク作ったよ(コミッタ募集中)
    • WebSocketの話
      • WebSocketはレスポンスを待たないでリクエストを投げまくれるため、リアルタイム処理に向いている
  • その他
    • FireFox3.6 では File API で複数のファイルを選択できる(input タグに multiple を付ける)
    • 竹迫さんのLTの安定感は異常w

まとめ

デブサミに参加して今年で4年目になりました。月並みな言葉ですが、ものすごい刺激というかパワーというか、そーいうのを貰ってます。
参加した事ない人はぜひ、来年は参加してほしい。本当に思う!

*1:書いた時点で資料のアップロードされているのだけこのページにも貼りつけておくよ

*2:名前を失念><

*3:ストーリーポイント