ISUCONってなに?参加方法や魅力まで語ります!

 2020.06.08  株式会社システムインテグレータ

ISUCONとは、題材として与えられたWebシステムをどれだけ高速化できたかを競うコンテストです。本記事ではISUCONとは何かに始まり、参加方法や魅力までお伝えします!

ISUCONとは何か?

お題となるWebサービスを、決められたレギュレーションの中で限界まで高速化を図るチューニングバトル、それがISUCONです。(公式ブログより)

参加者は、お題として与えられたWebシステムを高速化します。ただそれだけです。

参加者の経歴、勤めている会社がどれだけ大きいか、それらは何の役にも立ちません。単にもっとも高速化できた人やチームが勝ちなのです。

もちろん学生も参加OKです。現に2019年と2018年は学生が優勝しています。

ISUCONはLINEが運営している

ISUCONはLINEが運営しています。2019年のISUCON9(末尾の9は9回目の意味)はさくらインターネットとメルカリが問題作成にあたり、アリババクラウドが実行環境を提供しています。

ちなみにISUCONという名称は「Iikanjini(いい感じに) SpeedUp Contest」の略です。これが仮に関西の企業であれば「ええ感じに」となってESUCONとなっていたかもしれません。

LINEというイマドキの企業が運営し、名前もゆるい感じなのですが、中身はガチなチューニングバトルです。

ISUCONの賞金と、過去の優勝者

ISUCONは、優勝賞金が100万円です!賞金は優勝のみで、その他の賞は何ももらえないようです。

過去にどのような人たちが上位にランクインしているのでしょうか?ISUCON9で見てみましょう。

1位 白金動物園(学生2人組)
2位 nil(なんと高校生1人チーム!)
3位 はしもとせいこ(不明)

ちなみにISUCON8も優勝者は学生チームです。

ISUCONの流れ

ISUCONは予選と本選があり、予選は2日間あります。いずれも朝10:00から18:00までの長丁場です。

予選はオンラインで行われます。予選を通過したチームが本選へと進みます。本選へ進む条件は以下のとおりです。

  • 両日それぞれ上位5チーム、計10チーム
  • 上記を除いて、2日間トータルでスコア上位20チーム

合計30チームが本選へと進みます。

本選は会場に集まり、朝10:00から8時間、昼食や休憩をはさんだ熱い戦いとなります。2019年度の会場はLINE 新宿ミライナタワーでした。

参加資格

基本的に誰でも参加できます。現役エンジニアだけでなく、学生も参加可能です。現にISUCON9の2位は高校生1人チームです。

ただし、運営側としてはできるだけチームで参加してほしいとのことです。

ISUCONの「中身」は?

ここでは、ISUCONのお題について、言語や過去問をざっと見てみましょう。

ISUCONのお題の言語

お題は複数の言語で用意されています。チームが得意な言語を選択できます。言語と選択比率はこんな感じです(公式ブログより)。

Go 261組 49.4%
Ruby 102組 19.3%
Python 65組 12.3%
PHP 54組 10.2%
Node.js 39組 7.4%
Perl 6組 1.1%
Visual Basic 1組 0.2%

Go言語がもっとも選択されています。なぜJavaがないのか不思議ですが。

本選の比率も触れておきましょう。

Go 23組 71.9%
Ruby 5組 15.6%
PHP 2組 6.3%
Python 1組 3.1%
Perl 1組 3.1%

やはりGo言語が多いですね。ちなみにISUCON9の優勝チームはRubyを選択しています。よって、Go言語が多く選択されているからといって、それ以外で優勝できないという訳ではないようです。

お題のソースはGitHubに上がっているので、誰でも見ることができます。
https://github.com/isucon/isucon9-qualify

ISUCON9の過去問(予選)

出題形式やチューニング方針は予選と本選で大きく変わらないので、予選で解説します。

予選のお題は、椅子を売りたい人と買いたい人をつなげるフリマサイト「ISUCARI」でした。

お題のアプリだけで完結せず、決済と配送は外部APIに投げて処理をします。フロント側はReactを使ってSPAで実装されています。

Ubuntu 18.04 LTSをベースに、データベースはMySQL、リバースプロキシはnginx、アプリケーションサーバはGoという構成になっています。

アリババクラウドに3台のサーバを使います。

ISUCON9のチューニング例

では実際にどうすれば高速化できるのでしょうか?

nginxはデフォルト設定のままなので、見直してチューニングします。HTTP/2を有効にするなどが代表的なチューニング例です。

サーバは3台まで使えます。そのうちインターネットからアクセス可能な1台に対して負荷をかけて検証します。よっていかに残り2台に負荷を分散させるかを考える必要があります。

データベースのインデックス追加も有効な手段です。デフォルトではインデックスが不足しており、検索条件に対する効果的なインデックスを付加するだけでもかなりの速度向上が期待できます。

またN+1問題も含まれています。これは比較的わかりやすい改善ポイントではないでしょうか?

ISUCONはチーム力がとても大事!

ここまで読んでお分かりのとおり、オレ(わたし?)アプリが専門だからインフラはよく分からない、などと言っていられる余裕はありません!

1人で戦うなら、それこそフルスタックエンジニアでないといけませんが、そんな人はそうそうにはいません。よって、ここで大事なのがチーム力です。

1人でアプリの全体を見るのはとても困難で時間もかかります。しかしそれぞれの分野の専門家が集まってチームを組めば、分担して作業ができます。

開発言語が得意な人、データベースが得意な人、サーバやネットワークに詳しい人、それらが集まれば最強チームのできあがりです!

好成績が出たときの喜びも、みんなで分かち合うことができるのです。

その代わり、賞金も分かち合うことになりますが。

ISUCONだけじゃない!プログラミングを競う大会

ISUCONだけがプログラミングを競う大会ではありません。その他の大会も見てみましょう。

AtCoder

AtCoderは、オンラインで参加できるプログラミングコンテスト(競技プログラミング)のサイトです。リアルタイムのコンテストで競い合ったり、約3,000問のコンテストの過去問にいつでも挑戦することが出来ます(公式サイトより)。

出題内容はアプリまるごとではなく、題意をみたすプログラムを作りなさい、といった純粋なプログラミング問題で、ISUCONのようなアプリ丸ごとではありません。

ランキングが公表されているので確認してみると、全世界から参加していることが分かります。上位100位内に日本人は19人ランクイン(2020年2月時点)しており、学生が多いようです。

ちなみにトップは、ロシアとポーランドの間に位置するベラルーシ共和国の大学生です。グローバルですね。

PG BATTLE

PG BATTLEは、1チーム3名による企業・学校対抗プログラミングコンテストです。作品を提出して審査する方式ではなく、出題された問題を解くプログラムを90分間に4つ書いてオンライン提出するガチ勝負です(公式サイトより)。

3名のチームメンバーが挑む問題の難易度は「ましゅまろ」「せんべい」「かつおぶし」と分かれていて、申し込み時に選択します。硬いほうが難しいと考えてください。

3人の点数の合計点で競います。チームではありながら個人のガチ勝負で、メンバー間での相談は禁止されています。

問題はAtCorderと同じく、テーマが与えられてそれを満たすプログラムを作ります。どちらかというとアルゴリズム勝負といった感じです。

PG BATTLEの魅力はチーム戦の面白さに加え、賞品の豪華さもあるでしょうか。Twitterでも話題になっていたようです。

まとめ

プログラミング学習というと、どうしても孤独になりがちで、どの程度成長できたかも分かりづらいです。

これを機に、いつものプログラミングに他人と一緒に勉強する、競うというエッセンスを加えてみてはいかがでしょうか?

新規CTA

新規CTA
新規CTA

RELATED POST関連記事


RECENT POST「プログラミング」の最新記事


この記事が気に入ったらいいねしよう!