読み終えるまでの目安: 5分
目次
概要
2024年の年始にゆるめの開発合宿をやってみた!
きっかけは「年末年始、どう過ごそうかなー」とかぼんやりと思っているとき、ちょうど作りたいプロダクトを思いついたこと
前から開発合宿をやってみたかったし、以前技書博にいったときに誘った友人に声をかけ、実際にやることにした 👍
同じプロダクトを、テスト駆動開発 + ペアプログラミングで議論しながら作るという学びに溢れる体験
おかげで 2024年はとても生産的な幕開けになった笑
この記事ではその振り返りを書き留めておく
プラン
開発合宿のプランは以下のようなものだった
- 家から通えるレンタルスペースでやる
やると決めたのが 2023.12.22と直前だったこともあり、宿泊施設を探したりはしないことにした - 期間・時間
- 1泊2日
- 活動時間は 10:00-18:00
- 目的
- 純粋に楽しむ!
- お互いの知見を共有する
- 刺激を受ける
- 活動内容
- 同じものを一緒に開発する
- どうせならペアプロする! 👍
- どうせならテスト駆動開発もやろうぜ! 👍👍
会場
2人の作業にちょうどいいスペースが見つかった
画面も置いてあるし、過不足なし!
当日までにやったこと
お互いの期待をすり合わせる
まずは 2人がこの開発合宿に期待することを確認し合う
なぜやろうと思ったのか、どうなったら・何ができたら嬉しいか…
もちろん友人関係なので、そんなシリアスな空気ではなく、あくまで気楽に話す
お互いに「何か学べることがあるはず!」と前向きに思っているからこそ、独りよがりにならないよう注意した
開発するプロダクトについて理解を近づける
今回は、私から持ち込んだプロダクトを一緒に開発することにした
別々でもよかったのだが、彼がノッてきてくれた 🙌
ということで、作るものが何なのか、その概要から思想までざっくり議論していった
この段階で、開発合宿でどこまで目指すか、開始までに何をやっておくかも決めた
リポジトリの整備と開発環境の構築
合宿当日までに、分担しながらいろんな準備をした!
基本的には、開発合宿でアーキテクチャの検討から始められるように、事前にできることはやっておいたという感じだ
- GitHubリポジトリの整備 👾
- Project・Milestoneの作成
- issueの作成
- 開発環境構築 🧑💻
- Poetry (Pythonパッケージ管理ツール) の導入
- Linter・Formatterの導入
- Dockerによる仮想環境
- コンセプト・思想をドキュメントに書く 📝
- アーキテクチャに依存しない細かい仕様の策定 🔧
こういったことを、適宜 Pull Requestにしたりして歩幅を合わせながら進めた
1日目
ここからは実際の開発合宿当日のようすを書いていく
アーキテクチャの検討から
計画していた通り、まずはシステムの設計から始めた
私は設計に対し苦手意識を持っており、友人の知見を借りられてかなり助かった
ドメイン駆動設計や Clean Architectureなどの知識をうまく活用してもらえた
途中、全体像が見えてきても「何から始めよう…」と困ったタイミングがあった
ただ、試しに基本シナリオのフローチャートを書いてみたことで足がかりを得られた
午後にはペアプログラミングに移れた
アーキテクチャ検討は午前中で完了し、午後からはいよいよペアプロを始めた
最初は抽象クラスを作り、具象クラスを作るフェーズになったらテスト駆動開発がスタート
なお、テストを書くフェーズと実装するフェーズでナビゲータとドライバを交代するようにした
私は知識レベルが同じくらいの人とペアプロした経験が少ないので、命名や責任範囲などの悩みを議論しながら実装するというのはとても楽しかった!
また、テスト駆動開発を実践で取り入れるのも初めてだったため、それも新鮮だった
ただ、最初は休憩のとり方が掴めなかった
議論しながらやっていると平気で 1-2時間が過ぎてしまい、疲労することが度々あった
そのため、途中からはポモドーロタイマをセットして目安とし、柔軟に休みをとるスタイルに
2日目
早速ペアプロ!
この日はいきなりペアプロで、前日の続きから再開
ここは特筆することもなく、引き続きという感じだった
中枢の実装に差し掛かり苦戦…
2日目の午前だったか昼過ぎだったか、このプロダクトの心臓部の実装に突入した
それ自体は嬉しいことなのだが、いかんせん複雑な実装になるところ
今まではそれなりにうまく進んでいたが、手が止まる瞬間が多くなったり、テストの単位でお互いの考えにギャップが生じたり…
今思うと 2人の思い描いていたものが綺麗に共有できていなかったのかもしれない 🤔
まあ、手探りだったからしょうがない!
目標には届かず時間切れ!
中枢の実装の途中でタイムリミットに到達
代表的なシナリオを動かせる状態にするのが目標だったが、それには届かず
とはいえ、元々チャレンジングな目標だったので、実は半ば予想通りだったりもする
振り返り: Fun Done Learn
友人と一緒に Fun Done Learnで振り返りをおこなった!
私の書いたカードは緑色のほうだ
お互い初めての取り組みだったこともあり、Learn・Funがたくさん出ている
いい感じ 👍
また、特に印象に残っていることについても言及しておく
しっかり準備しておいて本当によかった!
今回は、開発合宿の前に仕様検討や環境構築などをある程度済ませておいた
そのおかげで、当日は生産的で有意義なアクティビティから始めることができた
また開発合宿をやる場合でも、準備を入念に済ませるスタイルを継続していきたい 💪
人の手元を見るのって面白い 👀
普段は家で 1人で仕事をしているし、会社にいったってペアプロをする機会はほぼない
それが、今回は友人が開発している様子をすぐそばで見ることができ、これが本当に興味深かった
「エディタをこんな風に使うんだな」とか「GitHub Copilotは普段使ってなかったけど、まるで脳みそを覗かれてるくらい強力だ…」みたいな発見があった
こういったことは他の人と接していないと知るきっかけがないので、とても貴重な機会だった思う
ペアプロ、疲れる! 😂
経験者の話を聞いたことがあるのでわかってはいたが、ペアプロの疲労を体験した笑
途中から明らかにパフォーマンスが落ちて、相手の話についていけなくなったり、考えをうまく伝えられなくなったり…
ということもあって、1日目の早い段階で自覚して、意識的に休憩をとっていけたのはよかった思う!
楽しさより疲労感が勝ってしまって、ペアプロを苦痛に感じる…なんてことがないように、1人での開発とうまくバランスをとるのがよさそうだ
社外の文化を知り、自社の文化に気づく
ペアプロをしていると、私が何気なくやっている習慣を「それいいね!」と褒められることがあった
たとえば、プルリクエストをレビューするときは指摘だけでなくポジティブフィードバックも入れるようにするとか
逆に、私の知らないことを友人が当然のようにやっている・話しているのを見て、超絶勉強になったりもした
ツールの話でいうと GitHubのちゃんとした使い方 (issue, project, milestone, …) とか、Copilotとか
こういったことを通して、ずっと同じ組織に閉じこもっていると、いい習慣にも悪い習慣にも気づけないんだと思い知った
技術交流ができるオープンなコミュニティで活動していれば、自分と組織を見つめ直し、改善する機会を得られるのではないかと思う
今後もこの友人との関係は大事に守っていきたいし、さらに広げるためにいろんなイベントに参加してコミュニティを発掘していきたい ☀️
結び
初めての開発合宿は間違いなく成功だった 🎉
開発の目標には届かなかったが、それでも楽しさと学びが本当にたくさんあった
やっぱり私はものづくりが好きなんだな〜と再認識したりもして
今回一緒に取り組んだ友人とも、早速「次回はもっと遠くの旅館とかでやる?」なんて話もしている
(読んでいただいた方、もし少人数での開発合宿に向いている場所をご存知でしたらぜひ教えてください! 😊)