しゃべる葦原

ISUCON14に参加した話

2024-12-16

概要


12月8日に行われたISUCON14に、学生チームMaxipusとしてyukikamome316・Batrachotoxinと共に参加しました。

私は、技術も知識も相当不足した状態での参加だったので、この記事の中では練習や本番の中で思ったことや、学べたことを中心に書いていこうと思っています。当日の技術的な話やスコアの話はあまり書くつもりがないのでご了承ください。

『参加してよかった』と思えた事柄


最初は正直、プログラミングに関してずぶの素人である私が、ISUCONという社会人の方々も参加するような大きな大会に出てもいいのかと不安でした。

ですが、最終的には参加してよかったなと感じ、来年も参加したいとまで思うほどになりました。

この劇的な心情の変化は、おそらくISUCONに向けて学ぶ中で貴重な経験をたくさんできたために起こったのだろうと思われます。

1.個人開発では扱わない規模感を味わえた

ISUCONに参加する前からGO言語を使った個人開発はちょこちょこと行っていましたが、所詮は手元のPCで動かす程度のモノ。

データベースはSQLiteで事足りたし、リクエストが捌けないなんてこともありませんでした。

しかし、ISUCONに向けて練習を始めるとその世界は一変。MySQLが主流だったり、nginxなどのリバースプロキシも利用されていたり。 個人開発では浮上しない様々な問題に対応するために先人たちが編み出した様々な技術に触れることができて、とてもわくわくしたのを覚えています。

2.実際に動くアプリケーションの中身を覗けた

ネットで調べものをしていると、機能を実現するための部分的なコードがたくさんヒットします。

個人開発の中で、それらの部分的なコードを拝借することがよくあったのですが、「この部分だけ見たら正しいんだろうけれど、私が今行っている開発の中では適切な手法なのかな?」と気になることが多々ありました。

ISUCON練習をする中で、重くて落ちてしまうという欠点はあるものの、実際に複雑なサービスを提供できるアプリケーションの中身を除くことができて、それらの疑問の中のかなりが解消され、とてもすっきりしたのを覚えています。

私が首をかしげながら書いてきたコードが実際にISUCONのソースの中で見られて安心したり、私が個人開発でやろうとしていたことを何倍も大きい規模感で実装しているのを見て感嘆したり。練習中にいろいろな学びをえられたように思います。

3.何となく嫌厭していた技術を学ぶ機会になった

GO言語で個人開発をする中で「小規模だからいいけど、これってかなり悪い実装だよなぁ…」と思いはするものの、それを改善する手法は何となく難しそうに見えてしまい、調べる止まり。手を動かして実装はしない。

私はISUCONで出題されるような悪いコードを書く側の人間でした。

ISUCON14に参加することが決まってから重い腰を上げて学び始めると、難しいけれど、想像していたほどじゃない。

データベースの構造とか、インデックスとか、バルクインサートとか、テーブル結合とか、キャッシュとか…

新しいことを学ぶ楽しさも相まって、少し難しい内容であってもすんなり吸収できたように感じます。

ISUCONに望むにあたって、10月中旬あたりに『達人が教えるWebパフォーマンスチューニング 〜ISUCONから学ぶ高速化の実践』を購入したのですが、この本も非常にためになったし、面白かったです。

達人が教えるWebパフォーマンスチューニング
〜ISUCONから学ぶ高速化の実践

まだ深く読み込めていないので、この先も大切に読ませていただこうと思っています。

反省点


特に本番を終えて一番感じた反省点は、『アプリケーションが全体でバランスを取り合って成り立っている』 というイメージが欠けていたことです。

データベースのチューニング手法を齧ったことで、そこにしか目が向かなくなっていたんです…(反省)

先ほど紹介した本の付録までちゃんと読んでればそんなことにはならなかったんじゃないかな、と読み切った今では反省しています。

練習期間の反省も少し書こうかな。

10月・11月は大学の文化祭と重なり、かなり忙しかった(特に精神的な意味で)

そんな中でも、もっとできることはあったはずだなぁ、と思っています。

練習期間中にも過去のISUCON参加記を読んだりしていましたが、手法の部分をかいつまんで読んでいて、本質を見逃していたのだと今ならわかります。

まとめ


ISUCON14に参加したことで、他では得られない経験をたくさん得られました。

参加してよかった。来年も参加したいな。

総評、楽しかった。