リクルート メンバーズブログ  エンジニア約100人が大集合し、チューニングバトルを展開  久々のリアル開催で絆も深まった「株式会社リクルート 社内ISUCON 2023」

エンジニア約100人が大集合し、チューニングバトルを展開  久々のリアル開催で絆も深まった「株式会社リクルート 社内ISUCON 2023」

「久しぶり! 今、何してるの?」
「うわー、やっと会えたね。はじめまして」

——2023年8月31日、「株式会社リクルート 社内ISUCON 2023」が開催されたリクルート本社の最上階の会場であるアカデミーホールでは、そんな会話が飛び交いました。

社内ISUCONは、Webサービスのチューニングバトル「ISUCON※」に触発され、リクルートグループ横断で行われているイベントです。1〜3名でチームを組み、コンテスト形式で、Webサービスの高速化に取り組みます。競うことでフロントエンドやデータベース、クラウドといったWebサービスを支える技術の学びを加速させるとともに、部署や世代の壁を越えて社内エンジニアの交流を図ることを目的にしています。
※「ISUCON」は、LINEヤフー株式会社の商標または登録商標です

国内のエンジニアや学生が参加するISUCONは今年で13回目を数えますが、リクルートの社内ISUCONも負けず劣らず、数えて8回目の開催となりました。「社内でこれだけ継続的にISUCONを開催しているところは珍しいと思います」(出題者の古川陽介さん)

「せっかくのオフライン開催、ぜひ楽しんでください」と呼びかけた古川さん

過去2年は、新型コロナウイルスの影響を受けてオンライン開催が続き、少し物足りない思いをしていた人もいたようです。久々のオフライン開催となった今回は、全40チーム、110名という過去最多の参加者が集まり、中には新卒で入社したばかりの社員やインターン生によるチームもありました。

アカデミーホールがほぼ満席になるほどの参加者が集まった社内ISUCON

参加者が会場に続々と集まり、アカデミーホールはほぼ満員になりました。新人チームが「俺たち、最強じゃね?」と盛り上がる横で、中堅どころのエンジニアチームが「あいつらには負けない」と張り合ったり、互いに「何使うの?」と手の内を探り合ったりするなど、部屋はリアル開催ならではの賑やかさに包まれました。

本家ISUCONのTシャツでプレッシャーをかけるベテラン組

●ワイワイガヤガヤ、オフライン開催ならではの楽しさにあふれた 株式会社リクルート 社内ISUCON 2023

社内ISUCONは本家ISUCON同様、決められたレギュレーションの中でお題として与えられたWebサービスを最適化し、どれだけ高速化できるかを競います。また、いくら高いスコアを記録したとしても、最後の再起動試験をパスしなければ認められません。

お題は例年、リクルートグループ「あるある」の問題が取り上げられてきましたが、今年のWeb業界では、旧TwitterからXへの移行があり、この余波で移住先を求めるユーザーを吸収すべくさまざまなSNSが立ち上がるという大きな変化がありました。このビッグウェーブに乗るしかない——ということで、Twitter風味のSNSがお題となりました。

無刻印HHKBで尊師スタイル

SNSでは、プロンプトに投稿すると、その内容がタイムラインに反映される仕組みです。ただ、近年増加しているSNSの炎上を抑えるため、運営が定める特定の単語、いわゆる「NGワード」は投稿できません。また、エコーチェンバー現象を防ぐため、フォローしていないユーザーの投稿が表示される機能を備えている、新しいSNSとなります。このためユーザー登録やフォロー、ツイート成功、NGワードの検出などを適切に処理できればポイントが加算されます。そして、過去の社内ISUCONとは異なり、減点項目は設置されていません。

問題や競技ルールが一通り説明されると、会場内に用意されたディスプレイを使ってセッティングを始めるチームもあれば、あらかじめ予約していた会議室に籠もるチームもあるといった具合に、思い思いに準備を進めました。

そして9時半、競技がスタート。時折真剣に意見を交わしたり、相談する声が漏れ聞こえることもありましたが、どのチームももくもくと作業に取り組みはじめました。

ISUCONの基本は計測から

ISUCONの基本は、アプリケーションの動作を理解し、パフォーマンスを測定し、ボトルネックを特定してそこを潰していく……という作業の繰り返しです。
重たいファイルやスロークエリを見つけ出し、適切に対処していくという地道な作業が得点に反映されていきます。

社内ISUCONの参加者もまずはログを収集し、Netdataやpprofなどの計測ツールやtopコマンドを駆使しながら、どこに時間がかかっているかを見極め、クエリの解析やNginxなどのセッティングの見直しなどを行ってはベンチマークを回し、成果を確認していました。結果を受け、Node.jsか、それともGoか、根本的な方針について真剣に議論を交わすチームもありました。

今回ならではの取り組みと思わされたのが、生成AIの活用です。とあるチーム曰く「あくまで人類の英知を使っているだけです」ということで、複数のチームがGraffer AI Studioを立ち上げ、ソースコードをチェックするという新技を使っていました※。
確かにレギュレーションに使用の可否は明記されていませんでしたね。
※実際の業務では「リクルートAI活用指針」に基づいて行動しています

ここじゃね? そこじゃね?

最初のうちはガヤガヤと喧噪に包まれていた会場ですが、手の動きと反比例して徐々に口数が減っていきます。せっかく豪華なお弁当が用意されたのですが、しっかりお腹に収める参加者がいた一方で、箸を口に運ぶよりもキーボードの方に集中してしまい、食べかけのまま2時、3時まで競技に没頭する人もいたほどです。

お弁当よりキーボード

また、特に午後になると行き詰まりも見えてくるのか、「なんでこのエラーが出てくるんだろう……」「インデックスの貼り方がわからない!」といったうめき声や叫びが聞こえてくるようになります。ただ若手チームの方からは「俺、疲れれば疲れるほど楽しくなるタイプだから……」という頼もしい会話も漏れ聞こえてきました。

また、集中しすぎて疲れてくると、コードの変更反映をミスしたりといった事故も起こりますが、チームメイトをフォローし「大丈夫、ここからここから」と、まさにオリンピックかワールドカップのような声がけをしていたチームがあったり、モブプログラミングに取り組んでいたチームがあったことも印象的です。

さらに、リアル開催ならではの面白さとして、後ろの方で「よっしゃー!」と自己最高スコアを記録したチームが声を上げると、前の方に座っていたチームにざわめきが広がり、慌ててスコアボードを確認する風景も見られました。ただ、トップ争いに参加していたチームは比較的冷静に、レギュレーションに合わせて何をすべきか、優先順位を検討していたことが印象的でした。

やっぱこうじゃね?

●定石だけではスコアを伸ばせない? やや難しいお題を制したのは「boulder」

今回目立ったのが、パソコンの傍らに、いわゆる「ISUCON本」を置いていた参加者の多さです。

本家ISUCONは年々知名度が向上し、申し込みが殺到するため、参加するだけでも一苦労といった状況が続くほど人気となっています。それに伴って、ISUCONの過去問や解法のヒントとなる情報も増え、スコアを伸ばすコツも大分知られるようになってきました。

ただ今回の社内ISUCONは、いわゆるN+1問題やスロークエリといった要素も盛り込まれていましたが、定番の手法だけではなかなかスコアを伸ばすのは困難だったようです。

「今回の問題は、わかりやすいボトルネックがあるというパターンではありませんでした。後付けの部分もありますが、出来たてのSNSで急激にユーザー登録が増え、互いのフォローも盛んに起こっている状態を想定したベンチマークスクリプトになっており、今までとはちょっと違う性格だったため、けっこう難しかったと思います」(古川さん)

インデックスを張ればスコアが伸びる、といったわかりやすいチューニングポイントが少ないため、ISUCON本の最初の方を見ているだけでは、なかなか解にたどり着かなかったようです。

複数のチームがISUCON本や参考書籍を活用していました

また、最近リクルート社内でも使われ始めたGraphQLが使われていることも出題のポイントの一つでした。「パフォーマンスチューニングに関する従来の手法があまり通用せず、やり方が変わってきます。そこにどう対処していくかを見たかったという意図もあります」(古川さん)

最近の社内ISUCONで好成績を残してきたkyontanさんも、GraphQLなどを使っていたためか、「コード的にも直感的ではなく、通常のISUCONに出てくるようなシンプルさとはかけ離れているなと言う印象を持ちました。実装そのものは長くないのですが、ちょっと小手先で手を入れようとしても詰まってしまうコードで、複雑度が高かったです」と述べていました。最後の方は若干手詰まり状態となり、もっと筋のいいアイデアを思いつければよかったな——というのが率直な振り返りだそうです。

今回のお題であるSNSの実装はGo、Node.js、Javaの中から選ぶことができましたが、Goを選択したチームが全体的に高いスコアを残し、上位入賞チームもGo実装が並びました。具体的な結果は、


株式会社リクルート 社内ISUCON 2023 結果

というものでした。

文字通り三人のインターン生で構成したチーム「いんたーんず」は、スコア自体で見れば七位でした。しかし上位にいたチームが再起動に失敗して不合格となったため五位に繰り上げ入賞し、会場にどよめきを呼び起こした一方で、部長クラスで構成されたチーム「Marked & Swept」が二位となり、ベテランの面目を保ちました。

「いんたーんず」の皆さんに話を聞いたところ、普段、研究や開発の一環でクラウドやネットワークなどに触れる機会はあるものの、何とISUCONへの参加は、皆今回が初めて。多少スクリプトなどを用意して競技に臨みましたが、あとは実際に競技が始まってから、どうチューニングしていくかを話し合いながら進め、この成績を残しました。コロナ禍も相まってリアルのイベントが少ない時期が続きましたが、今回の社内ISUCONは大いに楽しめたそうです。そしてリクルートという会社にも「楽しそうに働いている人が多い会社だな」という印象を持っているそうです。

初めてのISUCONながら五位に入賞し、会場をどよめかせた「いんたーんず」

優勝に輝いたのは、一人チームのboulderでした。前回惜しくも二位となったboulderですが、今回も、さまざまな自動化を駆使しつつ、一人で堂々の成績を残しました。boulderの山田祥允さんは練習として過去問を一回解き、Goの実装のカンを取り戻した上で本番に臨んだことで、よく手が動いたと振り返っています。

また、三台のマシンが与えられていた環境にもかかわらず思い切って一台構成にし、すべてをメモリに載せるという割り切った戦略も会場を驚かせていました。
「最初は二台構成を試してデータベースを分けたのですが、思ったほど速くならなかったので、一台だけで構成する戦略にしました」(山田さん)

ただ、戦略は基本に忠実でした。「Profilerを用いて計測を行い、CPU使用率の高いところを順に狙い撃ちしていくことで、コツコツスコアを積み上げていきました」といいます。

「ISUCONは、アプリケーションを直すのがいかに難しいかを再確認する場だと感じています。きちんとテストしながらちょっとずつ改善していかなくてはいけないんだな、ということを思い出させてくれる場だと思っています」(山田さん)

小さい改善を積み重ねることで優勝を果たしたboulder。
ほかにも、一人チームで健闘する方々がいました

●懇親会も早々に延長戦に突入した新人チームも

社内ISUCONでは競技の後に懇親会も設けられ、ほぼ全員が参加しました。
乾杯の前からあちらこちらで話の輪が広がり、競技の振り返りはもちろん、近況報告や他愛のない世間話で盛り上がっていました。

コロナ禍以降、リアルで集まる機会は制限されてきましたが、その間にももちろん、新入社員や新たに転職して入社してきたメンバーがいました。この数年、オンラインでともに仕事をしていたものの、ようやくこの場で「はじめまして」と挨拶できた人もいたようです。

激闘の後は懇親会で互いに労をねぎらい、交流を深めました

ロジスティクスや会場設営をはじめ、運営面で社内ISUCONを支えた山田青来さんは、
「この一年ほどでようやくキックオフミーティングもハイブリッド開催になりましたが、それまでは一切、こうやって集まる場はありませんでした。こうやって集まり、わいわいとコミュニケーションを取るのはやはり楽しいですし、競技を通じて絆も深まっていると思います」と振り返っています。

表彰式が終わった後も、話は尽きずに語り合うグループがある一方で、上位入賞チームの戦略を聞いて早速パソコンを開き、感想戦に取り組みはじめたチームもありました。
しばらくもくもくと画面に向かい、修正するとしっかり数千点分スコアが向上したのを確認して、「そういうことか!」「楽しくなってきたね。次はこっちをやってみる?」と延長戦に突入していました。

懇親会がお開きになった後も話は尽きませんでした

成績に関係なく「新人賞でした」と言えるからと、戦略的に「2023年R-ISUCON新人賞」というチーム名で参加したこのチームは、名前の通り新人エンジニアで結成したチームです。今回の経験を通して、もう少しデータベース周りについても詳しくなればもっと改善できるポイントがあるな、などと、いろいろと学びを得たそうです。

「エンジニアは何らかの課題を解決することが一番重要な仕事です。自分は今、フロントエンドをメインにやっていますが、それに限らずバックエンドについても知識を身につけ、自分の引き出しを増やして、カスタマーやクライアントの課題を解決するための打ち手を届けられるエンジニアを目指したいと思います」(佐久間大空さん)

そして、コンテストはコンテストとして楽しみながらも、「実際のWebアプリケーションを作るにはパフォーマンスだけではなく、セキュリティや可用性、スケーラビリティなど考えなければいけないことが多々あります。本当のプロダクトにおいて、こういった要素をきちんと満たしつつ処理が早いコードを意識して作れたらいいなと思っています」(浦優太さん)

ちなみに、今回上位入賞したチームのいくつかが取った手法の中には、パスワードをハッシュ化して保存される処理を高速化するため、平文で、あるいはより処理コストの低いハッシュ関数を使って保存するといった、一種のダーティハックも見られました。参加者はいずれも、競技環境と割り切ってこうした判断を下していたようですが、今後、より本質的なところでの高速化を競えるようにレギュレーション面も見直していく方針とのことです。

会場で早速感想戦をスタート

●これからも新機軸を取り入れ、進化し続ける社内ISUCON

ISUCONは参加する方も大変ですが、出題者側もハードです。業務の合間を縫って問題を作成し、競技環境を準備していかなくてはなりません。

今回は、それまで既存のものを拡張しながら使ってきたベンチマーカーとポータルサイトを、作問に合わせ、カスタマイズできるように刷新しました。ただ、「最初は若干バグがあり、競技開始後も裏でデバッグをしていたりしました」(川島義隆さん)

また、過去最多の参加者数となったことから、競技環境の準備にもやや時間がかかったそうです。それでも、競技開始直前まで準備に追われることなく、普通にしんどい程度で準備を整え、本戦に臨むことができました。

今は無事に競技が終わり、感想戦も終えて充実感に浸っているところですが、来年に向けての構想もいくつかあるようです。

「まず、GraphQLのような新しい取り組みは、どこかしらに必ず入れたいと思っています」(古川さん)。また、「リアルコストの概念を取り入れ、AWSの環境ごと参加者に渡し、何台でもインスタンスを増やしていいけれどもその稼働にかかるコストもスコアに織り込み、いかに少ない台数で多くの処理をさばけるかを競えたら面白いな、と思っています」(宮地克弥さん)

実現には課金面などいろいろな課題はありますが、たとえばインスタンスを10台並べる「リアル富豪的プログラミング」(與那城有さん)よりも、きちんとチューニングした高速な2台でさばく方が高速でコストも低い、といったモデルを実証できるチームが現れてくれたら非常に面白いと思っているそうです。

また、あくまでコンテストということで、環境をいくらでもいじれるようにし、復旧できない場合はリセットして元に戻せるルールで運用していましたが、
「実際の業務では、気軽にいじって壊してしまいました、では済まないケースがたくさんあります。もう少し慎重にやってもらうため、復旧不可能な環境になったら若干のペナルティを与える位にした方が、より緊張感を持って臨めるかなとも思いました」(宮地さん)

プログラムの高速化それ自体が趣味だという與那城さんは、社内ISUCONを通して手を動かし、高速化に取り組む人が増えてほしいと期待しています。「やはり打席に立ち、手を動かさないことには能力は上がりません。興味を持ったタイミングで、いろんな角度からプログラムの高速化に触れてもらえばと思います」(與那城さん)。もしかするとエンジニアにとっては、毎日がISUCONなのかもしれません。