Web開発初心者が初めてのISUCONまでに勉強したこと

筆者について

非 Web 系のソフトウェアエンジニア。Webの知識は Vue.js, Electron, Flask をちょっと触ったことがある程度。ポッドキャストで Web 系の友人と話したときに ISUCON のことを教えてもらって興味を持った。

チームについて

自分以外の2人のチームメンバーも広い意味ではエンジニアだけど Web の知識はあまりない感じ。3人とも Python は使用経験があるため、 Python でやることにした。このような3人なので ISUCON の予選は突破できるとは思っておらず、何かしら改善したスコアが出せれば良いかなくらいが目標。しかしやるからには勉強しようとことで、週1〜2回のペースで2〜4時間の勉強会をした。チームメイトのいっちぃさんによると8回やったらしい。色々と学べたので、現時点でも ISUCON に登録した意味はあった。

ISUCON 9予選に挑戦

最初は ISUCON 座学でおすすめされていた ISUCON 9の予選 (ISUCARI) に挑戦しようとした。

まず手元で動かそういうことで3人それぞれで VSCode Remote Container で開発環境を構築した。当時下記の tweet のように Remote Container (devcontainer とも言う) に心酔していたため、チームメイトにゴリ押しして使ったのだが、チームメイトに M1 mac の人がいてはまったり、あまり Docker に慣れていないなどで混乱させただけみたいになってしまった。

下記のリポジトリにログがあるが、Devcontainer を作ってベンチマークを動かして満足して終わった。

ISUCON 10 予選に挑戦

そのうちに密に連絡を取っている別チームが『Software Design 2021年7月号』を読んで昨年の ISUCON 10 予選の問題 (ISUUMO) をやっていると聞いたので、我々も同じ進め方でやってみることにした。

AWS 上での開発

Software Design では AWS EC2 上にデプロイできる AMI を使用して ISUCON10 の環境を構築しているので、それに従ってやってみた。そもそも AWS を普段触ることがないので、今回 EC2 を上げたり下げたり、ポートの設定したりと慣れることができて良かった (ISUCON11 予選の本番も AWS が使用される)。

nginx

仕事でもプライベートでも Flask でサーバーを立てたことはあるが、 Python 内蔵の http.server しか使ったことがなく、 Apache や nginx の設定をしたことがなかった。今回、Flask サーバーを uWSGI で立ち上げ、uWSGI と nginx を Unix socket でつなぐということができたので満足。なお、特に高速化はしなかった。nginx Unit というのを使う方法もあるらしい。

サービスとか

ISUCON の採点はサーバーを再起動して行われるので、再起動後にサービスが立ち上がるように設定しておかなければならない。AMI にあらかじめ設定されているが、カスタマイズしたりログや状態を確認したりするのに service, systemctl, journalctl などのコマンドを使用する必要がある。これまでそれほど高い頻度で使用してきたわけではなかったので、良い経験になった。なおサービスの設定ファイルは Git リポジトリに入れてシンボリックリンクを張ると、履歴が残るし毎回 sudo せずに編集できるので良かった。

SQL

チーム内に SQL バリバリ使うつよつよデータサイエンティストがいるので、教えてもらいながら Software Design の記述に従ってログをみたり、インデックスをつけたりして、高速化するのを確認した。SQL もほぼ触ったことがなかったので学べてよかった。詳細はチームメイトの以下の記事を参照。

Tmuxでモブプロ

EC2 のインスタンス上に Tmux のプロセスを立ち上げ、各自の端末から同じ Tmux セッションに入ってモブプロを行った。Tmux ではターミナルに表示される文字が全てのクライアントで同期されるので、入力中のコマンドがリアルタイムで見え、他人がどういうシェル操作を行っているのかが分かりやすい。メンバーの Unix コマンドの習熟度に差があったので、この機能は役に立ったと思う。

恐らく VSCode Live Share を使ってモブプロするほうがナウい感じだけど、Live Share では誰かがホストとなり、自分の手元で動いている VSCode を他の人にシェアするという形になる (EC2 に VSCode server を立ててそこに皆でアクセスという使い方は現時点ではできなそう)。Tmux ではどのクライアントも対等なので、モブプロの役割変更がスムーズな気がする。

ISUCON 10 予選のチームのリポジトリはこちら。9予選よりはちょっと変更した。


Web 開発完全に理解した!


というわけで明日が ISUCON 11 予選本番。去年の様子を見ると順位とかに関わらずブログ記事を書けば ISUCON のページに載せてくれるらしいので、次回の記事では参加した感想を書きたい。


この記事が気に入ったらサポートをしてみませんか?