はじめに
久しぶりの投稿です。
8月の3週間を使ってCARTA HOLDINGS(旧Voyage Group)のサマーインターン「Treasure」に参加してきたので、今回はその中で開発したサービスの内容などを振り返っていこうと思います。
実はここに書いてある以上に難所がたくさんあったのですがその辺はその部分の実装を担当した他のチームメンバーが参加記を書いてくれる...はず!
前提
- 開発期間は設計含め6日半(1日に使えるのは8時間。うち1時間は休憩)
- 使用技術は自由。AWSリソースも常識的な範囲で制限なく使える。
- 価値を創るプロダクトを作ること
- 社員サポーターの皆様が手厚くサポートに入ってくださる(基本的に「分からない」は言えば迅速かつ丁寧に拾ってもらえます。)
人事のさとみんさんが書かれたこちらの記事だとイメージが掴みやすいと思います
どんなサービス作ったの?
短時間の筋トレをしたい人をリアルタイムでマッチングさせるサービスです。筋トレするマッチョとマッチングを合わせてサービスはMatchong(マッチョング)と名付けられました。やりたい筋トレメニューを選ぶと、同じメニューを選んでいるユーザーとマッチングしGoogle Meetのような部屋で筋トレを行うことができます。発表に使ったデモを含んだ資料を添付しておきます。
マッチング(Redis/Go)
MatchongはApexやSplatoonと同じ感覚で、同じメニューを選んでいる人同士をリアルタイムマッチングさせます。
チームで共有されたこの記事を参考にとりあえずマッチング処理ならキューやろってことでRedisをキューに使って、様々な社員サポーターさんのFBも頂きつつ色々とチームで話し合いこんな感じの構成になりました。
処理の流れとしては
- ユーザー(図右下)が筋トレメニューを指定してマッチングリクエストをアプリケーションマイクロサービス(AP)へ送信。同時にクライアントとAPとのWebsocketを開通する。
- APはマッチングリクエストを送ってきたユーザの情報をキューに格納。キューにはマッチング待ちのユーザーが筋トレメニューごとに溜まっていく。
- マッチングマイクロサービス(正確にはGo Routine)がキューをポーリングして、人数が集まったらマッチング情報をPostgreSQLに書き込む
- マッチングしたらそのことをWebsocket経由でクライアントに通知し、Skywayでビデオ通話を開始する。
という感じです。(だいぶ端折ってます)
私は主に3のポーリングの実装、ElasticacheでRedisをセットアップするところやUIのスタイリングなどをメンバーと担当したのですがGoやElasticacheを本格的に触るのは初めてだったので非常に刺激的で面白い体験でした。
欲を言えばWebsocketも初体験だったので実装にもっと絡みたかったのですが実装日程は3日半だったので流石にそんな時間はありませんでした笑
これについては事後面談でも考えましたが実際の開発であれば自分の手元でPRをチェックアウトしてコードや動作を眺めてみるといった動きが癖になると今後はもっと良いなあと思っています。
おわりに
スケジュール全体の流れとしては3週間のうち初めの1週間は講義や自習、次の1週間でプロダクト作りに向けたアイディア出しやその発表を行い、最後の1週間で開発を行って最終成果物を発表するという感じです。
そして3週間を終えてみるとTreasure2022は本当にあっという間で、チーム開発的にも技術的にも多すぎるほどの学びがありました。その中でも個人的に一番印象に残っているのは@t_wadaさんのDBモデリング講義で、著書である「SQLアンチパターン」を愛読していた私は改めてDB設計の奥深さや難しさを知ることになりました。
そしてTreasure応募から半年以上お世話になった人事の方々、全力でTreasure生をサポートしてくださった社員サポーターの皆様には本当に感謝してもしきれません。チームメンバーにも本当に恵まれて楽しく充実した3週間でした。合わせてチームメンバーにも感謝です。
もしこの記事を読んでいる学生で2023以降への参加を検討しているならば、ぜひ応募することをおすすめします。2022では2月には募集が始まっていたのでお早めに。