💨

ISUCON過去問を練習問題に:ベンチマーカーで自動化するE2Eテスト

2025/01/10に公開

ISUCON14 公式反省会 LT発表資料

自己紹介

ISUCON本書影

ISUCON練習用に2つの問題をメンテナンス

ISUCON練習用にメンテナンスしている問題について

メンテナンスの課題と背景

バージョンアップの影響

  • Webアプリケーションはバージョンアップをすると壊れる
    • Rubyはほぼ必ず壊れる、PHPも壊れることがある、Goはほぼ大丈夫
    • 非互換なライブラリのバージョンアップはどの言語にもある
  • 最新バージョンに追従してないと構築が難しくなる
    • 基本は常に最新に追従する必要がある

メンテナンスを続けるためのポイント

  • 言語・ライブラリのバージョンアップに追従する必要がある
    • Renovateを活用することで対応可能
    • 動かなくなった場合、その言語についてある程度詳しくないと解決が難しい
    • 1人で全言語をメンテナンスしようと思わない
  • 動いていることをどう確認する?

ベンチマーカーの役割

  • ベンチマーカーは「Webアプリケーションにリクエストを送る」「レスポンスが正しいか確認する」
    • これはE2Eテストそのもの
  • CIでベンチマーカーを実行してsuccessするか確認する
    • ベンチマーカーを実行するCIを構築すれば、メンテナンスが容易になる

ISUCONの問題をCIで実行するには

  • データベース・ベンチマーカー実行に必要なデータを用意する
  • 必要なすべてのプロセスをDocker経由で起動する
  • これらをGitHub Actions上で全部やる

GitHub Actionsのポイント

  • キャッシュの利用は慎重に
    • GitHub Actionsのキャッシュは遅いので、無理に使わない方が良い
  • 効率的な実行を心がける
    • 実行時間が長いため、関係ないファイルの変更時は実行しない
    • 実行途中でpushされたら中断する仕組みを導入する
  • ログ出力の工夫
    • ログがないと失敗時の原因が特定できないため、適切なログを出力する

実際のコード

https://github.com/isucon/isucon9-qualify/blob/master/.github/workflows/ci.yml

最後に

  • Renovateで自動バージョンアップ、CIでベンチマーカーによるE2Eテストが実行されれば、バージョンアップへの対応が容易に
  • CI構築は少し手間がかかるが、継続的なメンテナンスにおいて非常に効果的
  • 全言語を1人で対応しようとせず、細く長くメンテナンスすることを目指す

Discussion