“社内ISUCON”がエンジニアにもたらすもの
リクルートテクノロジーズ&ウォンテッドリーが語る、魅力と効果

Webアプリのチューニングバトル「(社内)ISUCON」の魅力と楽しさ #2/2

Developers Summit 2019
に開催

翔泳社が主催するソフトウェア開発者向けITカンファレンス「Developers Summit 2019」が2月14日~15日に開催されました。パネルディスカッション「Webアプリのチューニングバトル「(社内)ISUCON」の魅力と楽しさ」に登壇したのは、LINE株式会社の櫛井優介氏、リクルートテクノロジーズの古川陽介氏、Wantedly, Inc.の南直氏の3名。5,000名ものエンジニアが参加するISUCONの歴史と、社内でISUCONをはじめた2社における取り組みの知見を語ります。後半パートとなる今回は、リクルートテクノロジーズ古川氏が、社内ISUCON「R-ISUCON」がもたらしたものについて紹介。ウォンテッドリーの南氏は、新卒研修で実施している社内ISUCONの取り組みについて語りました。講演資料はこちら。古川氏南氏

提供:株式会社リクルートテクノロジーズ

R-ISUCONからの派生イベントも

古川陽介氏(以下、古川):R-ISUCONを実際やってみて、その後どうなってきたかというお話をしようと思います。たとえば、こういったハッカソンやコンテスト系のバラエティが増えてきた、ということがあります。

どういうことかというと、1つは「スピードハッカソン」というものをやっていまして。

R-ISUCONやISUCONは仮想のサービスです。なので、仮想のサービスじゃなくて、実際のページをもとに、フロントエンドだけでどこまで高速化できるかということを競うハッカソンをやっています。

これは実際には「Lighthouse」と呼ばれるGoogleが作ってるパフォーマンスメトリクスツールを使っています。これは仮想ではなく、実際のサービスのページを改善させるところが大きいです。

ただ、実際のサービスではもちろん制約も多いので、やれないことも多いです。例えば「CSSをminifyしたいけど、どこで誰が使っているかわからないから消せないかもしれない」みたいなことは、もちろんあるんです。ただ、そういうことをいったん度外視して、外した状態でどこまで軽くなるか。もちろん実際のサービスに入れようとすると障害があるのは確かだけど、そこまで外した状態でどこまでやれるかを体験させてあげようと思っています。これによって、最終ゴールを見据えた状態で改善活動ができるのがメリットの1つだと思っています。

これは単純にダイエットと同じですね。

ダイエットも、実際に1回自分が痩せている姿を想像した状態で始めたほうが、今の自分との乖離を想像するよりいいはずなんですよね。「でも、そんなに痩せられないし」って思わなくてもいいはずなので、自分の理想とする姿を想像できるはずということですね。

実際これをやった結果、バイトの検索アプリや賃貸物件の検索アプリなどで効果が出ています。

ほかにも「PIGICON」というものもあります。

PIGICONは「Programming and Intelligence: Greatest Improvement CONtest」の略で、機械学習×ISUCONですね。応答性能と学習精度の両方を競うコンテスト「PIGICON」は、リクルートコミュニケーションズが開催しています。

最初の問題はAkinatorを基にした問題でした。ユーザーがサーバに対して質問し、その内容を基にユーザーが考えてるものを推測するというアプリです。

質問回数が少なければ少ないほどスコアが高くなりますが、間違いを直すには問い合わせする回数が多くなります。つまり、質問回数が少なくて、応答性能が高くて、精度の高いものが求められますが、精度を高くしようとすればするほど問い合わせの回数が多くなるし、応答性能を上げようとすればするほど、学習や計算に時間をかけられないので、今度は回答の精度が悪くなってしまいます。

そんな「三すくみ」みたいな状態になっていて、すごく難しくて、めちゃめちゃおもしろかったです。

「IMOCON」は今後開催予定です。

これは「Iikanjini MOdel Contest」の略です。これはどちらかというと、PIGICONのように性能を競うのではなく、Kaggleのように機械学習の精度のみを競うコンテストですね。このような感じでいろいろ増えてきています。

リクルート全体ではみんなに学んで欲しいことはコンテスト形式にして、「〇〇CON」という枠組みをちゃんと作って開催する流れが増えてきました。結果として、いろいろな競技が増えて、みんな一層競技するようになってきたなと思っています。

ISUCONという題材は最初は性能チューニングだけだったのに、機械学習などの新しい分野にどんどん進出してきたところがすごくよかったと思っています。ですので、これを応用すれば、セキュリティやテストをうまく書くなど別の分野にも進出できるのではないかと思います。

こういうことを自発的にやりたいとみんなが言うようになったところがよかったと思います。僕の言葉で言うと、自発的に学習していく組織になってきたと思っています。

さらに、スピードハッカソンのように実際のアプリケーションにも適用して、それで成果も出ているところもよいと思っています。実際のアプリケーションにも活かせて、そこで実際のアプリケーションの応答性能が上がってきているのも、成果としてすごくよかったと思っています。

R-ISUCONがもたらしたもの

古川:最後にまとめです。

ISUCONにならってコンテスト用のアプリを作って、リクルートならではの問題を入れて、これを「R-ISUCON」と名付けました。

結果として、全体のパフォーマンスに関する意識が上がる、それとともにパフォーマンス改善の知見をみんなで共有することができました。パフォーマンスチューニングっておもしろいことなんだとみんなが共有できたのは、大きいと思っています。

さらに、R-ISUCONをやってみて、そのあとコンテストがリクルート全体で増えて、これも良い傾向だと思います。スピードハッカソンやPIGICON、IMOCONなどですね。

さらに言うと、実際のアプリでも効果を出すことができました。もしかしたらこの結果を、後ほどたぶんブログなどで公開する機会もあるかもしれないので、そのときまた詳細に話そうと思います。

なので、こんなかたちでISUCONを使ってわりといい感じのことができました。なので、リクルートテクノロジーズでは、いろんなコンテストを経験して、自発的に学習していく仲間をぼsy……以下略です。ありがとうございました。

(会場拍手)

新卒研修で行うISUCONの魅力

司会者:古川様、ありがとうございました。続いて、ウォンテッドリー株式会社、南直様よりご講演いただきます。よろしくお願いいたします。

南直氏(以下、南):よろしくお願いします。Wantedlyの南です。今日は「新卒研修で行うISUCONの魅力」というタイトルで発表させていただきます。

簡単に最初に自己紹介をさせてください。

南直といいます。Wantedlyでインフラストラクチャエンジニアとして働いています。

弊社のインフラエンジニアは、大きく分けて2つの役割があります。1つがSREとしての役割。こちらではサービスの信頼性に責任を持っています。もう1つは開発基盤としての役割でして、こちらはエンジニアの生産性に責任を持って、社内のツールなどの基盤を整えるということをやっています。

ISUCONとの関わりについては、過去に何回か出場しておりまして、本戦に出場したこともあります。ただ、まだ優勝はできていないので、今年もISUCONにまた出てがんばりたいなと思っています。

今日お話しする内容です。

Wantedlyの新卒研修で社内ISUCONをしているので、そのお話をしたと思っています。櫛井さんから本家ISUCONのお話があったり、古川さんからリクルートさんでの社内ISUCONの話とかがあったと思いますが、自分はどちらかというと新卒研修にフォーカスしてお話をしたいと考えています。

アジェンダはこちらです。

まずはじめに「なぜ新卒研修で社内ISUCONを行うのか?」についてお話しいたします。次に、この社内ISUCONを我々は「新卒ISUCON」と呼んでいますが、この「新卒ISUCON」の運営方法についてご紹介いたします。そして最後に、実際に新卒ISUCONを行った結果、どんな効果があったのか、どういったフィードバックが得られたのか、そういったお話をします。

新卒研修で社内ISUCONを行う理由

:では、まず「なぜ新卒研修で社内ISUCONを行うのか?」について。

そもそも「新卒研修とは何なのか?」ということについてお話しさせていただきます。我々は「新卒エンジニアが『会社側が期待するエンジニア像』に近づくための学び場」と考えています。

新卒で入ってくるエンジニアというと、それぞれ得意なものや不得意なものがあって、いろいろな特徴があって入ってくるのですが、会社が期待するエンジニア像……会社で、とくに弊社の中で活躍できるようなエンジニア像というと、やはり最初はギャップがあるなと思っております。そこを新卒研修で埋める。彼らに成長してもらって、もっと早く会社の中で活躍してもらう。そのために新卒研修があると捉えています。

会社が期待するエンジニア像とは何なのか。これはこの2つの要素を持っていることだと考えています。

1つが、プロダクトで価値を届けるために、技術を使うということ。もう1つが、必要であればあらゆる技術に挑戦して、もっとできることを広げて成長していく。そういった姿勢を持ってもらうことです。

では、「それに近づくためにはどんな新卒研修がよいのか?」なんですが、これは2つの要素があると思っています。1つが、プロダクトに価値を与える技術を学ぶ機会となること。もう1つが、技術的に広い領域に触れる経験をとれるということ。

プロダクトに価値を与える技術というものを考えてみたいと思います。これはいくつかあると思っていまして、例えば、リッチなUIが作れるといった部分であったり、あるいは数字を分析して、それを使ってプロダクトの次のアイデアを考えられるだとか、いろいろあると思っていますが、高速化技術もその1つだと思っています。

例えば、こちらは過去にいろいろな会社が調査したデータなんですが、Googleさんは、500msレスポンスタイムが変わることで20パーセント検索量が変わるということを発表しています。またAmazonさんも、100msレスポンスタイムが変わることで1パーセント売上が変わるというレポートを出しています。

弊社でも同じようなデータを持っておりまして、30パーセントレスポンスタイムが変わることで、10パーセント応募数が変わります。この応募数は、ユーザーが弊社のサービス上でいろいろな会社の募集を見て、話を聞きに行きたいと思ってクリックした数なんですが、それが10パーセントも変わることがわかっています。このように、プロダクトにとって高速なレスポンスは極めて重要なものとわかります。

ということは、新卒研修で求めるものを言い換えればこの2つになります。

高速化技術を学ぶ機会となること。また、技術的に広い領域に触れる経験となることだと考えています。そして、この2つを得られるものがISUCONなわけです。

高速化技術を学ぶことができる

:ということで、このISUCONで得られるものについて、もう少し掘り下げたいと思います。

1つ目、高速化技術を学ぶ機会となることについて。

高速化技術についてなんですが、先ほどもお話ししましたとおり、これはとても重要です。しかし、一般にそれを学ぶのは大変です。

これが大変な理由を少し書き出してみました。

例えば「学ばなければいけない知識が多い」というものがあると思っています。高速化しようと思うと、どうしてもアプリケーションからインフラまで幅広い知識が求められます。そういったものを身につければちゃんと高速化する、という経験ができればいいんですが、そういったフィードバックなしで、モチベーションを保って学ぶのはなかなか難しいのではないかと思います。

あとは、高速化のプロセスを実践できる機会が少ないのも問題だと感じています。ボトルネックを発見して改善するというプロセスは手を動かして学びたいですが、そういったものを仕事の一環で業務コードに対してやろうとすると、複雑すぎてなかなか初学者の実践には向いていません。

一方、ISUCONはこれらの問題を解決しています。例えば、これはISUCONのよいところを挙げてみたんですが、まず「スコアを競うので高いモチベーションが保てる」という部分があると思います。

ISUCONに出ていると、やはり「スコアを伸ばそう」「伸ばしたい」とものすごく感じて、スコアを伸ばすために幅広い知識を身につけるモチベーションが湧きます。また、学んだことを実際に試すとちゃんとスコアが伸びるので、それが楽しくてますます学習しようと思える。そういった部分もあるかなと思います。

また、高速化のプロセスを実践できるのもよい部分です。ボトルネックを発見して改善するというプロセスをコードベースで体験できます。それがとてもよい部分です。

また、高速化の知見が資産として残っているのも大きいです。ISUCONはこれまで長く開催してきたので、どんなアプローチを取ると高速化できるという知見が、講演資料やブログなどいろいろなかたちで残っています。そういったものを教材として学ぶことができます。

まとめますと、ISUCONは高速化技術を学ぶのに最適な題材だと考えています。これがISUCONが新卒研修として良いと思う1つ目の理由です。

自分に不足している技術を学べる

:2つ目が、技術的に広い領域に触れる経験となること。大前提として、先ほど申し上げましたとおり、Webサービスの高速化には幅広い技術が必要となります。

そのうちの一部を例として挙げてみました。例えば、Webアプリケーションを書く能力が求められます。この中では、HTTP・HTML・JavaScript、CSSといったWebの知識が入ってきますし、プログラミング言語、Webアプリケーションフレームワークといった知識も求められます。

また、各種ミドルウェア、OSの知識も必要になります。ApacheやNginxのようなWebサーバ、PostgreSQLやMySQLのようなRDB、RedisのようなKVS、LinuxのようなOS、それらの内部動作を理解して、かつ、それらをどう設定すれば効率よく動かせるのか、どんな設定をすればパフォーマンスを出せるのか。そういったことを知っている必要があります。

また、高速化は基本的にボトルネックを見つけてそれを潰して改善するというサイクルになるので、ボトルネックを見つけるためのモニタリングもとても重要です。そのために、例えばtopやvmstat、netdataといったモニタリングツールの知識も必要になりますし、OSが返すメトリクスがどういったことを表しているのかも知っている必要があります。そのほかにも、高速化にはあらゆる技術が必要になってきます。

これらをすべて知っている完璧な新卒エンジニアはいないと思うので、言い換えますと、新卒ISUCONが自分に足りない部分を補う機会になると考えています。

こちらは、実際に弊社で新卒ISUCONをしていて、その新卒エンジニアが「こういった体験をした」という例を挙げてみました。

例えば、インターン・アルバイトを長くやっていてWebアプリケーションの開発経験が豊富なエンジニアがいましたが、彼はインフラ領域に慣れていませんでした。彼はOS・ミドルウェア・モニタリングツールなどのインフラ知識を新卒ISUCONで身につけてくれました。

また、コンパイラに詳しいけれどもWeb開発経験がないエンジニアもいまして、彼はWebアプリケーションに必要な技術スタックを新卒ISUCONで身につけてくれました。このように、新卒ISUCONが技術的に広い領域に触れる機会になってくれると考えています。

新卒ISUCONの運営方法

:ここまで「なぜISUCONが新卒研修としてとてもよいか?」というお話をしてきました。では、実際に新卒ISUCONをどのように運営したのかについてお話しします。

基本的に、問題と環境があれば、新卒ISUCONは開催できます。

問題と環境というのは、まず問題はISUCONとして高速化すべき問題のことを指しています。これはWebアプリケーションとそれに対するベンチマーカーから構成されています。

次に環境ですが、これは問題以外のさまざまな要素を指しています。例えば、問題がセットアップされたサーバーであったり、各チームの競技中にスコアを出しているんですが、そのスコアが一覧で見れるスコアボードであったりとか、あるいは競技を行う上での会場なんかを指しています。

では、まずこの問題をどう用意したかについてですが、こちらは公開された問題を利用させていただきました。

2017年の新卒ISUCONではピクシブさんの社内ISUCONの問題を利用させていただいて、2018年の新卒ISUCONではscoutyさんのISUCON勉強会の問題を利用させていただきました。

その際に、本家ISUCONの過去問はあえて利用しませんでした。というのは、基本的には研修の一環としてやっておりまして、「サイズが小さくて、オーソドックスで、基本的なことをやると高速化ができる問題を利用したい」というモチベーションがありました。

また、こちらのほうがむしろ理由としては大きいんですが、すでに何人かは過去問を解いている人がいたので、彼らが不当に有利になってしまわないようにという配慮から、過去問は避けるようにしました。

このように、我々は公開された問題、作成者の方々やコミュニティの方々など、そういった方の恩恵にあずかるようなかたちになっていて、本当にありがたいなと思っています。

新卒ISUCONの運営環境

:次に環境についてです。環境については、こういった構成でやっております。

まずサーバは、AWS EC2 instance上に問題をセットアップするようにしました。こちらは、運営側が事前にセットアップを行い、競技に参加するメンバーに配るようにしています。こちらは本家ISUCONさんに近いかたちかなと思っております。

また、スコアボードはiwashiさんという方が作成したものを公開されていたので、そちらをforkして利用させていただきました。

こちらはバックエンドがFirebaseになっていまして、そこにデータをポストするだけで、ブラウザ上からスコアを見られるといったかたちになっています。セットアップが簡単で使いやすくて、すごくよくできた実装だったので利用させていただいています。こちらもありがたいです。

会場は、弊社オフィスのミーティングルームを用意いたしました。とくに競技中は、各チームが集中して問題に取り組みたいだろうということで、チームごとに小さなミーティングルームを占有するかたちで共有を行いました。

実際に競技中の様子も簡単にお見せしたいと思います。

去年の新卒エンジニアがこちらで一同に会して写っていますが、最初に新卒ISUCONを開催するにあたってのルール説明やレギュレーションの説明の様子です。ちなみに右端にCTOも写っていて、彼も参加しています。

これは実際に競技をしている様子ですね。2人でチームを組んで高速化をやってもらっています。

こちらはスコアボードの様子になります。各時点でどのチームがどのぐらいのスコアかリアルタイムで見えるようにしていまして、それをずっと追いかけながらお互い競技するみたいな感じになっています。その際は、本家ISUCONさんを参考にして、最後の1時間はスコアを隠して、どのチームが勝つのか最後までわからないということもやってみました。

運営における工夫

:そのほかにもいくつか運営上の工夫をしたので、そのあたりのご紹介もしたいと思います。

例えばチームメンバーについてですが、こちらは2人にしています。というのも、本家ISUCONさんは3人なんですが、そうではなく2人にしています。本家ISUCONさんよりも1人の担当範囲を広くしたいという意図から、こうしています。

基本的に、これは研修の一環として「できるだけ学びを多くする」ということを目的にやっているので、やったことのない不得意な領域に挑戦する機会が生まれやすいだろうということで、こうしています。その代わり、問題はちょっと難易度を落としています。

また、チーム分けについてですが、こちらは運営側で決定をしました。これは、自由に組ませてしまうとどうしてもISUCONに慣れた人同士で組んで、彼らの慣れた役割をやって、高得点になってしまいます。

そうではなく、こちらで決定をしてチーム力のバランスを取って、さらに慣れた人と不慣れな人のペアをできるだけ作るようにして、不慣れな人が相方から学ぶことができるようにしました。また、その際は事前にアンケートを取りまして、実装言語などはすり合わせるようにしました。

また、感想戦も行うことで、各チームがどういったアプローチを取ったかをお互いに共有して、学びの機会を作るようにしました。これもとても大事なステップだったと思っています。

新卒ISUCONを行った結果

:新卒ISUCONを行った結果について、ご紹介いたします。

端的に言いますと、学びの多いすごくよい研修になったかなと思っています。まず、新卒ISUCONに求めるものについてご紹介しましたが、それらはちゃんと達成してくれたと思います。

まず1つ目は、高速化技術をモチベーション高く学んでくれました。新卒のメンバーに新卒ISUCONを開催すると告知をするのですが、そのタイミングからISUCONに向けて事前学習をがんばって行ってくれました。

また、ISUCONを開催したあとで、そのあともいろいろなアプローチを試せるようにということでインスタンスを残しておいたところ、それを復習に活用してもっと学びを深めてくれました。

また、技術的に広い領域に触れてくれたと思っています。例えば、アプリケーションエンジニアだけれどもインフラ担当に挑戦する人がいたり、あるいはRustを利用したWebアプリケーション開発に挑戦してくれた人もいました。

とくに後者については、世の中的にもまだまだ知見がたまっていない領域だと思っています。どういったライブラリがよいのか、どういった技術スタックがよいのか、そういったことを事前に調べて、実際に実装しきるということをやってくれました。

これは実際に後の開発にも活かされています。ここで学んだことをベースに、本番で動くRustサーバもできたりしていたので、すごくよかったと思っています。

他にも、予想していなかったうれしい効果もいくつかありました。

1つは、同期同士のコミュニケーションがすごく活発化したことです。「この新卒ISUCONで学習や競技を通じて長い時間を一緒に過ごして、同期の絆が深まった」と感想をもらいました。

また、感想戦でチームごとにアプローチの紹介をしますので、それを通して「誰が何が得意なのか」というメンバーへの理解も進む、というフィードバックももらっています。

また、楽しい研修だと思ってもらえたのもよかった点です。こちらもフィードバックでもらった話なんですが、新卒研修では座学もあったりして、そういったものはどうしても間延びしてしまいがちです。一方、手を動かすISUCONはものすごく楽しかったと聞いています。

まとめると、楽しく学べる研修になったのかなと思っています。

今後の取り組み

:最後に今後の取り組みについてご紹介をしたいと思います。新卒ISUCONはものすごくよい取り組みだと思ったので、今後も続けていく予定です。ただし、取り組み自体の改善はまだまだ行いたいと思っています。

改善のアイデアをいくつか考えています。

例えば、「チームごとに競技中にメンターをつける」みたいなことをやってみても、おもしろいのかなと思っています。

こちらはフィードバックでもらった意見なんですけれども、競技をしていて手が止まってしまったり詰まってしまったときに、自分より優秀な人のアプローチを知りたいとか、その人だったらどんなことをしているのか、どうやって打開するのかなど、そういったことを学びたいという話がありましたので、メンターをつけることで解決できるのかなと思っています。

あと、「ISUCON 秘伝のタレ共有会」みたいなものも実施してみると、おもしろいのではないかと考えています。弊社のエンジニアのなかにはISUCONに出ている人が何人もいるので、彼らがどういったことを考えてISUCONに臨んでいるのかであったり、ISUCONに出るときにどんな設定を使っているのかという知見も持っているので、それらをお互い共有して、新卒エンジニアにも伝えて、それで学んでもらうということもできるかなと思っています。

あとは、事前講習と感想戦のボリュームをもっと増やすのもよいかなと思っています。

これは弊社内での改善のアイデアなんですが、企業横断で新卒ISUCONを盛り上げる取り組みもできるとうれしいなと思っています。こちらはまだまだアイデア段階なんですが、例えば、問題作成を持ち回りでやって、それを各社で実際に使って、フィードバックを集めて……ということをグルグル回すということができると、おもしろいかなと思っています。

まとめです。

新卒ISUCONは、すばらしい研修になると思います。それは高速化技術をモチベーション高く学ぶことができますし、技術的に広い領域に触れる機会になるからです。

これについては、今後も改善を続けて、より良い新卒ISUCONにしていきたいと考えております。その際は、弊社の取り組みの自体の改善と、企業横断での新卒ISUCONの改善を、両方できるとうれしいなと思っています。

ありがとうございました。

(会場拍手)

Occurred on , Published at

Developers Summit

Developers Summitに関する記事をまとめています。コミュニティをフォローすることで、Developers Summitに関する新着記事が公開された際に、通知を受け取ることができます。

このログの連載記事

1 Webアプリチューニングバトル「ISUCON」の歴史と、企業における“社内ISUCON”のはじめかた
2 “社内ISUCON”がエンジニアにもたらすもの リクルートテクノロジーズ&ウォンテッドリーが語る、魅力と効果

スピーカーをフォロー

関連タグ

人気ログ

人気スピーカー

人気コミュニティ

ピックアップ

編集部のオススメ

ログミーTechをフォローして最新情報をチェックしよう!

人気ログ

人気スピーカー

人気コミュニティ

ピックアップ

編集部のオススメ

そのイベント、ログしないなんて
もったいない!
苦労して企画や集客したイベント「その場限り」になっていませんか?