【ISUCON9】初めてISUCONに参加したので、やったことや得たものを書きます

##はじめに
ISUCONに初めて参加しました！社会人・初参加３人組での挑戦です。
「昭和時代」というチーム名で、参加しました。
9/7（土）の予選に参加したのですが、結果としてはスコア5410イスコインで惨敗でした・・・が、得られたものは多く「参加してよかった！また出たい！」となったので、参加経緯や実際にやったこと、得たことを備忘録としてまとめていきます。

##ISUCONについて
http://isucon.net/
一言でいうと・・・与えられたアプリケーションに対して、パフォーマンスチューニングを行い、そのスコアを競うコンテストのことです。予選と本戦があり、優勝チームには賞金100万円が与えられます。
予選や本戦の詳細や過去問についてなど、詳細は公式ブログにまとめられていますので、そちらをご覧ください

##ISUCON参加
私は２年ほど前に名前や存在は聞いていたのですが、その時は「へー」と言った感じで自分が出ることは特に考えていませんでした。
ですが、数年で意識も変わっていき、技術的な何かをやりたいと思ったときにISUCONのことを思い出し参加しようと思いました。

まず自分についてですが・・・
１.WEB開発会社でエンジニア・管理職として約6年程度勤務
２.開発は主にPHP
３.4年前からPL/PM、3年前から役職なので毎日がっつり開発、というわけではないが、一応PHPやSQLはほどほどに出来る
（あとAWS関連は一応一通り触れる）
くらいのスペックです。
そこで・・・
１.元同僚で現在もエンジニアとして開発業務をやっている「涼平」さん（北海道在住）にお声掛け→快諾頂く
（同じタイミングでLT会の企画など持ちかけてくれたのでその流れで）
２.インフラに強い人がほしい！と思い社内のインフラエンジニアに数名声をかけては振られ、
　 結果現在は開発業務をやっているがもともとインフラエンジニアだった「syn」さんにお声掛け→快諾頂く
といった流れで仲間を探しました。御二方とも同世代です。

##ISUCONまでに
###過去問をやろう！
まずは過去問をやろう！ということでチャットワークに部屋を作ってそれぞれISUCON8の環境構築をはじめました。
この時点で結構マニュアルに書いてあるだけだと足りないこともあり、調べるのに四苦八苦しました・・・。
基本的にはチャットワークでやりとりしましたが、１回だけ「ガッツリやろう！」ということでリモートで集まりました。
このリモート集会でやったことは・・・
・事前にISUCON8の環境はそれぞれ作ってあったので、ソースコードを眺めて「ここらへんは？」など意見を出し合う
・ISUCON9の予選申し込み
・チーム名を決める
・Alibaba cloudの登録
・本番の言語を相談（全員PHP経験が多かったのでPHP一択でしたが）
などでした

###事前アナウンスに従って環境を整えよう
Alibaba cloudの環境を整えました
代表者は一応自分だったのですがメールが埋もれすぎて何度もsynさんにリマインドいただきました・・・すみません
あとはコワーキングスペースを探したり、待ち合わせ場所を決めたりしました

###役割分担しよう
細かい役割分担は決めていませんでしたが、だいたいこんなことは決めていました
・インフラ経験豊富なsynさんが、サーバの確認やローカル環境構築を担当
・その間にひたすら自分と涼平さんでソースコードを確認し、改善できそうな箇所を洗い出していく

##ISUCON当日
###開始前
9:30に都内某駅に集合し、食料を調達してからコワーキングスペースへ
コンビニに寄るのとPCセットアップでなんだかんだ言って落ち着いたのが9:55とかでした・・・危ない
アクシデントで10分開始が遅くなったのが逆に良かったです。

###マニュアルちゃんと読もう！
開始と同時にマニュアルを熟読します。これ、本当に大事でした・・・
そして時々見返すのも必要だとあとになって思いました。
外部APIのところが記憶から抜けていて、「なんでつながらないんだ・・・」としばらく頭を悩ませていたのですが、本当にマニュアルはちゃんと読まないとだめだと思いました・・・

###ファイル足りてるかちゃんと確認しよう！
あとはベンチを回す際に流れるSQLが１つ足りていなくて（バックアップ時に取り残してしまった）エラーになる原因になかなか気づけずに時間を消耗してしまいました・・・
１から疑っていくのほんと大事、と改めて思いました。

###DBチューニング
とりあえず張れそうなIndexを貼ったりしましたが、スコアは変わらず・・・

###クエリチューニング
Foreachで何度もSQLを実行している箇所があったのでJOINして解消。
本当はもう１テーブルJOINすれば更に改善できるのはわかっていたのですが、手がまわりませんでした・・・

###開発環境
最初はdockerでローカル作るのを目指していたのですが途中で断念
また他の御二方はVSCODEで直接本番ソースをいじっていたのですが、
自分はphpstormでそれがうまくいかず、「こここうしてほしい」というのを伝えて実装してもらう始末・・・
すごく反省しています

###最終スコア
まともに本番が動くようになり、キャンペーンの還元率を1に変えた時点でぶっちゃけ5410スコアいっていたので全然大したことはできずに終わりました・・・
ということで最終スコアは5410イスコインで惨敗でした。
それでも予選１日目の順位が見れるまでの間（終了１時間前）では50位以内にいたので、今回、Alibaba cloudに苦戦していた方が多かったんじゃないのかなと勝手に予想しています。

##ISUCON終了後
コワーキングの片付けをしながら「早く答え合わせしたい！」と３人で言いながら感想用のスレに張り付きます。
「そんな機能あったの！？」「そんなことできたの！？」みたいなことを言いながら居酒屋へ移動

##反省会（という名の飲み）
結果は惨敗だったものの、「楽しかったね」「出てよかったね」というプラスの感想しかありませんでした。
もちろん「もっと出来ることはあったよね」とか悔しいという思いもあったのですが、とにかく楽しかったです。
敷居が高くて自分じゃとても・・・と思っていたのですが、実際にやってみないとわからなかったことがたくさんあったので、結果は惨敗ですが出てよかったというのが一番の感想でした。
来年はこうしたいね、とか、来年も出たいね、とか、社内の他の人たちも出てほしいね、といったことを話しながら夕飯を楽しみました。
また今回の予選問題が過去問として登録されたら、リモートで集まってもう一回やろうねという話もしました。

##個人の感想
以上がISUCON9の振り返りになりますが（技術的なことをほぼ書いてなくてすみません）改めて個人の感想です。
何度も言いますがスコアは惨敗したものの、得られるものがたくさんありました！
・まずこういう大会の存在を知った
・こういう大会に出るための仲間を集められた
・大会に出るために事前に集まったり過去問題をといたりできた
・実際に大会に出られた
・役割分担して試行錯誤出来た
・ここらへんはどうか、など案出しをみんなで出来た
・次はこうしたい、ああしたい、周りにもみんな出てほしいと思えた
・他の参加者の意見やブログを見て、答え合わせや何が足りてないのか学べる

改めて参加者の皆様、お疲れ様でした。
そして運営の皆様、素敵な機会をありがとうございました！！