TL;DR
11月14日に開催されたGlobal Day of Coderetreat in Shinjukuに参加してきました。
Global Day of Coderetreat 2021 in Shinjuku (2021/11/13 09:15〜)
開催はアギレルゴコンサルティングさんのオフィスでした。 久しぶりのオンサイトイベントでとても楽しかった。
Coderetreat とは
Coderetreat
Coderetreatは、普段の仕事での開発のようなプレッシャーのある環境から離れて、ペアプロとTDDを通じて設計や開発について実践する場を持つためのイベントです。 まる一日かけて行うイベントで、コンウェイのライフゲーム(The Game of Life)をテーマに、好きな言語でテストコードを書きながら実装を進めていきます。 45分で1セッションとし、各セッションの終了時にはそこまで書いたコードを全部捨てます。
今回のイベントではペアプロではなくモブプロで実施していました。 オンラインのプログラミング環境であるcyber-dojoを利用し、Mobsterを使ってモブプロの時間管理をして行いました。 使用した言語は、JavaScript(Node.js)とテストツールとしてJestを選択しました。 これはその場にいた人たちが共通して使える言語ということで決まったようです1。
感想
久しぶりに5分区切りで時間切り替え制のモブプロをしたのですが、短い時間で回すのも回転が早くて面白かった。
今回初めての参加で全部捨てることに驚いた。
ですが、次のセッションを始めるときには前回の失敗を踏まえたり、良かったところを意識してみたり、あえて違う実装の進め方をやってみたりと捨てたからこそできる考え方があるように思いました。
また、お好みで実装時の制約を入れるそうです。
今回は2セッション目のときに、「ループ(for
、white
など)を使わない」という制約を入れてみました。
今回自分が参加した3セッションでは、
- ライフゲームの内部の実装から進めていく
- 表示部分から実装してみる
- メンバーに役割を与える
といったやり方をしました。
3つめの「メンバーに役割を与える」というのは、「ライフゲームの正しい実装を促すためのテストコードを書く人」「与えられたテストコードをパスするだけの意地悪な実装をする人」、そして「実装をリファクタリングする人」に分かれ、それぞれ順にコードを書いていくというやり方です。 人数が4人いたので、この役割を順で回していき、参加者がそれぞれの役割を体験することができました。 このやり方で
- 意地悪な実装は意外と考えるのが難しい
- 意地悪な実装はリファクタリングもしづらい
- テストコードを増やしていくと正しい実装を強制するようになるかと思ったら、そうでもない2
ということを感じました。 最後にできあがった実装を見ても、まったくライフゲームなのか何をするものなのかすらわからないものになっていましたが、たしかにテストは通っているものでした。 これは、普段読みやすくしていこうという意識をすることが大切であることを教えてくれる題材だと思いました。
おわりに
およそ1年半ぶりのオンサイトでのイベントに参加してきました。 オンラインも良いのですが、ネットワークの問題を気にしたりとかせず、すぐに声が届く範囲で話ができるのでコミュニケーションのしやすさを感じました。
設計とかテストコードの書き方について色々話をしながら進めていくのは、小さい頃に友達と集まってファミコンをしていたときの雰囲気と似ていると思います。 こういう楽しい空気の中で学んでいくというのは効率が良さそうです。 次回(来年?)のCoderetreatも参加したいな。