LTを記録できるAPIを1日で作ったら開発合宿最高となった


![ogp.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/810513/357040dc-e6bf-ae46-69b6-3184757f01ed.jpeg)

# はじめに

私は普段以下のコミュニティに参加してプログラミングの学習を進めています

https://qiita.com/organizations/nekopro

1ヶ月ほど前に**オフライン**での勉強会があり、そこで仲良くなったメンバーと**Go**と**React**で何かシステムを作ろうとなったので1日の開発合宿を行いました

そこで作成した「**lightning-neko-talk**」というAPIと開発合宿について紹介します

https://github.com/jinwatanabe/lightning-neko-talk

# 使用した技術

今回主に利用した技術は以下になります

- Go(gin)
- Docker
- PlanetScale (MySQL)
- Cloud Run (gcp)
- Github Actions

またその他にも開発にいろいろ取り入れました

- モブプログラミング
- テスト駆動開発(TDD)
- クリーンアーキテクチャ
- モノレポ
- トランクベース開発
- CI/CD

# メンバーについて

今回は3人で開発しました

1人はエンジニア歴4年でGoで個人開発をしている方

1人は今年からエンジニアになって学生時代は機械学習をやっていた方 (バックエンド経験なし)

2人とも自動テストを書いたこともなく、クリーンアーキテクチャやTDDの経験もありませんでした

私としても初めての試みにはなりますが、レベルを底上げするべく実践よりの開発方式で開発合宿を行うことにしました

# 開発したAPIについて

今回はライトニングトーク(LT)を記録できるシステムを作りました
具体的には、ライトニングトークのタイトル、詳細、日付を記録できるようなAPIで以下のエンドポイントを作成しました

- GET /v1/groups : グループの一覧取得
- GET /v1/groups/{id} : IDに紐付いたグループを取得
- POST /v1/groups : グループの作成
- PATCH /v1/groups/{id} : IDに紐付いたグループの更新
- DELETE /v1/groups/{id} : IDに紐付いたグループの削除

APIとしてはとても単純なものですが、TODOリストよりもほんの少し難しく、実用的なものを開発のお題としてチョイスしました

クリーンアーキテクチャやTDDなど本当に1から教えたので完成までに12時間かかりましたがなんとか1日で完了しました

![IMG_1391.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/810513/60a167fb-8f84-a7e8-fd3c-01b723c449ae.jpeg)

# アーキテクチャについて

今回はDBに「**PlanetScale**」、ホスト先に「**Cloud Run**」を使いました

https://planetscale.com/sign-up

https://cloud.google.com/run

テストとデプロイはGitHub ActionsでCI/CDを構築して以下のようになりました

![drawio (1).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/810513/ed768eb5-4a58-eaf2-aa6b-350d3d7c305e.png)

# やってみた感想

実際に1日を通して開発をしてメンバーから感想をいただきました

CloudRun使えた
どんどん成長している感じがいいね
12時間あっという間だった
モブプロ楽しい
ChatGPT使えるの楽しい
コードがかけるようにどんどんなった
気づいたら時間が立っている
クーリンアーキテクチャおもしろい
TDDおもろい
テスト書いてるのにプロダクトコード完成してた
APIから期待通り帰ってくるの楽しい
クリーンアーキテクチャを理解してもらえた
実装を自分たちでやりきる力をつけてもらった
SOLID原則を理解してもらった
モブプロをやれるようになってもらった
クリーンアーキテクチャの凄さに感動
12時間近く開発をするのは初めてですごい
わからないところいっぱい聞けた
APIデプロイできた
モブプロでチーム開発できた
人が書いてるコードを見ながら質問するといい
テストは何を作ればいいか教えてくれる
依存性がないと付け替えるの簡単

かなりポジティブな意見ばかりでていて、開発が楽しいと改めて認識できました
また新しいことばかりだったのですが、メンバーの飲み込みがよく身になったようでした

![IMG_1386.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/810513/c827af55-1817-05c3-2c90-9a3c3c5a0fc3.jpeg)

# 開催した場所について

今回は「**TSUTAYA BOOKSTORE 渋谷スクランブルスクエア**」を利用しました

https://tsutaya.tsite.jp/store/lounge/detail/2330/

1日5500円で利用でき、予約もできるので安心感があります
また無料でモニターの貸出をしているので合宿のもってこいです

そしてなんといっても「飲み放題」「食べ放題」が魅力的でした

![IMG_1228.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/810513/69b3b3dd-cc84-5bc9-8c10-a163e9055dcc.jpeg)

![IMG_1227.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/810513/8a061a76-a041-fb01-012b-772bb6e0d39b.jpeg)

![IMG_1230.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/810513/68a5ed9f-9f7e-e7e7-f61d-7f84510a1f03.jpeg)

これだけでも満足度が高いのに、1日作業できて、学べてと最高の開発合宿になりました

# おわりに

この開発合宿は2部構成となっていて、次回**React**を使ったフロントエンドの開発を行っていきます

今回で**TDD**や**クリーンアーキテクチャ**について理解してもらったので次回はReactやTypeScriptの説明にフォーカスして今回よりも早く開発サイクルが回せるような気がしています

開発合宿をやるのはメンバーを集めたり、テーマを考えたりと主催するのが大変なイメージはありますが、数人でやるのはそこまで大変ではないと思いました (レベル感はある程度必要ではありますが)

もっとコミュニティや仲間と1日の開発合宿をする習慣が広まれば嬉しいです！

![IMG_1379.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/810513/c117510a-5245-4b34-3399-398c7cb7abfd.jpeg)

(ラウンジからの景色も最高です!)


# 参考

- [PlanetScale](https://planetscale.com/sign-up)
- [Cloud Run](https://cloud.google.com/run)
- [TSUTAYA BOOKSTORE 渋谷スクランブルスクエア](https://tsutaya.tsite.jp/store/lounge/detail/2330/)