ふたつの教室

ミクシィのスマホアプリの作り方

プログラマは金魚鉢で泳ぐ

いやー、暑いっすね。こうも暑いと仕事の合間にちょっとひと泳ぎしたくなるって事でエクストリーム フィッシュボウルやってみるかーと思い、チームメンバー10人くらいで試してみました。

 

エクストリーム フィッシュボウルって何かというと、もともとはグループワークの手法で、数人が輪になってディスカッションしてるのを囲むように数人が観察する「フィッシュボウル」というのがあって、それをベースに考えられたものだと思います。(たぶん)

 

で、エクストリーム フィッシュボウルではペアプロをしてる2人をみんなで観察するのですが、観察するだけじゃなくて、質問したり野次を飛ばしたり、実装するメンバーを交代したりしながら開発する手法です。あまり本とかでは見かけないですが、勉強会などで時折行われていたりします。


詳しくはainameさんの説明資料をどうぞ。

extream fish bowl チートシート(Gist)

ちなみにainameさんが弊社の新卒研修でテストについての授業を行った際、TDDを実践する為にエクストリームフィッシュボウルを取り入れたそうです。

テスト講義(Gist)

 

自分が働いてるホームユニットというチームは普段はペアプロで開発しているのですが、担当範囲がiPhoneアプリ、Androidアプリ、API、Webと多様なこともあり、スキルやノウハウの平準化などに関してはまだ不十分だなという課題があります。なので、試しにエクストリーム フィッシュボウルをやってみました。

 

今回のルールとしては、

  • 最初にドライバーになった人の環境を使い続ける
  • 5分で交代(人数が多かったので)

ちなみに今回はちょっとした事情により、ナビゲーターは固定。

 

また、参加メンバーの普段の業務や環境は以下のような感じです

  • スマホアプリの実装多めで、たまにAPI開発する人が3分の2くらい
  • スマホ版Webサイトの開発多めで、最近スマホアプリやり始めた人が3分の1くらい
  • 開発機は全員 MacBook Pro 15inch
  • キーボードは日本語配列と英語配列が半々くらい
  • ターミナル上のエディタはvim派が多数

 

自分の狙いとしては以下のようなものでした。ここらへんは事前周知していなかったのですが、事前に共有しておけば良かったです。

  • メンバーの中には仕事が偏っている人もいるので、普段あまりやらない仕事にも接してほしい
  • 他人がどんな環境で開発しているかを体験してほしい
  • 議論する習慣を身につけてほしい

 

そして今回の実装内容はなぜかフィーチャーフォン版mixiのとあるWebページ。アプリエンジニアが多い中で、今回の案件はちょっと珍しいものです。なんか、他に切りの良いタスクが無かったので、これに決まってしまいました。最初のペアはナビゲータがスクラムマスターの瀧本さん(左)と、iOS委員会の委員長 武田さん(右)。

 

f:id:punchdrunkerr:20130815115343j:plain

 

 参加者の様子。最初はみなさん2人の会話を聞きながら、じっと画面を見つめる。

 

f:id:punchdrunkerr:20130815115403j:plain

 

まず最初はGETで渡したパラメータのバリデーションについて実装。テストを書いて、テストが通るようにコントローラーの実装を行います。テストコードにはステータスコード、エラーメッセージなどの期待値を記述。5分交代なのであっという間に時間がきます。

 

2人目以降は実装よりも、環境の違いに苦しむ問題に直面。今回の環境は普段emacsユーザの武田さんの環境だったのですが、武田さんが気を利かせて隣のスクリーンでvimを起動していました。加えて日本語配列のMacBook Proで、右のCmdキーに日本語、左のCmdキーに英語の割り当て(長押しだと通常のCmdキーとして機能)。

 

半分くらいの人は、ほぼ無設定のvimとプレフィックスキーが^Tにアサインされたtmuxのキーバインドで苦しみ始め、みんなで「コロン ビックリ2つ!!」とか言いながら途中から、ツールの使い方講座状態。それは良いのですが、自分の意図としては、他の人が普段使っている設定を試してみてほしかったので、emacs縛りでやれば良かったと後悔しました。

 

そんなこんなで後半は活発に声が上がるようになって、賑やかな感じ。

f:id:punchdrunkerr:20130815120251j:plain

引きで見るとこんな感じ。

f:id:punchdrunkerr:20130815122723j:plain

 

肝心の実装についての話題ですが、実装としてはかなりシンプルだったので、技術的なハマりどころはあまりなく、あえて言えば、携帯用のテンプレートがShift-JISで、テストコードがUTF-8なので、エンコーディングは注意しなきゃいけないね、というくらい。その他ツッコミは名前が多かったですね。不適切なパラメータを渡した際にエラー出力するかを確認するテストの名前が"invalid validation"となってて、ちょっと意味がわからんとか。

 

以下参加メンバーの感想をもらいました。

 悪かった点:

  • 開発効率は良くない
  • 開発環境の慣れの問題がキツい
  • 作業者が切り替わるところのスイッチングコストが高い

良かった点:

  • やってて楽しい
  • ツッコミで新しいことを知れることが多かった
  • いろんな視点で開発を進められた
  • 新しい発見があった(開発ツール的なことやライブラリなど)
  • 「:!!とかbwipeとか素のvimのコマンドが知られて良かったです!」
  • 「prestoさんのvimのカーソルが動きすぎてて面白かったです!」
  • 「クライアントアプリでやってみたいです!」

というわけで、今回はちょっと冒険した感が強いので、いくつかの反省を踏まえつつ、次回はAndroidアプリでやってみたいと思います。

あとはお菓子入れに金魚鉢の購入も検討中。もちろん自腹ですが。

金魚鉢 特大

金魚鉢 特大