クックパッドのスプリングインターンに参加した。普段から大規模トラフィックをさばく技術に関心を持っています、と言っていたら選考通過した*1。
クエリのWHEREやORDER BYをグッと見つめてインデックスを貼るとよい、とか、mapの中でクエリ発行したら積み重ねで遅くなる、これがN+1問題ってやつですね、といったことは知っていた。一方で、gRPCという言葉は聞いたことがあったけど、なぜこのような技術が採用されているのか、Railsではどういうふうに実装するのか、とか、ECSを使ってアプリケーションをデプロイしてみましょう、みたいな、普段あまりやらないことを体験できたのがよかった。
Zoomでインストラクションしてもらいつつ、GitHub上の公開リポジトリをforkしてcloneして作業開始、という世界観だった。 参加者ごとに作業用インスタンスが用意されていて、とりあえずubuntuユーザーでSSHしたらログインできるというのは不思議な気がしたけど、よく考えたら https://github.com/utgwkk.keys から公開鍵情報は取得できるので、たしかにという感じがする。 うまくいかなかったらAWSのコンソールから作業用インスタンスに入ってもらって問題解決してもらっていて、リモートでデバッグするの大変だと思うので、こういう選択肢があるのはよいことだと思う。
実際に作業したリポジトリはこちら。gRPCのN+1リクエスト問題を解決しようとして失敗したのでrevertした様子が垣間見れる。こういう実装を短い時間でテストコードなしに完成させるのは難しい。ISUCONだとテスト書いてる時間なんてないのでさっとできるようになりたい。
以前、クックパッドのサマーインターンに参加したことがあるけど、後半の業務パートに参加できなかったのが今でも心残りで、半ば黒歴史みたいに感じることがある。 あれから3年近く経過したけど、どれくらい成長できたのだろうね。
今年はどういう形態でインターンをやっていくのか、とか、そもそも大学の予定はどうなるのか、みたいな話題もあって大変そう。
*1:インデックスとキャッシュが好き