この記事は GMOインターネットグループ Advent Calendar 2025 3日目の記事です。
GMOインターネット株式会社の野田です。
システム開発をしていると負荷テストが必要になる時がありますが、
どのように負荷テストを行えば良いか分からないということもあると思います。
今回は負荷テストの知識がなくても、
AIを活用して負荷テストを行えるように記事を書きました。
目次
Locustについて
オープンソースの負荷テストツールです。
https://locust.io/
Pythonでテストシナリオを定義してテストを行うので、
テストをソースコードで管理することができます。
Locustは多数の仮想ユーザーを効率的に生成でき、
同時実行性の高いワークロードのテストに適しているようです。
Locustのファイルの準備
今回はClaude Codeを使用しました。
以下のプロンプトで必要なファイルを作成しました。
load-testsディレクトリに、PythonのLocustで負荷テストを行うプロジェクトを作成してください。
* ログインした状態で行うテストを作成してください。
* テスト対象はserver/api/v1/のAPIエンドポイントです。
* クエリパラメータも考慮してください。今回はテスト対象のプロジェクトにload-testsというディレクトリを作成して、その中に負荷テスト関連のファイルを作成することにしました。
テスト対象のプロジェクトではNuxt.jsを使用していますが、
Locustはブラウザのような動作をしないため、
画面のパスではなく、APIエンドポイントをテスト対象にするようにしました。
汎用的な内容にするためにプロンプトを簡潔にしていますが、
プロジェクトに合わせてプロンプトを詳細な内容にすると、
ソースコードの生成結果がよりプロジェクトに合ったものになると思います。
先ほどのプロンプトで、以下のファイルが作成されました。
⏺ PythonのLocustを使用した負荷テストプロジェクトをload-testsディレクトリに作成しました。
作成されたファイル:
1. requirements.txt - 必要な依存関係
2. locustfile.py - メインのテストファイル(Firebase認証付き)
3. .env.example - 環境変数の設定例
4. README.md - 詳細な使用説明書
5. Dockerfile - Dockerイメージ構築用
6. docker-compose.yml - 分散テスト用の設定
7. .gitignore - Git除外ファイル
主な機能:
- Firebase認証: ログイン状態でのテスト実行
- 包括的なAPIカバレッジ: v1 APIエンドポイント全てをテスト
- クエリパラメータ対応: 様々なパラメータ組み合わせでテスト
- 2つのユーザークラス: 通常操作用と重い処理用
- CSV エクスポートテスト: リソース集約的な処理のテスト
使用開始するには、.env.exampleを.envにコピーしてFirebase設定を入力し、pip install -r requirements.txtで依存関係をインストールしてください。Locustではlocustfile.pyなどのファイルにテストシナリオを作成しますが、locustfile.pyにserver/api/v1のAPIエンドポイントのテストが作成されていました。
使用するライブラリはrequirements.txtに定義されますが、
AIでソースコードを生成した場合は、
Locustのバージョンが古いものになっていることもあるので、
その場合は新しいバージョンに変更すると良いです。
生成されたソースコードは追加で修正が必要な部分はありましたが、基本的には問題のない内容だったので、修正してテストを進めました。
ちなみに、Locustはブラウザのような動作をしないため、
Firebaseを使用している場合は、
テスト実行時の認証処理を独自で実装する必要がありますが、
テスト対象のプロジェクトでFirebaseの認証処理が実装されていれば、Claude Codeはそちらを参考にして実装してくれます。
Locustの起動
今回は以下のようなコマンドで起動しました。
python3 -m pip install -r requirements.txt
python3 -m locust -f locustfile.py --host=http://localhost:3000起動するとLocustの画面にアクセスするためのURLが発行されます。
Starting web interface at http://0.0.0.0:8089URLにアクセスすると以下のような画面が表示されます。

以下の項目の設定を行うことができます。
- Number of users: 最大同時実行ユーザー数
- Ramp up: 1秒あたりに生成するユーザー数
- Host: テスト対象のホスト
Number of usersに達するまで、
1秒ごとにRamp upで指定した数のユーザーが増えていきます。
Ramp upには小数も指定できるので、
0.1を指定すると、10秒に1人増えていく設定にできます。
ユーザーを徐々に増やしていく設定にすると、
どれくらいのユーザー数でパフォーマンスが変化するかをテストすることができます。
Advanced optionsでは負荷テストの実行時間を指定できます。
ユーザー1人あたりのリクエストの頻度はソースコードで設定できます。
以下のように、wait_timeというクラス変数で設定します。
between(1, 3)のように指定すると、タスクの実行後に1秒から3秒の間待機します。
class APITestUser(HttpUser):
wait_time = between(1, 3)
@task(3)
def test_hello_endpoint(self):
self.client.get("/api/v1/hello", headers=self.headers)wait_timeにはconstantで固定値を設定することもできます。
以下のように小数も指定できます。
class APITestUser(HttpUser):
wait_time = constant(0.5)
@task(3)
def test_hello_endpoint(self):
self.client.get("/api/v1/hello", headers=self.headers)@taskの引数はweightです。
weightの値に応じて実行するタスクが選択されます。
Locustの起動後の画面でSTARTボタンを押すと、テストを開始することができます。
テストを開始すると以下のような画面が表示されます。
それぞれのケースの処理時間などが分かります。

テスト結果を以下のようなグラフで確認することもできます。

時間とともに増加するユーザー数やリクエスト数と、
レスポンス時間を対応させて確認することができます。
テスト結果はDOWNLOAD DATAの画面で取得することができますが、Locustを停止すると消えてしまうので、停止する前に取得しておく必要があります。
まとめ
今回はAIを活用してLocustでの負荷テストの準備をする方法についての内容でした。
負荷テストの知識がなくてもテストを行えるように記事を書きましたが、知識の有無に関わらず、AIを活用することで短時間でテストを行うことができると思います。
この記事が今後負荷テストを行う際の参考になると良いです。
ブログの著者欄
採用情報
関連記事
KEYWORD
CATEGORY
-
技術情報(594)
-
イベント(237)
-
カルチャー(60)
-
デザイン(70)
TAG
- 5G
- AI
- AI TALK
- AI 機械学習強化学習
- AI/機械学習
- AIエージェント
- AIコーディング
- AI人財
- AI駆動
- Behind the Scenes
- BIT VALLEY
- blockchain
- ChatGPT
- ChatGPT Team
- Claude Team
- cloudflare
- cloudnative
- CNDO
- CNDT
- CODE BLUE
- ConoHa
- ConoHa VPS
- CSS
- CTF
- Designship
- developer
- DevRel
- DevSecOpsThon
- Docker
- DTF
- Engineering Journey
- expert
- EXPERT CROSS
- GMO AI&ロボティクス商事
- GMO AIR
- GMO DESIGN AWARD
- GMO Developers Day
- GMO Developers Night
- GMO Flatt Security
- GMO GPUクラウド
- GMO Hacking Night
- GMO kitaQ
- GMO SONIC
- GMOアドパートナーズ
- GMOアドマーケティング
- GMOインターネット
- GMOインターネットグループ
- GMOインターネットグループ陸上部
- GMOグローバルサイン
- GMOコネクト
- GMOサイバーセキュリティ byイエラエ
- GMOデジキッズ
- GMOブランドセキュリティ
- GMOペイメントゲートウェイ
- GMOペパボ
- GMOメディア
- GMO大会議
- GMO天秤AI
- Go
- Good Morning
- GPUクラウド
- GTB
- Hack-1グランプリ
- iOS
- IoT
- ISUCON
- Japan Drone
- JapanDrone
- Java
- JJUG
- K8s
- Kaigi on Rails
- Kids VALLEY
- LLM
- MCP
- MetaMask
- MySQL
- NFT
- OpenStack
- Perl
- PHP
- PHPcon
- PHPerKaigi
- Python
- RPA
- Ruby
- SECCON
- Selenium
- Spectrum Tokyo Meetup
- splunk
- SRE
- Takumi byGMO
- Terraform
- TypeScript
- UI/UX
- vibe
- VPN
- VS Code
- XSS
- ZTNA
- アドベントカレンダー
- インターンシップ
- インハウス
- お名前.com
- クリエイターインタビュー
- クリエイティブ
- コンテナ
- サイバーセキュリティ
- サマーインターン
- スクラム
- スペシャリスト
- セキュリティ
- ソフトウェアサプライチェーン
- チームビルディング
- デザイン
- ネットのセキュリティもGMO
- ハーネスエンジニアリング
- バックエンド
- ヒューマノイド
- ヒューマノイドロボット
- プログラミング教育
- ブロックチェーン
- フロントエンド
- ゆめみらいワーク
- リモートワーク
- レンタルサーバー
- ロボット
- 京大ミートアップ
- 国際ロボット展
- 基礎
- 多拠点開発
- 宮崎オフィス
- 応用
- 技育プロジェクト
- 技術広報
- 技術書典
- 新卒
- 新卒研修
- 映像
- 映像クリエイター
- 暗号
- 業務効率化
- 機械学習
- 決済
- 生成AI
- 脆弱性診断
- 開発者
PICKUP
-
デザインカンファレンス「Yoitoi Summit 2026」をGMOYours・フクラスにて開催!
デザイン
-
攻撃者優位の時代に問われる「使命感」 GMO Flatt Security&GMOサイバーセキュリティ byイエラエが描く、AI時代のセキュリティ構想(後編)ーEngineering Journey
技術情報
-
頂上と裾野の両方から「底上げ」 GMO Flatt Security&GMO サイバーセキュリティ byイエラエが支える、日本のサイバーセキュリティ(前編)ーEngineering Journey
技術情報
-
【開催レポート】八幡小学校 社会科見学 at GMO kitaQ
カルチャー
-
デザインコンテスト「GMO DESIGN AWARD 2026」開催決定!3年目のテーマは「トキメキ」
デザイン
-
ソフトウェアサプライチェーン攻撃から「エンジニアの背中」を守る。Takumi byGMO・「Guard」機能「Runner」機能 開発の舞台裏ーEngineering Journey
技術情報