Mix Leap Study特別編- GDCR2019 in 大阪 (#coderetreat)に参加してきました!
11/16にヤフー株式会社 大阪グランフロントオフィスで開催されたMix Leap Study特別編- GDCR2019 in 大阪 (#coderetreat)に参加してきました!
Scrum Boot Camp OSAKA in November 2019に参加した時に懇親会で勧められたり、参加経験のある友人からもいい評判を聞いていたので、不安を抱えつつもすごく楽しみにしているイベントでした。
CodeRetreatとは
ライフゲーム(Conway's Game of Life)と呼ばれるシミュレーションゲームを設計しコーディングするというのを何回も繰り返していくイベントです。
(コンウェイの法則のコンウェイさんとは別人です。)
今回のイベントでは45分で設計とコーディングを行い、15分で振り返りを5セット繰り返しました。ペア決めも15分の中に入っていたのでトントン拍子に進んでいく形でした。
- テスト駆動開発を行う
- スプリントごとに新規開発する
- ペアはスプリントごとに変更する
上記のルールも用意され、毎回異なるペアと言語をどうするか、設計や実装方針について議論を交わせるようになっていました。
すべては「良いコード」を探求するためです!
自分の環境紹介、ペア決め
各自が事前に環境構築してきたマシンを使用するため、自分のマシンで動かせる言語と名前を付箋に書きホワイトボードに貼り出しました。
僕はPHP/Go/TypeScriptの3つを挙げました。
GoもTypeScriptもほぼほぼ未経験ですが環境としては動かせるし、できる人がいたらそこから学んでいこうという心持ちです。
そしてペアが決まり、1スプリント目の開始時間が来たらスタートです。
Sprint 1
言語:Rust
MixLeapでたまに一緒になる方とペアを組みました。
- 初めてRustのコードを見た
- なのでコーディング自体には全くコミットできなかった
- Rustはファイル内に単体テストも書けるのが新鮮だった
- Live Shareで繋ぐのに失敗した
- 一発目で進め方も手探りのため設計があまりできておらず、コーディング時にあれこれ話し合い中々実装を進めていくことができなかった
Sprint 2
言語:PHP
PHPでライフゲームができるのかという話からやってみようということでペアを組みました。
ざっくりとした仕様:New Gameボタンを押すとボード生成、Nextボタンを押すとボードが次の世代に進む
- PHPのテスト環境を用意できていなかった。そのため途中でPC交代した
- テスト環境構築で時間を使ってしまった
- PHPUnitのインストールでcomposerを使うだけの、ピュアPHPでコーディングした
- ViewをHTML/CSSで表現するため見た目はすぐでき、進んでいる感が出た
- POSTで現在のボード情報を受け取り、次世代のボード情報を返すためテストは書きやすそうだった
- 実際のコーディング自体はあまり進められなかった
- PHPでライフゲームは意外とやれそうということが分かった
ランチ
寿司!ごぼうサラダ!ミートボール!ハンバーグ!マンゴープリン!!!
ランチスポンサーの石井食品株式会社さんありがとうございます!!!
Sprint 3
言語:C#
学生の頃は趣味でスマートフォンアプリ開発をC#でやっており、久々にやってみようとペアを組みました。
- C#/Visual Studioすごい
- 自分のセルの周りに生きたセルが何個いるかで次の状態を変えるという考え方を知れた
- セル自身にx,yと位置情報を持たせるのは面白いと思った(後からリファクタリング対象となっていたらしい)
- セルの次の状態のすべてのテストパターンが書け、実装もできた
- 途中から東京から帰ってきた友人が合流しすぐコードを書いていった
- とりあえずコードを書くという方針と、少し考えてからコードを書くという方針がぶつかっていた(いいぞもっとやれ)
Sprint 4
言語:TypeScript
僕がTypeScriptをやってみたいということで、フロントエンドをやられている方とペアを組みました。
- TDD本をTypeScriptでやってみようと前述の友人と行っているため開発環境が流用できスムーズに開発に入れた。
- 前回のスプリントを取り入れた設計を流用し、TypeScriptでいい感じにテスト→実装ができた
- TypeScriptのビルド環境は用意していなかったため、View部分には環境構築から始める必要があった
Sprint 5
DDDモビング
朝からぶっ通しということで休憩したいという思いと、DDDで設計したいという人の思惑が一致し、みんなでDDDで設計しようということになりました。
- DDDの雰囲気が分かった
- 現実世界を落とし込むってこういうことなのかと分かった気になれた
- セルは生きている/死んでいるなのに、セルオブジェクトがずっと生き続けているのはおかしいのではないかというところから、Worldを区切った場所を表すSpaceという概念を発見できた
- ライフゲームにDDDは向いていない説
- モビング最高!
振り返り
みんなでFDLという振り返り手法を行いました。付箋に振り返りを書き、Fun Done Learnに当てはまっている個所に張り付けていきます。
- 未経験の言語を触れることができた
- 設計をどうやっていけばいいか掴めた
- ランチおいしかった
- コーディングは楽しい!!!
- ライフゲーム完成させてみようと思った
- これからも技術力を磨き続けたい!
懇親会
ヘトヘトになっているからという理由で公式には懇親会が用意されていませんでしたが、有志の方たちで懇親会に行きました。仕事での開発の進め方を相談し、スクラムについて聞いたりしていました。
ざっくりまとめると、プロダクト開発にしても、プラクティスを実践するにしても、「なぜそれをやるのか」をチーム内で共有し合意して進めようって話なのかなと後で振り返ってみてそう思いました。
聞いた本とか・ワード
- レガシーコードからの脱却 (管理者が読むべき)
- アジャイルサムライ
- マネジメント3.0
- SL理論(Situational Leadership)
- 組織パターン
- 託児所
- サーバントリーダーシップ
- Fearless Change
- 「残業して目標を達成する」は成長機会を奪っているということ
- フロー効率優先を説得する方法「早くリリースすれば早く利益が出る」
- ペアプロ・モブプロのメリットを訴えるために現状の手戻りコストを計測する