「基本に忠実に」が違いを生む? 株式会社リクルート 社内ISUCON 2024がもたらしたさまざまな「わくわく」

isucon

 

 

エンジニアがわくわくする瞬間はいろいろあるでしょう。自分が立てた仮説がドンピシャリ当たって自らの技術で問題を解決できたとき、自分の成長を感じられたとき、そして「強敵」と書いて「とも」と呼べるようなつよつよエンジニアに出会えたときーー。

 

日々の業務の中でもそんなわくわくする瞬間に出会えますが、それを一日に濃縮して経験できる機会が「株式会社リクルート 社内ISUCON(1) 2024」(社内ISUCON)です。

 

すでにご存じの人も多いと思いますが、ISUCONは「いい感じにスピードアップコンテスト」の略称です。お題として与えられたWebアプリケーションの動きを理解し、ボトルネックを特定して改修、チューニングを加え、最も高いパフォーマンスを出したチームが勝利する形式となっています。

 

ルールはシンプルですが、コンテストで勝ち抜くにはWebアプリケーションの構成を理解し、どのようなクエリが走っているかを把握し、本来のサービスや機能に影響を与えることなく、より「最適」な姿に近づけていく必要があります。それには、基盤からデータベース、アプリケーションの実装に至るまで幅広い知識が求められます。だからこそISUCONは、エンジニアにとっての総合格闘技と称されてきました。

 

こうした本家のISUCONのコンセプトに沿いつつ、リクルート社内の業務により近い形で企画されているのが社内ISUCONです。

 

ほぼ毎年に一回のペースで開催され、11回目を迎えた今回は、「クラウドネイティブな環境でパフォーマンスを競う」という大きな刷新が加えられました。Amazon Elastic Container Service(以下、Amazon ECS)やAmazon Relational Database Service(以下、Amazon RDS)、AWS Application Load Balancer(ALB)を組み合わせた、よりクラウドネイティブ​​な環境で動作する「risuwork」という求人プラットフォームのパフォーマンスを競う、というのが今回のお題です。

 

もちろん、通常の業務であれば、スケールイン/スケールアウトで高速化を図るのが王道となります。しかしそこはISUCON、新たなコンピューティングリソースの追加やインスタンスタイプの変更は禁止という縛りの元、どのようにパフォーマンスを高めていくかが問われることになりました。

 

「クラウドネイティブっぽい環境で社内ISUCONをやりたいというコンセプトはありましたが、クラウドネイティブっぽく作ると、今度は競技面でのやりにくさも生まれてしまいます。構成としてのあるべき姿と競技のしやすさのバランスをどう取るか、考えに考えながら準備してきました」(出題者の浅野宏明さん)

 

16_すてきなTシャツ.png

 

 

作問チームでは4ヶ月以上前から原案を温め、準備を進めてきました。さらにAWS様の協力を得て、事前勉強会も実施し、Amazon RDSのパフォーマンスを分析・可視化する「Performance Insights」などAWS特有のツールに関する説明を行った上で本番を迎えました。

 

雨にも負けず風にも負けず、全力を尽くした半日

競技当日の2024年8月30日は、あいにく台風10号の影響で各地で大雨の予報となっており、朝から首都圏の鉄道ダイヤにも乱れが生じていました。そんな中、雨にも負けず風にも負けず、集合時間前には三々五々参加者が集まり始めました。黙々と手元の端末で環境を確認をする人もいれば、周囲にお菓子を配って士気を高める人もいるという具合に、思い思いに準備を進めてコンテストに臨みました。

 

01_お菓子.png

 

 

今回の社内ISUCONには、30チーム・83名が参加しました。入社後1〜2年の若手で構成される新人チームが6チーム、インターン生によるチームも1チーム含まれる一方で、「老人会」を自称するベテラン勢もいるという具合に、バラエティ豊かな参加者です。また、リモートからの参加者も約20名に上りました。

 

ルール説明を終えると、早速、チーム内でレギュレーションの読み合わせを始めたり、ディレクトリやレポジトリの構成を確認したり、あるいは役割分担を確認するといった具合に、静かに、しかし熱く準備を整え、9時30分過ぎから競技はスタートしました。

 

 

02_オープニング.png

 

クラウドネイティブ環境に移ったといっても、ISUCON本来のコンセプトに変更はありません。ソースコードやログを眺めてボトルネックはどこにあるか仮説を立て、手を打ち、計測して効果を確認するーーというサイクルをひたすら繰り返すことで、数値を高めていくことになります。

 

 

03_にらめっこ.png

 

各チームは「ISUCON本」や事前勉強会の資料を参考に、Performance InsightsやX-Ray、CloudWatchといったツールを駆使しながら、あるチームはSQLとにらめっこし、また別のチームはインデックス張りにいそしみ、あるいはNginxの設定を洗い直す……という具合に、計測と対策、測定を繰り返していきました。

 

 

06_参考書とレッドブル.png

 

最初のうちはどのチームも元気いっぱいで、会場のどこかから「もう優勝が見えてきたぞ」という声も聞こえるほどでした。しかし徐々に作業に集中し、黙々とキーボードをたたく音だけがこだまするようになっていきます。時折、ぽつりぽつりと「このクエリが重いよね」「ハッシュ化処理、やめる?」とチームのメンバーと相談を交わすささやきも聞こえてきます。

 

04_ああでもない.png

05_こうでもない.png

 

競技全体の運営を支援する事務局により、ランチには、ロケ弁ナンバーワンとも言われる喜山飯店のお弁当が用意されました。しかしお昼時は、徐々にスコアが伸びて1万点台に乗り始めるタイミングということもあり、食事そっちのけで作業に取り組むチームの方が多数派です。お弁当に少し箸を付けては再び画面に集中する参加者が多いのも、社内ISUCON恒例の光景です。

 

07_お弁当よりディスプレイ.png

 

午後に入ると徐々にスコアに差が生じてきて、ため息をついたり、頭を抱える参加者も増えてきます。「動いてるはずなのに、こいつが落ちる原因がわからないんだけど……」「ローカルベンチマークの結果が、なんで期待値と違うんだろ」といった苦しいコメントが漏れ聞こえ始めるのもこの頃です。また、なぜか突然「TypeScriptが恋しいよー」というぼやきが聞こえてきたり、何とか高速化させようとChatGPTにいい感じのパラメータを作成させようとする姿もありました。

 

08_ラストスパート.png

 

さらに競技終了時間が近づくと、「泣きの一回!」とギリギリまでチャレンジする姿があちこちで見られました。中には、「これでどうだ!」とベンチマークを回したらスコアが0になってしまい、苦笑するチームもありました。

 

平日の開催ということもあり、外せない業務の関係で途中参加になったり、Web会議を挟まざるを得ない参加者もあったようですが、それぞれの制約の中で全力を尽くす一日となりました。また、リモートワークが「当たり前」となったことを反映してか、ハイブリッド体制でコンテストに臨み、顔が見えなくてもその場にいるかのようにコミュニケーションを交わし、自然に一つのチームとして取り組む姿が多かったことも印象的でした。

 

新人チームが二位入賞の快挙、秘訣は「基本に忠実に」

クラウドネイティブを一つのテーマに、「初心者でも参加しやすく、本当のプロダクト開発に近い形で」という意図で作問された今回の社内ISUCON。「インフラ面でチャレンジングな取り組みがあったため、アプリケーションは逆にオーソドックスな作りとし、とっつきやすく、初心者でも解きやすい形にしようという意図で作成しました」(浅野さん)

 

事実参加者らも「ようやく社内ISUCONもクラウド時代に入ったと感じた」、そして「最初の一歩が入りやすかった」と感想を述べており、作問チームの狙いは十分に達成されたようです。

ただ、AWS上に環境を構築した都合上、デプロイにどうしても時間がかかってしまう点が競技上のネックとなりました。「競技体験をよりよくするために、ローカル環境で実行できる簡易版ベンチマークを提供しました。こういった細かなところにこだわりながら、とても楽しく作問できました」(朏島一樹さん)

 

09_作問チーム.png

 

そんな工夫を凝らした競技の結果、11チームが表彰されました。以前はスコア順に1位から5位までが表彰の対象となっていましたが、それらに加え、Go、Java、Node.jsという言語別に最上位のスコアを記録したチームを表彰。さらに、新卒・インターン生の7チームのうち最も優秀な成績を残したチームと、最速で1万点に到達したチーム、そして最も多くベンチマークを実行したチームにも賞品が贈られました。

 

各賞の受賞チームは、画像の通りです。

 

 

目を見張ったのは、社内ISUCON常連の2チームに挟まれる形で、新人チームの「バサシタベタイ」が見事二位に入賞したことでしょう。

 

バサシタベタイの川西晶大さんは、「経験豊富な人にしかできないであろうイニシャライズの最適化といったトリッキーな手法は採らず、N+1をつぶしたり、きちんとPerformance Insightsなどで計測してインデックスを張っていくといった手を打ち、とにかく基本に忠実に、本家ISUCONのセオリー通りに取り組むことを意識していました」と振り返りました。

 

実は川西さんは、毎年和歌山県で開催されている「サイバー犯罪に関する白浜シンポジウム」で併催される「情報危機管理コンテスト」の経験者です。コンテストに向け、自分の手で検証環境を構築していろいろ試した経験が今回も役に立ったし、インフラ基盤の管理という普段の業務にも活かされているといいます。

 

12_バサシタベタイ.png

 

三位の「前日は早く寝る」も、優勝した「isucon_friends」も同様に、N+1問題をつぶし、インデックスを張っていく基本的な戦略を取ったのはもちろんですが、プラスアルファで高度なチューニングにも取り組んでいました。注目したポイントは同じです。カンマ区切りのCSV形式で記されていたタグ(tags)に対するクエリを高速化するため、別テーブルに取り出した上で、最適化するインデックスを張る、という方法を探っていたそうです。

 

ここは作問チーム側としても、あえて「王道」のない問題として用意した部分だったそうです。「いくつか手段は考えられるのですが、効果的なものを探るのは難しいと思います」(朏島さん)

 

「効果は薄いけれど、もっと手軽な解き方もあります。そんな中で、この部分にどれだけ時間をかけるかが問われます」(砂川辰徳さん)。こうした非定型な部分にどう優先順位を付け、どのくらいの時間や労力を割いて取り組むかが、トータルの問題解決力を左右するのかもしれません。

 

 

ところで、上位入賞チームは異口同音に「基本に忠実にやっただけ」と振り返っていますが、会場を見る限り、他の参加チームも同様に、基本に忠実に問題に取り組もうとしていました。では、何がスコアの差を生んだのでしょうか。

 

「トラブルシューティング能力と、経験からくる正確な打ち手。つまり、ミスを踏みづらいアプローチをいかに取るかだと思います」と、isucon_friendsの與那城有さんは述べています。

 

プログラムのどこか一箇所に手を入れると、想定通りに性能が伸びるどころか、別のトラブルが発生し、そのシューティングに時間を要してしまうことは珍しくありません。社内ISUCONのスコアボードにもそれは如実に表れており、せっかくハイスコアを叩き出したのに、次のベンチマークではスコアが急減してしまうチームがいくつもありました。そのようなときにものを言うのは、やはり問題解決能力だといいます。

 

14_ハイスコアの後に急落.png

 

 

「原因をいかに見つけるかに加え、それに手を打ったとして、もしだめだったときにロールバックできるような仕組をちゃんと考えておく、というのがポイントかもしれませんね」(古川陽介さん)。それも、一人だけの頭で考えるのではなく、率直に指摘し合えるバディがすぐ横に座り、互いに意見を交換しながら進めていくことが、ポイントにつながったのではないかと振り返りました。

 

 

13_isuconfriends.png

 

今回の問題のようにオーソドックスな作りであれば、虎の巻を見ながら、ある一定程度のところまで、いい感じにスコアを高めることは誰でも可能かもしれません。しかし「ある程度のところからもっと上に行こうとすると、それだけでは足りず、いろいろと細かなところを見に行かなければなりません。今回の社内ISUCONがそのことに気づける機会になっていればとも思います」(浅野さん)

 

懇親会で広がる仲間の輪、新たな取り組みの萌芽も

社内ISUCONにはもう一つ、大きな機能があります。普段の業務ではなかなか顔を合わせることのない別部署、別事業の社員と知り合うチャンスを提供することです。

 

「必ずしも、仕事でいつも一緒のメンバーでチームを組んでいるわけではありません。普段は一緒に仕事をしていないけれど、同期でチームを組んだり、斜めのラインでチームを組んだりして参加してもらい、コミュニケーションしてもらう機会が提供できていると思います」(佐久間大空さん)

 

事実、競技を終えた後の懇親会では、そんな会話の輪がいくつもできていました。感想戦の流れで話が広がり、「前日は早く寝る」のkyontanさんが、Datadog APMを用いて「どの処理が裏で何を呼び出しており、どのくらい時間がかかるか」を可視化する方法について説明し始めると、別の領域のメンバーが質問を投げかけて知見を交換していたり、インターン生や新人を囲んで大きな人の輪ができるといった具合です。

 

15_情報交換.png

 

ISUCON自体は「難しかったけれど、楽しかった」というインターン生。さらに懇親会の雰囲気に触れ、「エンジニアが率先して発言する文化、事業を創っていこうという文化があるように感じます」と述べています。

 

こうしたさまざまな学びと楽しみが得られる社内ISUCONを経験し、新たなチャレンジを規格する若手も生まれ始めているようです。

 

今回、「10,000点到達スピード賞」を受賞した「ベースブレッ党」の大江皐生さんは、毎回、会心のチューニングに「よっしゃー!」と声を上げるなど、心から楽しげに社内ISUCONに参加してきました。そんな経験を経て「今、部内で性能を考える会を開催しています。ISUCONとはちょっと違い半年ほどかけてパフォーマンスを競う会で、作問する側の楽しみも味わい始めています」といいます。

 

17_真剣に楽しむ.png

 

もちろん社内ISUCONにもチャレンジを続けていくそうです。今回、ベースブレッ党は「OES老人会」に30秒遅れを取り、てっきり賞を逃したものと思いきや、繰り上げ受賞となったこともあって、「来年もリベンジしたいと楽しみにしています」と言います。さて、次回はどんな「わくわく」に出会えるでしょうか。

 

18_おつかれさまでした.png

 

脚注

1.
ISUCON」は、LINEヤフー株式会社の商標または登録商標です。