FLINTERS Engineer's Blog

FLINTERSのエンジニアによる技術ブログ

新卒1年目エンジニア、インフラ知らんのにISUCONに出場する

こんにちは、株式会社FLINTERSのBN(新卒)重永です。

現在、FLINTERSが今年で10周年を迎えるということで、その記念に皆んなでブログリレーをしようという試み中です。

僕はそんなブログリレーの95日目を担当します。

実は前に既に1本書いているので、2本目のブログになりますね。

そんな2本目のブログ、執筆するきっかけになったのは、僕が(第13回)ISUCONというWebパフォーマンスチューニングの大会に出場したからです。

isucon.net

他にも出場された方はいて、何名かはブログを執筆して、公開もされていると思うので、ぜひ探して見てみてください。

僕のブログでは、「新卒エンジニアでインフラとか全然知らんけど、勢いでISUCONに出場してみた結果こうでした!」という話をしていきます。

同じく新人の方には参考になる内容かと思うので、ぜひ最後まで見ていってください。

新人じゃない方も、「新人ってこういうこと考えてるんだなぁ…」的な参考になるかも知れません。

なぜISUCONに出場した?

そもそもなぜ、インフラなんて全く分からないのにISUCONに出場したのかと言えば、単純に勢いとノリです(笑)。

社内で実施されていた『ISUCON勉強会』なるものに、先輩から誘われて出席していたら、「重永くんも出る?」という流れになって承諾しました。

僕は断らない性格というか、「まあやってみれば何とかなるでしょ。それにちょっと面白いかも」と思ってしまうタイプなので、こういうことがよくあります。

結果、良かったとは思っています。

用語を知ってる程度のインフラ知識だったのが、ISUCON出場にあたっての勉強でレベルが底上げされたからです。

こういう大会にでも出ないと勉強しないこと、体験できないことって、やっぱりありますよね。

ISUCON勉強法

僕のISUCON出場へ向けた勉強は、まず目的が『一緒に出る先輩の足を引っ張らない、且つちょっと役に立ちたい』でした。

『足を引っ張らない』に関しては、とりあえず公式が出している書籍があるので、それをじっくりコトコト見ていきました。

それがこちらですね↓
達人が教えるWebパフォーマンスチューニング 〜ISUCONから学ぶ高速化の実践

正直言うと、この書籍を本気で読んだことで、まるで既に優勝したかのように、僕は満足していました。

理由は、先にも述べた通り、『用語を知ってる程度のインフラ知識が底上げされたから』です。

先輩とも話しましたが、ISUCONとか関係なく、特に新人はエンジニア全員が見ておいた方が良い本だと思います。

『ちょっと役に立ちたい』に関しては、GO言語が読めるように、公式ドキュメントとISUCONの過去問のコードは読んでいました(当日はGO言語を選ぼうというチーム内での作戦のため)。

インフラ側は一緒に出場した先輩に任せ切る気満々だったので、せめてアプリケーション側でスコアを伸ばせないかと考えたのです。

出場にあたってISUCON関連の記事を読んでいましたが、サーバー側とアプリ側で役割分担していたという話はよく聞きました。

僕たちのチームも、2人でしたが、当日は先輩がサーバーを分割したりしている間に、僕はGOの実装を読んで「ここ改善できそうじゃない?」と当たりをつけて試していました。

もう1つ、これやって良かったなと思うのが、実際にチームで過去問を本番形式でやる予行練習を設けたことです。

これは非常に恐縮ながら、僕の方から言い出したことでした。

なぜなら当日に『僕が』やらかしそうで不安だったからです(笑)。

ただ後日談ですが、先輩が「予行練習をやったおかげで、当日に余計なところでつまずかなくて良かった」と言っていて、ちょっと嬉しかったです。

まとめると、僕がやったことは、ISUCON公式の書籍を読み込む、GO言語に触れておく、「予行練習やりましょう!」と図々しくもお願いする、の3つです。

「もっとやれたのではないか?」と言われればどうですが、まあ最低限のことはちゃんとやれたのではないかなという感じです。

本番の結果は?

皆さん気になるのはここかと思います。

「色々勉強とかしたっぽいけど、それをやって実際はどうだったの?」と。

結論から言うと、661チーム中253位でした。

何とも微妙ですが、個人的には「初出場で本番の空気感も分からない中、3分の1には入り込めるんだ…」という印象でした。

多分、予想外のトラブルが発生しなければ、180位くらいにはなっていたのではないでしょうか(数字はテキトーです)。

その予想外のトラブルというのが、DNSの名前解決でベンチマーカーが失敗しまくるというものです。

僕はあんまり分からないですが、本当に結構謎いかったらしいです。

そのベンチマーカーエラーのせいで、僕がせっかく加えたアプリケーション側の変更も適用できませんでしたし…

正確には、1回はデプロイが通ったのですが、シンプルにリクエストエラーが出て、僕の書き換えたコードが間違ってました(笑)。

とはいえ、何回かトライしてベンチマーク通るものだと思うので、数回でもデプロイできなかったのは痛かったです。

ちなみに、開始初期に1回30位以内まで順位が上がったり、前半4時間はずっと上位だったりしたんですよ。

最初は凄く順調に進んでて、「これは予行練習が効いたのでは?」という感じです。

まあ、100%先輩の手柄でしたが…(笑)。

ISUCONやってみて

何度も言いますが、インフラなんて全然分からなかった僕が、書籍を通して、準備を通して、本番を通して、知識の底上げができたことが良かったです。

ISUCONに一緒に出場した方は、普段の業務じゃ関わらない方なので、ISUCONによってできた繋がりがあったとも言えます。

こういうエンジニアの大会というのも初めて触れましたし、総じて楽しかったなと思います。

ということで、僕の第13回ISUCONの振り返りはここまでにします。

次回の10周年記念ブログもお楽しみに!