Go合宿2018に参加して卒業にコミットしてきた

Yu SERIZAWA
All YoU Need Is D*
5 min readJul 9, 2018

--

最高の夏2018

千葉県にある, 土善旅館で開催された,Go合宿2018に参加してきました.

Go合宿とはGo好きな人たちが集まってワイワイしながら, 1泊2日の開発合宿をやるやつです. 初参加で心細かったので, 新卒(?)同期の Kei Kamikawa. と一緒に参加しました. 大学を卒業するため授業の課題で実装してない部分があったので実装するために参加しました.

実装するアプリケーション

そもそも,どういう課題なのかというと,本のレビューシステムのようなものを作成しなさいという課題です.もう少し詳しく説明すると,ユーザーが存在して,本を追加できて本にレビュー,キーワード,引用を追加できる.ユーザーは同士はフォローができて,本を検索できて,読んでいない本の推薦する仕組みもあるという感じです.これを3人1チームで言語は何でも良く,操作するインターフェースはGUIでもCLIでも良いので実装してくださいという感じです.基本的な機能(ユーザーのSignup, Login, Follow, Unfollow, 本の作成,取得,レビューの作成,本の引用など)は実装していたのですが,本の検索部分と,本の推薦システムを実装していなかったので,この合宿ではこの2つを実装しようとしました.

本の検索システム

15時に合宿会場に到着して,まずは本の検索システムの実装に取り掛りました.本にはキーワードが設定されているので,それで検索できるように(PostgreSQLにクエリを投げるだけ)まず実装しました.キーワードで検索して,返す際のソート順をPageRank順にするために,それぞれのPageRankを計算するようにしました.本から本へリンク(引用)できるので,それを利用してリンクが貼られた時にPageRankを非同期で計算するようにしました.Goだとサクッと非同期にできるので便利ですね.この実装だと,本とリンクの数が膨大な数になってくると破綻するのですが,他の実装が思い浮かばず(分散処理とか?),シンプルに実装していきました.順調に実装できてE2Eテストも用意できたのが,夕飯後くらい(20時)でした.

本の推薦システム

温泉に入った後,推薦システムに取りかかりました.フォローしているかどうかの要素も考慮に入れようかと思ったのですが,最初は素朴に協調フィルタリングをこちらの記事を参考にGoで実装していきました.

完全にやるだけではと思っていたのですが,まったく頭が働いておらずなかなか進まなかったのですが, @codehex とのペアプロにより無事に実装できました.現在は推薦される本の一覧を取得する際に計算しているので,計算結果をキャッシュした方が良さそうです.こういうパフォーマンスに関する話は,ペアプロ中にも何度も出たのですが,脱線して中々進まなかったので,パフォーマンスチューニングは後回しにしてとりあえず完成させようということでやっていきました.これが終わったのが,午前3時くらいでした.午前3時にも関わらず,起きて開発してらっしゃる方は結構いたので驚きました.ここから後述するLTのスライドを作成し始めて5時前に就寝しました.

寝る前の開発会場の様子

LT大会

2日目には合宿の成果発表として希望者によるLTが行われました.1人5分で15人くらい発表者がおり,私も発表しました. "未卒 🔜 新卒" というタイトルで発表しました.発表内容は卒業するためのアプリケーションを作成するにあたって,どんな構成にしたか,どんなライブラリを利用したか,今回の合宿では何をやったかなどをまとめました.利用したライブラリ寄りの話になってしまったので,もっと今回実装した検索システムと推薦システムの2つの話を中心にすれば良かったなと後から思いました.

発表資料

LTが終わると,投票が始まり私のトークはドローンが貰える賞(賞の名前を忘れてしまいました...)を頂きました.投票していただいたみなさんありがとうございました!! オフィスで飛ばして,怒られないようにしたいです.

おわりに

いくつか感想を.

  • 実装がダルくて放置していた2機能を実装できて良かった
  • これはかなり卒業に近づいた感
  • pospomeさんによる深夜のゲリラDDD勉強会が良かった
  • 開発合宿はとにかく酒を飲む会だと認識していたけど, 予想以上に多くの人がずっと開発しててすごかった
  • 笹川の田舎感がかなり良かった

良い合宿を企画してくださったみなさんありがとうございました! 次回もあればぜひ参加したいです 💪

--

--