💨
ISUCON過去問を練習問題に:ベンチマーカーで自動化するE2Eテスト
ISUCON14 公式反省会 LT発表資料
自己紹介
- 本名:金子達哉
- 株式会社PR TIMES PR TIMES事業ユニット 第一開発部長CTO
-
達人が教えるWebパフォーマンスチューニング〜ISUCONから学ぶ高速化の実践(技術評論社)(通称:ISUCON本)の著者の1人
- 6章「リバースプロキシの利用」・7章「キャッシュの活用」・8章「押さえておきたい高速化手法」を担当
- ISUCON9予選・ISUCON6本選・ISUCON13アドバイザーで運営に関わりました
- catatsuyというIDで各種SNSをやっています
- かたついと呼ばれることが多いです
ISUCON練習用に2つの問題をメンテナンス
- 初心者向けでISUCON本の題材 catatsuy/private-isu
- 経験者向けのISUCON9予選問題 isucon/isucon9-qualify
メンテナンスの課題と背景
バージョンアップの影響
- Webアプリケーションはバージョンアップをすると壊れる
- Rubyはほぼ必ず壊れる、PHPも壊れることがある、Goはほぼ大丈夫
- 非互換なライブラリのバージョンアップはどの言語にもある
- 最新バージョンに追従してないと構築が難しくなる
- 基本は常に最新に追従する必要がある
メンテナンスを続けるためのポイント
- 言語・ライブラリのバージョンアップに追従する必要がある
- Renovateを活用することで対応可能
- ISUCON夏祭り2023の発表資料:private-isuのメンテナンスよもやま話
- 動かなくなった場合、その言語についてある程度詳しくないと解決が難しい
- 1人で全言語をメンテナンスしようと思わない
- Renovateを活用することで対応可能
- 動いていることをどう確認する?
ベンチマーカーの役割
- ベンチマーカーは「Webアプリケーションにリクエストを送る」「レスポンスが正しいか確認する」
- これはE2Eテストそのもの
- CIでベンチマーカーを実行してsuccessするか確認する
- ベンチマーカーを実行するCIを構築すれば、メンテナンスが容易になる
ISUCONの問題をCIで実行するには
- データベース・ベンチマーカー実行に必要なデータを用意する
- 必要なすべてのプロセスをDocker経由で起動する
- これらをGitHub Actions上で全部やる
GitHub Actionsのポイント
-
キャッシュの利用は慎重に
- GitHub Actionsのキャッシュは遅いので、無理に使わない方が良い
-
効率的な実行を心がける
- 実行時間が長いため、関係ないファイルの変更時は実行しない
- 実行途中でpushされたら中断する仕組みを導入する
-
ログ出力の工夫
- ログがないと失敗時の原因が特定できないため、適切なログを出力する
実際のコード
最後に
- Renovateで自動バージョンアップ、CIでベンチマーカーによるE2Eテストが実行されれば、バージョンアップへの対応が容易に
- CI構築は少し手間がかかるが、継続的なメンテナンスにおいて非常に効果的
- 全言語を1人で対応しようとせず、細く長くメンテナンスすることを目指す
Discussion