TL;DR

11月14日に開催されたGlobal Day of Coderetreat in Shinjukuに参加してきました。

Global Day of Coderetreat 2021 in Shinjuku (2021/11/13 09:15〜)

## 参加に関してお願い 新型コロナウィルス感染予防として、ワクチン2回接種済みでない方、体調に不安のある方は、参加をご遠慮ください。当日の様子によっては、運営がご退席をお願いする場合もありますので、ご承知おきください。 イベント参加中には、マスクの着用や手指消毒にご協力ください。 運営メンバーは全員ワクチン2回接種済みです。 参加を取りやめる場合はキャンセル手続きをお願いいたします。ランチ、おやつの手配の都合上です。 ## 概要 Global Day of Coderetreat は、仕事を離れて、ソフトウェア開発と設計を練習するイベントです。無料で参加できます。 美味し...

開催はアギレルゴコンサルティングさんのオフィスでした。 久しぶりのオンサイトイベントでとても楽しかった。

Coderetreat とは

Coderetreat

A free community event to practice professional software development

Coderetreat は、普段の仕事での開発のようなプレッシャーのある環境から離れて、ペアプロとTDDを通じて設計や開発について実践する場を持つためのイベントです。 まる一日かけて行うイベントで、コンウェイのライフゲーム(The Game of Life)をテーマに、好きな言語でテストコードを書きながら実装を進めていきます。 45分で1セッションとし、各セッションの終了時にはそこまで書いたコードを全部捨てます

今回のイベントではペアプロではなくモブプロで実施していました。 オンラインのプログラミング環境であるcyber-dojoを利用し、Mobsterを使ってモブプロの時間管理をして行いました。 使用した言語は、JavaScript(Node.js)とテストツールとしてJestを選択しました。 これはその場にいた人たちが共通して使える言語ということで決まったようです1

感想

久しぶりに5分区切りで時間切り替え制のモブプロをしたのですが、短い時間で回すのも回転が早くて面白かった。 今回初めての参加で全部捨てることに驚いたのですが、次のセッションを始めるときには、前回の失敗を踏まえたり、良かったところを意識してみたり、あえて違う実装の進め方をやってみたりと捨てたからこそできる考え方があるように思いました。 また、お好みで実装時の制約を入れるそうです。 今回は2セッション目のときに、「ループ(forwhiteなど)を使わない」という制約を入れてみました。 今回自分が参加した3セッションでは、

  1. ライフゲームの内部の実装から進めていく
  2. 表示部分から実装してみる
  3. メンバーに役割を与える

といったやり方をしました。

3つめの「メンバーに役割を与える」というのは、「ライフゲームの正しい実装を促すためのテストコードを書く人」「与えられたテストコードをパスするだけの意地悪な実装をする人」、そして「実装をリファクタリングする人」に分かれ、それぞれ順にコードを書いていくというやり方です。 人数が4人いたので、この役割を順で回していき、参加者がそれぞれの役割を体験することができました。 このやり方で

  • 意地悪な実装は意外と考えるのが難しい
  • 意地悪な実装はリファクタリングもしづらい
  • テストコードを増やしていくと正しい実装を強制するようになるかと思ったら、そうでもない2

ということを感じました。 最後にできあがった実装を見ても、まったくライフゲームなのか何をするものなのかすらわからないものになっていましたが、たしかにテストは通っているものでした。 これは、普段読みやすくしていこうという意識をすることが大切であることを教えてくれる題材だと思いました。

おわりに

およそ1年半ぶりのオンサイトでのイベントに参加してきました。 オンラインも良いのですが、ネットワークの問題を気にしたりとかせず、すぐに声が届く範囲で話ができるのでコミュニケーションのしやすさを感じました。

設計とかテストコードの書き方について色々話をしながら進めていくのは、小さい頃に友達と集まってファミコンをしていたときの雰囲気と似ていると思います。 こういう楽しい空気の中で学んでいくというのは効率が良さそうです。 次回(来年?)のCoderetreatも参加したいな。

  1. 自分は午後から参加したので、自分がいない間に既に決まっていました。 

  2. 45分の中で少ないテストコードだったせいなのかも?もっと長く続けていったらどうなるのか。