2021年10月16日(土)に、bravesoftでは初の社内ISUCONを開催しました。

”b-ISUCON”と銘をうったイベント、当日の熱戦の様子はこちらから。
ブログでは、参加したエンジニアの皆さんが伸び伸びと自分たちの腕前を競い合う姿が描かれています。

が、その裏で我々主催側は、本当にISUCONを成立させることができるのか、かなりギリギリまで調整を行っていました。せっかくなので、これから社内ISUCONを開催したいと考えている人に向けて「b-ISUCONではどのような準備を行なったのか」その後どうだったのか」についてまとめたいと思います。

  1. 参加者集め
  2. 環境構築
  3. 会場選び
  4. 日程調整
  5. 当日の段取り
  6. 最後に、これから開催を考えている人へ

システム面でどのような準備をしなければいけないか、については割と検索すればでてきますが、それ以外の面はなかなか描かれていないと思うので、今回はシステム面はさらっと。逆にイベント開催の観点から何をしたかを中心にまとめていきます。

 

1. 参加者集め

まずはここ。初めての社内ISUCONということもあり、そもそもISUCONとはなにもの?という状態からのスタート。今回超えなければいけないハードルは、

・リアル開催のため、現場に集まってもらう必要がある
・社内ISUCONとは何かについて、皆に説明して理解してもらう必要がある
・そもそも仕事で忙しい中、8時間も使うイベントに参加してもらえるのかどうか

他にも挙げればいろいろとありますが、大きくはこの辺りがハードルでした。解決に向けて実施したことは、大義名分をしっかりと説明したこと。
”b-ISUCONに参加すること”を目的とすることは、手段と目的を履き違えてしまい、参加してもやらされている感がどうしてもでてしまう。今回の目的は、新人とベテラン、異なる事業部のエンジニアどうしがエンジニアリングを通じて交流すること、そのための方法として”b-ISUCONに参加すること”と設定しました。

また、参加資格としてバックエンドエンジニアに限らず、フロントエンジニア・アプリエンジニア、さらにはディレクターなど幅広く参加可能と宣言。通常のプロジェクトでもパフォーマンス問題にぶつかると、チームで挑むこととなるため、私自身の想いとしてバックエンドエンジニア以外もしっかりと活躍してほしかったこともあり、参加資格を広げました。

最後に(正直これが一番効果的だったとは思いますが..)各事業部のトップにお願いして参加者を集めてもらい、最終的にトップダウンで人を集めるという、元も子もない集め方を実行。とにかくまずは集まってもらうことが重要!そして参加してくれた人全員に感謝です。

 

2. 環境構築 

今回の社内ISUCON開催にあたって、最大の不安は本当に無事に環境構築ができるのかどうか。そのためには、過去問を使うことはもちろんのこと、シンプルに構築できることも必要でした。過去問としてはISUCON8の予選を採用。その理由として、ISUCON8は

https://isucon.net/archives/52520045.html
> 限られたマシンリソースでどう捌くかを考えるようなものにしたい

と記述されており、一台構成でもロジックで差がつけられると理解。AWS前提で考えていたこともあり、AMIである程度構築できそうな目処が立ったことも決め手でした。

ISUCONの醍醐味は、複数台のサーバ構成を活用して点数を取りにいく、ということは承知の上で、まずは開催できることを優先し、一台構成で準備を進めることに。今回、確実に開催するために、ISUCON8予選から変更したのは以下の点です。

slackでベンチマークを事務局に依頼している様子

  1. サーバ台数は一台構成
  2. 言語はGO言語のみ
  3. ベンチマークは事務局にslackで依頼して実行
  4. マニュアルやソースコードから”ISUCON8”の記述を削除

まず1について。これは準備にも記載しましたが、とにかくシンプルにするため。

そして2のGO言語の選択。表向きの理由は、参加者に不慣れな人が多く、ベテランと新人で言語の知識差を出さないため、ということにしていました。が、実際には他言語で実施するとベンチマークがエラーとなるため、何らかの不具合を疑い、GOのみを選択することに。(実際には、マシンのスペックが低く、メモリ不足でエラーというオチで不具合ではなかったようですが)結局こちらもシンプルを理由にやはりGO言語のみと決定。

3のベンチマークについて。これは、過去問通りにベンチマーク用のサイトを立ち上げようとしてもなかなかうまくいかず、当日まで時間もなかったので、運用でカバーするという結論に。

4番目の記述削除はカンニング対策。ISUCON8を参考に(ほぼそのまま)採用しているため、探せばいくらでも攻略法が転がっているので念の為記述削除しました。正直、ちょっと間のいい人であればすぐにISUCON8にたどり着くので、無駄な努力でしたが、幸い今回の参加者でカンニング行為は行われず、運営側の疑り深さだけが残りました。

 

3. 会場選び

基本はリモートワークということもあり、社内を広々と使うことができていたので、外の会場を借りることはそれほど検討せず、オフィスでやる前提となりました。
また、ISUCON自体が長丁場ということもあり、参加する人たちが慣れている環境の方がそれほどストレスなく参加できるかな、という配慮も含め、オフィスを選択。

 

4. 日程調整

日程、特に開催曜日については悩みました。というのもISUCONは朝から8時間かけて行うイベントです。平日に開催すると、確実に仕事に引きずられてしまい、まともに実施できません。そのため休みの日に開催する前提で調整を進めました。
また、bravesoftは12月が一年の締めということもあり、年末や四半期末のタイミングは忙しくなることが容易に想像できます。逆に期の始まりは、チーム体制を構築して新たにスタートダッシュをかけるタイミングのため日程を抑えづらかったりと、考慮することが多々ありました。結果、年度末・四半期末でもなく、期初でもない10月を選択。それほど各部門からクレームも上がらなかったので、日程選択はうまくいったとのかな、と思っています。

 

5. 当日の段取り

当日は10時から開始と設定。開始のためにいくつか細かなチュートリアルを実施しました。

チュートリアル1:レギュレーション・マニュアルの簡単な解説

ISUCONではマニュアルを熟読することが勝利への秘訣と言われていますが、今回初開催のb-ISUCON参加者にとってはマニュアル?なにそれ?の状態です。そのため、開始時に簡単に説明を実施。とはいえ、どのようにしてスコアを計測するのか、どのようなシステムなのか、といった基本的な部分のみのため、b-ISUCONでも本来のISUCONと同じくマニュアルをしっかりと読むことが勝利への近道となりました。

チュートリアル2:サーバへのログイン

参加者にはslackを利用して個別DMで接続情報を配布。各チームがサーバにログインできることを確認。

チュートリアル3:ベンチマークのテストラン

事務局へベンチマークをslackで依頼、事務局側から対象チームの環境に向けてベンチマークテストを実行。そして、スコアをslackのスレッドで返信、と

いった一連の流れを体験してもらいました。

以上で準備が整ったので、晴れてb-ISUCONの開始となります。ちなみに進行していく中で、事務局のフォローや段取り変更も行いました。

まず行なったのは、GO言語の変更方法のアナウンス。一応マニュアルに記載はあったものの、開始して1~2時間経ってもそこに気づかず四苦八苦しているチームがあったため、事務局側からフォローを実施。やはり普段PHPに慣れている若手は、ビルドが必要なサーバアプリに苦戦した模様。

また、チームによってはいきなりGO言語の再インストールでバージョン変更を行なったり、GOをやめてPHPに変更しようとして行き詰まったりしているチームも発生。今回のテーマではインフラやミドルウェアよりも、アプリケーションレイヤーでの分析と対策が真っ先に必要なため、お昼を過ぎても困っているチームにはそれとなくフォローを行いました。

途中、高得点を叩き出しながら0点に戻ったりを繰り返すチームもあれば、ギリギリまで計測を待ちながら、最後の最後で逆転するチームが現れたりと、蓋を開ければ非常にドラマチックな展開となり、主催側としても非常に喜ばしい流れとなったかと思います。

6. 最後に、これから開催を考えている人へ

私自身、キャリアをプログラマーからスタートしたものの、早々にマネージャーにシフトして行ったので、こういったイベントに憧れていたものの参加まではいたれていませんでした。今回、参加ではなく主催という形でしたが、これまでの経験や知識をフル活用しないとできないイベントであり、開催できて個人的な満足度は非常に高いです。

30代後半から40代のマネージャーで、同じような境遇の方はとても多いと思います。もし興味がある方は、一歩足を踏み出して社内ISUCONの開催をしてみてはいかがでしょうか?今回の開催アンケートを取ると、満足度7段階中6.4の結果となり、非常に参加した方からは好評いただけたと思います。

ちなみに「今回のbISUCONで良かったことを教えてください」という質問に対して、参加者からは以下の声をいただきました。

 

[交流系]

・普段関わらない人と一緒に悩めた事。

・部署が異なる人と交流しながら進めることが出来たのはよかったと思います。

・皆が一緒に一つの問題を解決することは楽しいです

・エンジニアや他部署メンバーとの共同作業&交流

・いつもは関わらないメンバーと考えながら、意見を出していけるところがよかったです。

・エンジニアが集まって、お互いの関係を縮めたこと

 

[実際に学びになった]

・日頃触らないサーバーの処理と向き合えて面白かった!

・Go言語という今まで行ったことがない領域に着手することが出来たのもよかったです。

・GO言語を勉強したこと

・Webサーバの設定など普段の業務では経験できないことを体験できた。

・bISUCONに参加した後、クエリDBの改善など多くのことを学びました。

・新しいことをする切っ掛けにもなり良い経験になりました。

・OOさんだったら、どうするんだろうと言った普段何気なく、頼ってしまっている部分の力不足を感じると共に、そこを克服すれば自身は成長できるんだというモチベーションになった。

・実際にやりがちなミスが問題として再現できていたので、参加者の今後の役に立つと思う。

 

[純粋にイベントを楽しんだ]

・各チームの途中経過が細かく見れたので、競争意識が高まりました。また、エンジニア職ではない自分に何ができるかのヒントを適度に頂けたのは助かりました。

・純粋なエンジニアイベントで楽しかった。

・チームで何かの目標に対して具体的にアクションでき、それが実際に成果として現れて、楽しかった。

 

やはり、声として多かったのは、事業部を跨いで交流できたこと。エンジニアリングをしているとどうしてもチームや個人で完結してしまいがちなので、今回はあえて事務局側でチーム編成を指定。経験・事業部が異なる人同士でチームを組むように設定したことが功を奏し、良い結果を得られたと思います。

今回の開催にあたって、技術統括室のメンバーやb-ISUCON競技参加者全員、参加を許可してくれた各事業部長、そして開催を見守ってくれたbraver全員に助けられて第一回を無事終えることができました。bravesoftの伝統の一つとしてぜひこのイベントを2回・3回と続けていき、さらにはISUCON優勝を目指して頑張っていきたいと思います。

ぜひこれから開催を検討してみているかたは、思い切って社内ISUCONの開催を宣言してみましょう!

 

※「ISUCON」は、LINE株式会社の商標または登録商標です。
https://isucon.net