top

みなさんこんにちは、技術部Webチームリーダーの田中佑樹です。 みんなからはたなやんと呼ばれています。猫とVimが大好きです。

さて、今回は先日開催した2泊3日のChatWork開発合宿の全貌についてご紹介したいと思います。 「開発合宿をやってみたいけど、どうすればいいのかよくわからない」という方の参考になれば嬉しいです。

なぜ開発合宿をすることになったのか?

チャットワークは2011年3月の公開以来、順調にユーザー数を伸ばし2014年4月時点で世界170カ国42,000社の企業に導入されるまでに成長しています。

そんな中、現在チャットワークのバックエンドで動いているプログラムが今後の運用において最適ではないのではという懸念があり、言語とフレームワークの再選定をしようという声が上がりました。

ただ、なかなか日頃の業務の中で時間を取るのは難しく、今後のチャットワークを左右する重大な選択なので普段の業務とは隔離された環境で集中して選定作業をしよう、という話になりました。

それが今回の開発合宿開催の動機です。

開発合宿に向けての準備

合宿中に作業に集中するためにも準備をしっかりとしておかなければなりません。 どのように準備を進めたのかというプロセスを少しご紹介します。

グループチャットの作成

開発合宿用のグループチャットを作ってスケジュールやToDoの相談などを行ないました。チャットワーク便利!

チャットの中で決まった事は随時チャットの概要欄に追記し、「あれ、最終的にはどうなったんだっけ?」ということがないようにします。

タスクの整理

合宿が始まってから「あれ、何と何をやればいいんだっけ」とならないようにタスクをあらかじめマインドマップにまとめておきます。

当たり前のことかもしれませんが結構大事ですね。

こういうタスクはチャットワークに登録してしまうと管理が大変になってしまうので見通しの良いマインドマップが最適だと思います。

必要要件の決定

開発言語を選定するにあたり必要となる要件を洗い出しました。 あらかじめ要件を明確にしておくことで無駄な調査や議論が避けられたと思います。

  • DI、AOP等が使えてメンテナンス性が高い
  • TDD、BDDベースで開発できる
  • DB用ライブラリが充実
  • aws-sdkが対応している
  • NewRelicでパフォーマンス監視ができる
  • syslog経由でログ保存ができる
  • 多言語に対応している
  • OAuth2.0に対応している
  • WebSocketに対応している
  • MessagePackが使える
  • javadoc的なDocumentation toolがある
  • npm、composerのようなライブラリ管理ツールがある

チーム分け

言語ごとに3チームに分かれて開発をし、成果を発表することになりました。

言語もフレームワークも初めて触るという人が多かったので、そういう人たちには合宿までにキャッチアップをしてもらい合宿当日は決められた作業に集中できるように事前準備をしていました。

宿の選定

開発合宿をするにあたり重要なのが宿ですね。 最近は開発合宿用のプランがある宿なども出てきており、やりやすくなってきたかと思います。

  1. エンジニアが選ぶ。開発合宿で泊まりたい日本の宿7選に掲載されていた
  2. とにかく安い!(6,450円/人)
  3. 東京・大阪の中間あたりで行きやすい

上記の3つの理由から、静岡県伊東市にある山喜旅館に決定しました。

開発合宿のスケジュール

1日目は夕方から、2日目はたっぷり時間を使い、3日目は帰るだけというスケジュールを組みました。

比較的時間にゆとりもあり、よかったと思います。

開発合宿1日目

  • 15:00 現地集合

東京チームは車で、大阪チームは新幹線を使って現地へ集合。 部屋は古いながらも落ち着ける雰囲気の和室です。

  • 15:30 開発タイム

PCをセッティングし、チームに分かれて開発タイム。いくつかディスプレイも持ち込みました。

  • 18:00 夕食

夕食はシンプルな和食。豪勢なものではありませんが、コスパはいいと思います。

  • 19:00 お風呂から上がり、再度開発タイム

夕食後もひたすら開発。お風呂から上がったあともビールを飲みながら開発に専念していました。

開発合宿2日目

  • 8:00 朝食

日本の朝ごはんという感じ。

  • 8:30 開発タイム

長い開発タイムの始まりです。

ランチは近くのイタリアンへ。

気分転換に近くの海岸へ散歩

  • 18:00 発表会

いよいよチームごとの成果の発表会です。

各チームのプレゼンに耳を傾けるメンバー達

  • 20:30 夕食

打ち上げはひいらぎにて。

金目鯛のしゃぶしゃぶが絶品です。

牡蠣も本当にうまかったです。

新鮮な昆布、こんなの初めて見ました。

いよいよ新たな言語が決定!

18時の発表会の時点ではPython派が6人、Scala派が4人という状態でした。 ですがその後の打ち上げにて形勢が変わり、満場一致でScalaに決定!

Scalaになった理由

Scalaチームからの以下の感想が皆の心に刺さりました。

  • ソースコードをシンプルに保つことができ、可読性が高い

  • 最初は一部の特殊な書き方に戸惑うこともあったが、慣れるととたんに書きやすく&読みやすくなる

  • IntelliJ IDEAのScalaサポートが秀逸で、開発効率が良い

  • PlayFrameworkでのテストが書きやすい

ちなみに参考にした書籍はこちら。Kindle版を合宿に持ち込みました。

Guide to ScalaーScalaプログラミング入門
中村 修太 (2013-03-02)
売り上げランキング: 2,776
Play Framework 2徹底入門
Play Framework 2徹底入門
posted with amazlet at 14.04.11
翔泳社 (2013-12-20)
売り上げランキング: 22,665
Scala逆引きレシピ
Scala逆引きレシピ
posted with amazlet at 14.04.11
翔泳社 (2013-06-20)
売り上げランキング: 7,483

開発合宿は準備で9割決まる

今回初めての開発合宿だったのですが、大きなトラブルもなく無事に終えることができました。

ポイントは色々あると思うのですが、一番大事なのはやはり準備だと思います。

  1. 参加者のグループチャットを作って疑問点はすぐ相談

  2. ToDoはマインドマップにまとめておく

  3. ゴールと必須要件を明確にしておき、迷いをなくす

これらの準備をしておくことで、合宿中は合宿でしかできないことに集中できたと思います。

逆に、今回が初めての開発合宿だっただけに様々な反省点もありました。

  1. 回線は複数台持っていった方がいい

    宿の案内にいくら「無線入ってます!」と書かれていても、回線速度が遅かったり、最悪つながらなかったりします。いざ開発開始という時にネット環境につながらないと調べ物もまともに出来ないため、必ず持っていったほうがいいと感じました。

  2. 複数の部屋に別れるよりは大部屋一つをとったほうがいい

    今回は2部屋に分かれて開発を行ったのですが、同じチームメンバー以外に質問したいことが思いの外ありました。(インフラの人にAWSのこと聞くとか・・。)その時に気軽に質問できるように大部屋一つをとっておいたほうが開発効率的にもいいと感じました。

無事に目的を達成!しかし・・・

目的を達成し、充実感に包まれながら帰路に着くエンジニア達・・・ しかし、そこにはまだ重大な課題が残されていました。

「大変だ!エンジニアが足りない!!」

そう、ここ半年で積極的にエンジニアの採用をしてきたChatWork社ですが、まだまだやりたいことがたくさんあり人員が足りません。 ということで、Scalaのエンジニアを募集します!

今いるエンジニア達は、まだそこまでScalaについて詳しいわけではないので、ヒーローになれること間違いなし!

世界へ進出していくこれからのチャットワークを支えていく!という意気込みのある方のご応募をお待ちしています。

私たちと一緒に世界標準のコミュニケーションサービスを作り上げましょう!

ChatWork Scalaエンジニア募集ページ