ISUCON10 に うなすけ と やまま の三人でチーム名「たんぽぽの上の刺身」で参加した。結果はスコア 1302 でおおよそ 100 位くらいだと思われる。初参加でどきどきしたので記録として残しておきたい。結論としてはとても楽しかったので、来年も同じメンバーで出られたら良いなあと思っている。
インフラ周りの話はこちらへ ISUCON10 の予選に参加した - きりきりやま
はじまりと予習
うなすけから「三人で ISUCON に出ませんか?」と誘われる。わたしを誘うの?正気か?と思ったが、プログラマになって一年、ちょっと挑戦してみたい気持ちが無かったわけではなかったので、参加することに。本人に直接伝えるのは恥ずかしいのでここに書き留めますが、声をかけてくれてありがとうというお気持ち (既に酔っ払って伝えている可能性はありそう) 。
事前に予習として、過去回のコードを見ていたが、何をやっていいものかさっぱり。そもそも Sinatra だったことを知らなかったので、大丈夫かなと不安に思った。何より不安のタネは ActiveRecord がそこにはなかったこと。やままに毎晩のように「ActiveRecord に甘やかされるな」と言われながら SQL を勉強した。毎晩はちょっと盛ったけど、結構言われたので頑張った。
全員では、オンラインで集まって ISUCON8 の予選を予習した。このときにおおよそチームの動き方とか担当も決まって、当日もその流れが踏襲できていたと思う。
当日
予定より遅れた開始時間 (遅れたことを責める意図は全くもってない) により、緊張がピークに。止まらない手汗、多くなる口数。うなすけとやままにうるせえと言われながらも、なんかもうどうしようもなくなってとりあえず縄跳びをした。開始前から全身汗まみれになってしまい気分が落ち込み、ちょっと口数が減った。良かったのか良くなかったのかわからない...
#JumpRopeChallenge #NintendoSwitch pic.twitter.com/35W3YHxslM
— らいむ (@lime1024) September 12, 2020
環境
- わたしとやままは一緒に自宅。うなすけも自宅
- 通話は作業用の端末ではないもので Zoom で繋ぎっぱなし
- テキストコミュニケーションは Discord
- 予習したときにまとめたものや残して共有しておきたいものは Scrapbox
担当
- やまま: インフラ
- うなすけ: インフラとアプリ
- らいむ: アプリ
わたしとやままはお互いに相談したいことがあれば、うなすけに聞くような感じの体制だった。PR は自分以外のどっちか手が空いているほうが確認。やままはほとんどアプリを見ていなかったので「これなに?」って聞かれたらわたしが答えるようにしていた。
やったこと
- うなすけとやままが、コードを clone してきたり、デプロイやインフラ周りの整備をしている間に当日マニュアルに目を通して、必要そうなことを伝える
- とはいえ
POST /initialize
のレスポンスに実装言語書かないとベンチ通らないよ!としか言ってない気がする
- とはいえ
- うなすけが GitHub にコードをおいてくれたので、そこからはアプリのコードと DB の schema を見る
- インフラ整備中の二人にざっくりこんなアプリだよ!っていう話をした
- たぶんここ改善したほうが良さそうみたいなところをピックアップ
- やままがローカルでの立ち上げに成功したので、伝授してもらう
- 各々であーだこーだやるとあれなに?これなに?と会話が発生して時間がかかるので、単独では進めないようにした
- ローカルの環境が整ったので
explain
をひたすら叩いて type を確認しながら必要そうなところに index を貼る業をする- pt-query-digest の準備が整ってからは slow query を見ながら必要そうなところに index を貼っていた
- なんかやばそうだけど自分では対処できないと思ったところはうなすけとやままに投げたりした
反省点
get '/api/recommended_estate/:id'
- index が使われていないのはわかってたけど、どうしたらいいかわからなかった
- 条件を減らせば index が使えたので分割した
- その代わり DB への接続回数が増えるのでまあ多分厳しいかなと思いつつ
- そんなに点数は変わらなかったので、まあそうだよねというお気持ち
- 終わってからうなすけと、一番小さい面積 (一番短い辺と二番目に短い辺) で見たらよかったのかな?という話をした
ORDER BY popularity DESC, id ASC
- 複数箇所で使われていたので複合 index を貼ったけど効かなかった
- ASC と DESC が混在していると index 効かないっぽいことを終わってから知った
コードしか見てなかった
- ブラウザからアプリ見てなかったので金額が Range だったことに気づいてなかった
- たぶんおそらく自分だけじゃなくて、チーム全員ブラウザでは確認していなかったはず
まとめ
わたしは最初の環境整備とかをほとんどすっとばしてアプリを見ていたので、デプロイもベンチまわすのも二人に完全にお願いしていました。おかげでバッティングしなかったので前半は良かったが、終盤になってくると二人が忙しくなってわたしの手が空いてしまったので、デプロイまわりも共有しておけばよかったなあと。
戦力にならなかったらどうしようと不安に思うこともあったが、気づいたらあっという間に一日が終わっていた。次回はもっと強くなって頑張りたい。わからなくて倒せなくて二人にお願いしたところも自分で倒せるようになりたい。そして、そのときにはまた三人でできたらいいなあと思う。とにもかくにも楽しかった。