こんにちは、エンジニアをしている wa6sn です。開発組織を横断した課題を解決する、Platform Unit というところに所属しています。
先日、社内のエンジニア向けに「開発合宿」と称して、株式会社ギフティ 社内ISUCONを催しました。その様子について紹介します。開催を検討している方にも参考になれば幸いです。
※「ISUCON」は、LINEヤフー株式会社の商標または登録商標です
開催の経緯と目的
ここ最近、コロナ禍で働き方が変わってきた影響もあり、「他の部署のエンジニアの動き方を知る」ような機会にはなかなか恵まれませんでした。開催の 4 ヶ月ほど前、雑談での「出来る人の手さばきとか、コーディングの様子を見てみたいよね」といった話題から、「じゃあ、社内ISUCONをやってみようか!」と、有志で企画を立ち上げることとなりました。
企画の目的は以下の 2 つです。
エンジニア間のコミュニケーションの機会の創出。 一緒に仕事をしたことのないメンバー同士でチームを組成し、交流のきっかけになることを目論みました
技術力の向上。 チューニングを通した、基礎的な Web 関連技術の学習
イベントの対象者は「Web アプリケーション開発を行っているメンバー」とし、(部署間の交流が目的でもあるために)出来るだけ多くの方に参加をお願いしました。結果として、対象者の 8 割程度のメンバーにご参加いただきました。
イベントの概要
題材として、https://github.com/catatsuy/private-isu を利用させていただきました。シンプルなアーキテクチャで、取り組み始めやすかったことが選定理由です。また、イベント中にスコアボードを表示するために https://github.com/iwashi/private-isu-portal を利用させていただきました。両リポジトリの作者様に感謝を申し上げます。
開催にあたり、社内では ISUCON に参加経験のあるメンバーが少なかったことと、こうしたチューニングの経験の有無もまばらであることから、今回は競技性には強くこだわらず、「アプリケーションの改善を行うとスコアが上がっていく」という体験を重視しました。
当日の様子
当日は運営陣がチーム分けを行い、1 チームあたり 3,4 名の構成で 8 チームに分かれました。早速チューニングだ!……となる前に、午前中は以下のような内容を含むチュートリアルを行いました。先に述べたように、全員がこうしたパフォーマンスチューニングに取り組んだ経験があるわけではなかったためです。
- ssh でログインした後にいくつかのコマンドを実行し、問題のアプリケーション構成を確認する
- ベンチマークテストを動作させてみる
- MySQL にインデックスを貼ってみて、スコアの改善を確認する
- nginx のアクセスログを集計し、改善するべき箇所を洗い出す
- 限られた時間を有効に使うために、取り組むタスクの優先順位を決める
その後、ランチタイムを挟み、午後はスコアボードを表示しつつ皆さんにチューニングに取り組んでいただきました。運営陣からは、適宜「プロファイラの導入」や「nginx による静的ファイルの配信」といった、チューニングに関するヒントを兼ねたミニ講座を行いました。
ゲーム中は皆さん真剣そのもので、黙々と改善が進みました。「自分は MySQL の設定を調べます!」と役割分担を決めるチーム、モブプロのように一人がモニターで共有しながらみんなで進めていくチーム、ベンチマークの仕様から方針を逆算しようとするチームなど、とった作戦も様々でした。
何度も順位の変動がありつつ、今回優勝に輝いたのは「本日は対戦よろしくおねがいします」チームでした!実はこのチーム、終盤になりスコアボードがクローズされた後に大きくスコアを伸ばしています。なかなか盛り上げ上手だなぁ……、と思いきや、メンバー曰くこの急上昇は狙ったものではなく、最後にプロファイラ等の計測コンポーネントを外してプロセスを再起動していたりしたところ、予想外に上がってしまったそうです。こうした意外な展開も楽しくて良いなと思いました。
ゲーム終了後は振り返りとして、上位チームにインタビューをし、方針や施策を共有していただきました。また、その後の懇親会でも、夕食を食べながらワイワイと感想戦を行いました。
感想とまとめ
運営陣の感想としては、一通り無事に終わってほっとしました。(本家の ISUCON を開催されている方々が、いかにすごいかも良く分かりました……!)また、チュートリアルなど、ゲームに入り込みやすくするための準備を入念に行った点は、参加者からも好評で良かったです。今回の催しはトップダウン的に決まったものでもなく、有志の発案で行われました。それでも快く参加いただいた皆さんに感謝です。
以下は、参加者アンケートからの抜粋です。
- ものすごく楽しかったです。技術の勉強だけでなく、他部署との交流、触ったことのない技術への挑戦等々、色々チャレンジさせていただきました。ありがとうございました!
- 実際に手を動かす学びはすごくあったと思います。
- 神イベでした
- 課題となっている場所を見つけることができたが、解決まで至らなかった。
- チュートリアルやヒントがあったおかげで、スムーズにゲームを進めることができた。
- チームで意見を出しつつ少しづつ改善を回せた。細かく alp などの結果を見れてなかったり、プロファイラを入れなかったりと、割と勘で進んだのはよくなかった。
さて、ギフティではより良いプロダクトを作るために切磋琢磨するエンジニアを求めています。少しでもご興味を持っていただけましたら、ぜひ 採用ページ や カジュアル面談 にお越しください!