済州島でのグルムトーン第9期

応募のきっかけ
グルムトーンは前から知っていたけど、一度も応募したことはなかった。応募しても自分の持ち分も果たせず、チームに迷惑をかけるんじゃないかという無駄な心配がずっとあったからだ。そうこうするうちに運よく就職して、あっという間に1年。就職後にちゃんとやったサイドプロジェクトがなかったので、2024年になって「何か始めようかな」と考え始めた。ちょうどインスタが心を読んだのか グルムトーン 9期募集 をずっと表示してきて、特に期待はしていなかったのに突然一通のSMSが来た。結局、有休4日を1日で決断して行くと伝えることになり、済州島でハッカソン? そう、私は ロマン を選んだ。

0️⃣ 日目
参加が確定するとまずSlackに招待される。自由に質問できるし、参加者同士で先にホテルをシェアして予約することもよくある。2日目の教育からはグルムトーン側で宿が提供されるからだ。9期ではオフ会の募集もあって、教育が始まる前にさまざまな職種の人たちと話すことができた。自分も自己紹介ページでPRするらしいと知って、急いで修正してPRが崩壊せずに済んだと思う。グルムトーン中はチームビルディング後に他の人と話す時間が本当に足りないので、時間があるならいろんな人と話してみるのを 無条件 におすすめする。

1️⃣ 日目
済州市庁あたりから公共交通で30分ほど移動すると、1日目の教育会場である 구름스퀘어 に行ける。初日は教育と各自のPRがあって、ざっくりしたスケジュールはこんな感じだった。

1. アイスブレイク
ランダムにチームを組んでミニゲームをする。うちはスピードクイズだった! うちのチームが勝って、下みたいな商品をもらった。笑

2. 自己PR
ノーションのページ1枚で自分をアピールする。普通すぎると記憶に残りづらいけど、人数が多いから仕方ない気もする。みんなの話を聞くと、目をつけた人は別でメモしていたらしい。

3. グルムデザインシステム or クラムポリン IDE 実習
自分は配布まわりの基礎知識が足りなくて興味があったのでクラムポリンIDEの実習を選んだ。実際、あとでハッカソン中にデプロイしようとした時に助かった。参加前に予習しておいてね、とSlackで言われていたけど…(自分含め)やってきた人はほとんどいなかった。

4. メンター・審査員の講演
ハッカソンで成長する方法
ハッカソンを通して成長するとは? という話をグラフや簡単な統計で説明してくれて、ハッカソン中にやらないほうがいいことも話してくれた。
オープンソースでワクワクするハッカソン
ここで一番覚えているフレーズは
巨人の肩に乗ろうだった。もう実装済みの機能が多いから、短い期間でうまく活用しようという話。あとカカオにAI関連APIがあるのを知らなくて、興味が湧いて文書を読んでみた。大事なのは折れない(AIとの)コミュニケーション
発表されたばかりのOPENAIの
SORAを皮切りに、いろんなLLMモデルやプロンプト工法などを紹介してくれた。この時に感じた。今回のハッカソンでこれはAI使えってことだな、と…

5. キーワード発表
8期と同じ
スマート観光(生成型AI)がテーマだった。今回は違うと思っていたので少し残念だった。
2️⃣ 日目
- KAKAO DevelopersページとAPI紹介
- Cloud Teamと「良い開発者」とは…
上みたいな内容でKAKAOについて話してくれた。3… 3年だけ待ってください。

お待ちかねのアイデーション(IDEATION)
自分のアイデアは、OPENAIを使ってバリアフリー観光に関する手書きデータを整理し、済州のバリアフリー観光の情報や場所データを作るというものだった。でも後から ロマン が足りなかったと気づいた。

他の人のアイデアを見て一目惚れした。新しくて面白そうな スワイプ済州 というアイデアだった。発表が終わる前にSlackで声をかけて、私たちはチームになった。笑

チームビルディングは先に動いた人が勝ちなので、惹かれるアイデアならすぐ突撃するのをおすすめする!
その後はチームで記念写真を撮って、ビアパーティが始まった。もちろんその間にもいろいろあったけど(カフェでお互いの話をしたり、アイデアをブラッシュアップしたり)、ビアパーティはハッカソン終了まで他の人たちと交流できる最後の時間だから、よく話して…たくさん食べるのが大事。ロマン を回収できるのはこの日だけだ。そしてその日ざっくり企画をまとめて寝たのだけど、企画者の兄貴は残って、下みたいな落書きをフローチャートに起こしてくれた。さすが企画者。笑




3️⃣ 日目
目が覚めた瞬間に役割分担して開発開始。自分は カード周りと生成AI担当 になった。Tinder風のスワイプ機能をすでに実装してくれている とても美味しいパッケージ(巨人の肩) を使っていて、そのパッケージが react-spring 依存だったのでカードを裏返す機能をドキュメントを読んでカスタムし、自分の好みに合わせて実装した。最初はバックエンドからOPENAIと直接通信しようとしたけど難しくて、フロント側に回した。あと個人的に Langchain を使ってプロジェクトに直接入れてみたかった。そして本当に久しぶりに jsx でプロジェクトを進めたけど、めちゃくちゃしんどかった。とはいえ、型をあまり気にせず進めるには良い選択だったと思う。

グルムトーンの時間は本当に一瞬で過ぎた。あまりやってない気がするのに時間がどんどん進んで、3日目にコーヒーを3〜4杯飲んだ気がする。ご飯もおいしかった。サバも飽きるほど食べたし、空腹になるたびに何かが出てきた。笑

お尻が痛くなると、夕食後にチームで散歩に出たりもした。(少しずつ壊れていく自分)

お待ちかねのフロント配布…! うちのチーム長・神 희찬 センセが超絶デバッグでやり切った… クラムポリンを使いながら多くのチームが苦しんだ中、何回トライしてあの祈りを捧げたのか分からない。笑

4️⃣ 日目
生成AI側の作業は4日目に入る深夜から始めたと思う。本格的に始める前に、他チームとの差別化として考えたのは、アプリ内にプロジェクト用の データ を 埋め込み して ベクターデータベース をビルド時に入れておき、OPENAI がそのベクターデータベースから Context を取り出すことで ハルシネーション(hallucination) と データ最新化(Data modernization) を期待できるという点だった。そして 外部 vector DB よりも Local にしたのは、クラムポリン特性上 外部DB通信は避ける と言われていたからだ。すでに Langchain で試した経験があったので難しくなかった。正直、データ量はそこまで多くないので OPENAI に Question を投げる時に全部投げても問題なかったと思うが、構造的にはこれが正しいと思った。
そこで以下の2つを実装した。
- 手持ちのキーワード群の中で自然文を入力すると、適切な3つのキーワードを返す
- ユーザーが選んだ場所を評価して、結果のタイトルと内容を面白く変換して返す

そんなふうにだんだん壊れていく頃

そしてついに発表へ。デザイナー 주성 と 企画者 경수 兄の資料が本当に美しかった。自分も「うちのサービスってこんな感じだったの?」と思うほど…笑

そして私たちは…..! 1位 を取った。

誰一人欠けることなく、それぞれの場所で最善を尽くして ロマン まで回収した私たち 밀감 チーム。初ハッカソンなのに本当に運が良かったと思う。
打ち上げ
発表と受賞が終わって帰る人を除き、私たちは夕食を一緒にして、翌日まで食べて飲んで寝て食べて…お互いに知らなかった話も聞けて、チーム以上の良い縁に出会えた気がして本当に良かった。




感想
こんな短い時間で密度の高い協業をした経験はなかった(しかも済州で)。そして、こんなに多様な職種と似た年次が集まるハッカソンがまたあるだろうか。もっと多くの人と話したかったし、時間があれば私たちのプロジェクトをもっと高度化したい気持ちが続いていた。もしグルムトーン参加を悩んでいる人がいたら無条件でおすすめする。私は有休4日を使って来たけれど、社会人ならなおさら来るべきだと思う。結果も良かったので緩んでいた自分にとって大きなモチベーションになったし、開発が面白いと久しぶりに感じた。もう一つ良い知らせとして、私たち 밀감 はこのMVPをベースにさらに高めて実サービスにしてみるつもりだ。
残念だった点
大きな不満はないけど、あえて挙げるならメンターの皆さんは フルスタック開発者 だったけど、どちらかというと フロントもできるバックエンド 寄りに感じた。自分もフルスタック志向だけど、フロントならではの悩みをちゃんと聞けなかったのが惜しい。クラムポリン IDE も少し惜しかった。プロジェクト立ち上げ時に明確なガイドラインやボイラープレートがもっと整っていれば、どのチームももう少し苦労が減ったんじゃないかなと思う…そしてグルムトーンのノートPCステッカーもできたら嬉しいです。笑
