<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>パフォーマンステスト - CayTech Lab</title>
	<atom:link href="https://caymezon.com/tag/%e3%83%91%e3%83%95%e3%82%a9%e3%83%bc%e3%83%9e%e3%83%b3%e3%82%b9%e3%83%86%e3%82%b9%e3%83%88/feed/" rel="self" type="application/rss+xml" />
	<link>https://caymezon.com</link>
	<description></description>
	<lastBuildDate>Mon, 17 Aug 2026 04:42:16 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=7.0.4</generator>

<image>
	<url>https://caymezon.com/wp-content/uploads/2026/01/cropped-CayTechLab-32x32.jpg</url>
	<title>パフォーマンステスト - CayTech Lab</title>
	<link>https://caymezon.com</link>
	<width>32</width>
	<height>32</height>
</image> 
	<atom:link rel='hub' href='https://caymezon.com/?pushpress=hub'/>
	<item>
		<title>JMeterでシナリオを記録する実践ガイド（HTTP(S) Test Script Recorder）</title>
		<link>https://caymezon.com/jmeter-scenario-recording-guide/</link>
					<comments>https://caymezon.com/jmeter-scenario-recording-guide/#respond</comments>
		
		<dc:creator><![CDATA[caymezon]]></dc:creator>
		<pubDate>Mon, 17 Aug 2026 04:42:16 +0000</pubDate>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[HTTP(S) Test Script Recorder]]></category>
		<category><![CDATA[JMeter]]></category>
		<category><![CDATA[QA]]></category>
		<category><![CDATA[Udemy]]></category>
		<category><![CDATA[オンライン講座]]></category>
		<category><![CDATA[パフォーマンステスト]]></category>
		<category><![CDATA[負荷テスト]]></category>
		<guid isPermaLink="false">https://caymezon.com/jmeter-scenario-recording-guide/</guid>

					<description><![CDATA[<p>目次 はじめにこの記事で分かることHTTP(S) Test Script Recorderとは手動でリクエストを組むより効率的な理由Recorderの設定手順全体構成静的リソースを除外するフィルタ設定（重要）プロキシ設定 [&#8230;]</p>
<p>The post <a href="https://caymezon.com/jmeter-scenario-recording-guide/">JMeterでシナリオを記録する実践ガイド（HTTP(S) Test Script Recorder）</a> first appeared on <a href="https://caymezon.com">CayTech Lab</a>.</p>]]></description>
										<content:encoded><![CDATA[<div id="toc" class="toc tnt-number toc-center tnt-number border-element"><input type="checkbox" class="toc-checkbox" id="toc-checkbox-2" checked><label class="toc-title" for="toc-checkbox-2">目次</label>
    <div class="toc-content">
    <ol class="toc-list open"><li><a href="#toc1" tabindex="0">はじめに</a></li><li><a href="#toc2" tabindex="0">この記事で分かること</a></li><li><a href="#toc3" tabindex="0">HTTP(S) Test Script Recorderとは</a><ol><li><a href="#toc4" tabindex="0">手動でリクエストを組むより効率的な理由</a></li></ol></li><li><a href="#toc5" tabindex="0">Recorderの設定手順</a><ol><li><a href="#toc6" tabindex="0">全体構成</a></li><li><a href="#toc7" tabindex="0">静的リソースを除外するフィルタ設定（重要）</a></li><li><a href="#toc8" tabindex="0">プロキシ設定（ブラウザ側）</a></li><li><a href="#toc9" tabindex="0">HTTPS環境での証明書設定</a></li></ol></li><li><a href="#toc10" tabindex="0">シナリオを記録する具体的な流れ</a><ol><li><a href="#toc11" tabindex="0">Step 1: 記録を開始する</a></li><li><a href="#toc12" tabindex="0">Step 2: ブラウザで一連の業務操作を行う</a></li><li><a href="#toc13" tabindex="0">Step 3: 記録を停止する</a></li><li><a href="#toc14" tabindex="0">Step 4: 記録内容を確認する</a></li><li><a href="#toc15" tabindex="0">Step 5: プロキシ設定を元に戻す</a></li></ol></li><li><a href="#toc16" tabindex="0">記録後のシナリオ整理</a><ol><li><a href="#toc17" tabindex="0">1. 不要なリクエストの削除</a></li><li><a href="#toc18" tabindex="0">2. リクエストへの名前付け</a></li><li><a href="#toc19" tabindex="0">3. Think Time（操作間隔）の調整</a></li></ol></li><li><a href="#toc20" tabindex="0">jmxファイルとして保存・管理するポイント</a></li><li><a href="#toc21" tabindex="0">AIエージェントにシナリオを解析・整理させる活用アイデア</a></li><li><a href="#toc22" tabindex="0">まとめ</a></li></ol>
    </div>
  </div>

<h2><span id="toc1">はじめに</span></h2>
<p>JMeterで負荷テストを組む際、最初の壁になりやすいのが「テストシナリオ（HTTPリクエストの並び）をどう作るか」です。ログイン→画面遷移→データ登録、といった一連の業務操作をHTTPリクエストとして手作業で組み立てるのは非常に骨が折れますが、JMeterには<strong>HTTP(S) Test Script Recorder</strong>というブラウザ操作をそのまま記録できる機能が用意されています。</p>
<p>この記事は、実際にJava製のWebアプリケーションを対象にRecorderを使ってシナリオを記録した実務経験をもとに、手順と実際にハマったポイントをまとめた実践ガイドです。</p>
<blockquote>
<p>まだJMeterを触ったことがない方は、先に基本編（<a href="/jmeter-overview-guide/">JMeterとは？基本概念とインストール</a>）で全体像とインストール方法を確認しておくことをおすすめします。この記事はJMeterのインストールが完了している前提で、シナリオ記録の手順にフォーカスします。</p>
</blockquote>
<p>体系的にJMeterを学びたい方には、Udemyの講座も選択肢になります。特に<a href="https://trk.udemy.com/2R7zvg">JMeter — Complete Performance & Load Testing Bootcamp</a>（Vishwanatha Hebbar講師）は、この記事のテーマであるHTTP(S) Test Script Recorderの使い方に14分程度の専用レクチャーを割いて解説しており、証明書設定やBlazeMeterプラグインとの使い分けまでカバーしています。全25セクション・約36時間とボリュームがあるため、記録以外の負荷テスト全体（シナリオ設計・実行・結果分析）まで体系的に学びたい人に向いています。</p>
<p>👉 <a href="https://trk.udemy.com/2R7zvg">講座の詳細を見る（Udemyで確認）</a></p>
<hr>
<h2><span id="toc2">この記事で分かること</span></h2>
<ul>
<li>HTTP(S) Test Script Recorderとは何か、手動でHTTPリクエストを組むより何が効率的なのか</li>
<li>Recorderの設定手順（プロキシ設定・証明書設定を含む）</li>
<li>ブラウザ操作をキャプチャしてシナリオを記録する具体的な流れ</li>
<li>記録後にやっておくべきシナリオ整理（不要なリクエストの除去・静的リソースの除外設定）</li>
<li>jmxファイルとして保存・管理する際のポイント</li>
<li>AIエージェント（Claude Code等）に記録済みシナリオを解析・整理させる活用アイデア</li>
</ul>
<hr>
<h2><span id="toc3">HTTP(S) Test Script Recorderとは</span></h2>
<p>HTTP(S) Test Script Recorderは、JMeterが内蔵しているローカルプロキシサーバーです。ブラウザの通信をこのプロキシ経由に設定した状態で画面を操作すると、ブラウザとサーバーの間でやり取りされたHTTPリクエストをJMeterがそのままキャプチャし、テスト計画の中にHTTPリクエストサンプラーとして自動で並べてくれます。</p>
<p>JMeter 5.x系では、日本語UIでは「<strong>HTTPプロキシサーバ</strong>」という名前で表示されます。内部的な機能名（HTTP(S) Test Script Recorder）と日本語表示名（HTTPプロキシサーバ）が異なるため、日本語版JMeterでメニューを探すときは「Non-Testエレメント → HTTPプロキシサーバ」を選ぶ点に注意してください。</p>
<h3><span id="toc4">手動でリクエストを組むより効率的な理由</span></h3>
<table>
<thead>
<tr>
<th>方法</th>
<th>手間</th>
<th>正確性</th>
</tr>
</thead>
<tbody>
<tr>
<td>手動でHTTPリクエストサンプラーを組む</td>
<td>パラメータ・ヘッダー・Cookieを1件ずつ手打ちする必要があり非常に時間がかかる</td>
<td>入力ミスが起きやすい、セッション管理系のパラメータを見落としやすい</td>
</tr>
<tr>
<td>Recorderで記録</td>
<td>ブラウザで通常通り操作するだけ</td>
<td>実際に発生したリクエストをそのまま取得できるため抜け漏れが少ない</td>
</tr>
</tbody>
</table>
<p>特に、ログイン後に発行されるセッションID・CSRFトークンのような<strong>動的なパラメータ</strong>は、手動で組むと見落としがちです。Recorderであれば実際の通信をそのままキャプチャするため、まず「動いているシナリオ」を素早く作れるのが最大のメリットです（動的パラメータの変数化そのものは記録後の別作業になります。この点は<a href="/jmeter-session-key-testing-guide/">sessionKey動的化のハマりどころ</a>で詳しく扱います）。</p>
<hr>
<h2><span id="toc5">Recorderの設定手順</span></h2>
<h3><span id="toc6">全体構成</span></h3>
<p>まずテスト計画に以下の要素を追加します。</p>
<pre><code class="language-plaintext">テスト計画
└── スレッドグループ
    ├── HTTPクッキーマネージャ        ← セッション維持に必須
    └── 記録コントローラ              ← 記録の格納先
              （日本語版では「記録コントローラ」、英語版では Recording Controller）
テスト計画（直下）
└── HTTPプロキシサーバ                ← プロキシ本体
              （英語版では HTTP(S) Test Script Recorder）</code></pre>
<ol>
<li><strong>スレッドグループを追加</strong><br />テスト計画を右クリック → 追加 → Threads(Users) → スレッドグループ</li>
<li><strong>HTTPクッキーマネージャを追加</strong><br />スレッドグループを右クリック → 追加 → 設定エレメント → HTTPクッキーマネージャ（設定はデフォルトのままでOK）。セッションCookieを維持するために、記録前に必ず入れておきます。</li>
<li><strong>記録コントローラを追加</strong><br />スレッドグループを右クリック → 追加 → ロジックコントローラ → 記録コントローラ（記録されたリクエストの格納先になります）</li>
<li><strong>HTTPプロキシサーバを追加</strong><br />テスト計画を右クリック → 追加 → Non-Testエレメント → HTTPプロキシサーバ
<ul>
<li>ポート: <code>8888</code>（デフォルトのままでOK）</li>
<li>対象となるコントローラ: 手順3で作った「記録コントローラ」を選択</li>
</ul>
</li>
</ol>
<p>この「対象となるコントローラ」の指定を間違えると、記録自体は動いているのにリクエストがどこにも格納されない、という事象が起きます。記録が終わったのに記録コントローラの下が空、という場合はまずここを疑ってください。</p>
<h3><span id="toc7">静的リソースを除外するフィルタ設定（重要）</span></h3>
<p>HTTPプロキシサーバの「Requests Filtering」タブにある**「除外するパターン」**に、以下を1行ずつ追加します。</p>
<pre><code class="language-plaintext">.*\.css
.*\.js
.*\.png
.*\.gif
.*\.jpg
.*\.ico
.*\.woff
.*\.woff2
.*\.ttf
.*\.svg</code></pre>
<p>これを設定しておかないと、画面を1つ開くだけでCSS・JS・画像などの静的リソースへのリクエストが何十件も記録され、業務ロジックに関係するリクエストが埋もれてしまいます。実務では、この設定を忘れたまま記録したところ、本来25件程度で済むはずの業務リクエストに対して静的リソースが1,000件以上記録されてしまい、後から手作業で選別する羽目になったことがありました。<strong>記録を始める前に必ず設定しておく</strong>ことを強くおすすめします。</p>
<blockquote>
<p><strong>つまずきポイント</strong>: 除外パターンは「1行に1パターン」で登録する必要があります。カンマ区切りやスペース区切りで1行にまとめて入力すると正規表現として認識されず、除外が効きません。「追加」ボタンで1行ずつ登録してください。</p>
</blockquote>
<p><!-- ![HTTPプロキシサーバのRequests Filtering設定画面](images/proxy-filtering-settings.jpg) --></p>
<h3><span id="toc8">プロキシ設定（ブラウザ側）</span></h3>
<p>Windowsのシステムプロキシ設定を、JMeterのプロキシ（<code>localhost:8888</code>）経由に切り替えます。</p>
<ol>
<li>Windowsの検索バーで「プロキシ」→「プロキシの設定を変更する」を開く</li>
<li>「自動プロキシセットアップ」の「セットアップスクリプトを使う」を<strong>オフ</strong>にする</li>
<li>「手動プロキシセットアップ」で以下を設定
<ul>
<li>プロキシサーバーを使う: <strong>オン</strong></li>
<li>アドレス: <code>localhost</code></li>
<li>ポート: <code>8888</code></li>
</ul>
</li>
<li>「保存」</li>
</ol>
<blockquote>
<p>⚠️ この設定をしている間は、通常のWebアクセス（他サイトの閲覧等）ができなくなります。記録が終わったら忘れずに元に戻してください（手順は後述）。</p>
</blockquote>
<h3><span id="toc9">HTTPS環境での証明書設定</span></h3>
<p>対象アプリがHTTPSの場合、JMeterが動的に生成する証明書をブラウザ側で信頼する必要があります。プロキシ経由でアクセスすると証明書の警告ダイアログが出るので、内容を確認したうえで「信頼する」を選択してください。対象がHTTP（暗号化なし）の場合はこの手順は不要です。</p>
<hr>
<h2><span id="toc10">シナリオを記録する具体的な流れ</span></h2>
<h3><span id="toc11">Step 1: 記録を開始する</span></h3>
<p>HTTPプロキシサーバの設定画面で「<strong>開始</strong>」ボタンを押します。証明書の警告ダイアログが出た場合はここで許可を確定させてください（自動的に閉じてしまい許可し忘れる、というトラブルも実際に起きたので、ダイアログが出たら確実にクリックすることをおすすめします）。</p>
<p>「開始」を押した後、ボタンが「停止」に変わってアクティブになっていることを確認します。ここがグレーアウトしたまま、あるいは反応がない場合はプロキシが正常に起動していない可能性があります。</p>
<h3><span id="toc12">Step 2: ブラウザで一連の業務操作を行う</span></h3>
<p>記録対象のブラウザでアプリにアクセスし、テストしたい一連の操作を通しで行います。例えば以下のような流れです。</p>
<pre><code class="language-plaintext">① ログイン画面を開く
② ID・パスワードを入力してログイン
③ メニュー画面から対象機能を選択
④ 一覧画面で対象データを選択して詳細画面に遷移
⑤ 明細ごとに入力・登録操作を繰り返す（複数件ある場合はその件数分）
⑥ 画面を閉じてメニューに戻る</code></pre>
<p>セッションはログインから始まるため、<strong>記録は必ずログイン操作から含める</strong>のが基本です。途中から記録を始めると、後からログイン部分だけ別途組み立て直す手間が発生します。</p>
<p>操作中の注意点は以下の3つです。</p>
<ul>
<li><strong>普通の操作ペースで行う</strong>: 速すぎる連続操作は記録漏れの原因になることがあります</li>
<li><strong>余計な操作をしない</strong>: 記録中に別タブで無関係なサイトを開いたりすると、それも全部記録されてしまいます</li>
<li><strong>できれば1回でミスなく通す</strong>: 記録はやり直せますが、途中で操作ミスがあると後の整理が余計に大変になります。可能であれば事前にテストデータを用意し、1回できれいに操作を通すのが理想です</li>
</ul>
<h3><span id="toc13">Step 3: 記録を停止する</span></h3>
<p>一連の操作が終わったら、HTTPプロキシサーバの設定画面で「<strong>停止</strong>」ボタンを押します。</p>
<h3><span id="toc14">Step 4: 記録内容を確認する</span></h3>
<p>左ペインの「記録コントローラ」の左にある展開マーク（▶）をクリックし、配下にHTTPリクエストが時系列で並んでいるかを確認します。</p>
<pre><code class="language-plaintext">記録コントローラ
├── /webapp/login.do
├── /webapp/menu/init.do
├── /webapp/menu/select.do
├── /webapp/detail/init.do
├── /webapp/detail/regist.do  ← 1件目
├── /webapp/detail/regist.do  ← 2件目
├── ...
└── /webapp/detail/regist.do  ← N件目</code></pre>
<p><strong>何も表示されていない場合は記録に失敗しています。</strong> よくある原因は以下の3つです。</p>
<table>
<thead>
<tr>
<th>原因</th>
<th>確認方法</th>
</tr>
</thead>
<tbody>
<tr>
<td>プロキシ設定が正しくない</td>
<td>ブラウザからプロキシ経由でアプリにアクセスできているか（アクセスできない時点で記録以前の問題）</td>
</tr>
<tr>
<td>対象となるコントローラの指定ミス</td>
<td>HTTPプロキシサーバの設定で、記録コントローラが正しく選択されているか</td>
</tr>
<tr>
<td>ブラウザが実際にはプロキシを経由していない</td>
<td>特にイントラネット環境で発生しやすい落とし穴です。次の項で詳しく説明します</td>
</tr>
</tbody>
</table>
<blockquote>
<p><strong>実務で実際にハマった例</strong>: プロキシ設定・対象コントローラの指定はすべて正しいのに、ブラウザは問題なくアプリにアクセスできて、それでも記録コントローラが空、という状態に遭遇しました。原因は「ローカル（イントラネット）アドレスにはプロキシサーバーを使わない」というWindowsのプロキシ設定でした。社内向けのホスト名へのアクセスが「ローカルアドレス」と判定されてプロキシがバイパスされ、JMeterを経由していなかったのです。イントラネット環境の対象システムで記録がうまくいかない場合は、この設定と、ブラウザ起動時に<code>--proxy-server</code>オプションでプロキシを直接指定する方法を試してみてください。このあたりの一連のトラブルシューティングの流れは、<a href="/jmeter-ai-troubleshooting-story/">AIエージェントとのトラブルシューティング体験記</a>で詳しく紹介しています。</p>
</blockquote>
<h3><span id="toc15">Step 5: プロキシ設定を元に戻す</span></h3>
<p>記録が終わったら、Windowsのプロキシ設定を元に戻します。</p>
<ol>
<li>「自動プロキシセットアップ」の「セットアップスクリプトを使う」を<strong>オン</strong>に戻す</li>
<li>「手動プロキシセットアップ」の「プロキシサーバーを使う」を<strong>オフ</strong>にする</li>
<li>「保存」</li>
</ol>
<p>これを忘れると、通常のWebアクセスができない状態が続いてしまうので注意してください。</p>
<hr>
<h2><span id="toc16">記録後のシナリオ整理</span></h2>
<p>Recorderで記録した直後のシナリオは、そのままでは負荷テストに使いにくい状態になっていることがほとんどです。以下の整理を行いましょう。</p>
<h3><span id="toc17">1. 不要なリクエストの削除</span></h3>
<p>除外フィルタを設定し忘れていた場合や、フィルタの設定ミス（前述の「1行1パターン」を守っていない等）があった場合、静的リソースへのリクエストが大量に記録されてしまいます。この場合は左ペインで該当リクエストを選択し、手作業で削除します。</p>
<p>また、<code>/favicon.ico</code>や特定ブラウザの自動更新チェック用リクエスト（<code>/connecttest.txt</code>等）のように、業務ロジックと無関係なリクエストが紛れ込むこともあります。除外パターンに追加しておくか、記録後に個別に削除してください。</p>
<h3><span id="toc18">2. リクエストへの名前付け</span></h3>
<p>記録直後のリクエスト名はURLのパスがそのまま使われるため、どの業務操作に対応するのか分かりにくいことがあります。「ログイン」「詳細画面表示」「1件目登録」のように分かりやすい名前を付け直しておくと、後で結果ツリーを見たときの可読性が大きく上がります。</p>
<h3><span id="toc19">3. Think Time（操作間隔）の調整</span></h3>
<p>Recorderは実際の操作間隔をそのまま記録しないため、必要に応じてタイマー（一様乱数タイマー等）を追加し、実際のユーザーの操作間隔に近い待機時間を設定します。本番のアクセスログから実際の操作間隔を逆算する方法は、<a href="/jmeter-access-log-scenario-design/">本番アクセスログからのシナリオ設計</a>で扱います。</p>
<hr>
<h2><span id="toc20">jmxファイルとして保存・管理するポイント</span></h2>
<ul>
<li><strong>業務パターンごとにファイルを分ける</strong>: 複数の業務パターンを記録する場合、最初から1つの巨大なjmxにまとめようとせず、パターンごとに個別のjmxファイルとして保存しておくと、それぞれを単体でデバッグしやすくなります。最終的に複数パターンを統合する場合も、個別ファイルが手元に残っていれば問題箇所の切り分けがしやすくなります。</li>
<li><strong>命名規則を決めておく</strong>: 「対象パターン名_スレッド数_対象環境」のように命名規則を決めておくと、後から見返したときにどの条件で記録・実行したファイルか一目で分かります。</li>
<li><strong>フォルダ構成を最初に決めておく</strong>: jmxファイル置き場、テストデータ（CSV）置き場、実行ログ・レポート出力先を分けておくと、ファイルが増えてきたときに管理しやすくなります。</li>
</ul>
<pre><code class="language-plaintext">project/
├── jmx/     ← テスト計画ファイル（.jmx）
├── data/    ← CSVデータ（ユーザーID、テストデータ等）
├── log/     ← 本番アクセスログの抽出結果など
└── report/  ← 実行結果レポートの出力先</code></pre>
<ul>
<li><strong>バックアップを取ってから編集する</strong>: jmxはXML形式のテキストファイルですが、後述するように機械的な文字列置換（正規表現抽出器の追加やパラメータの変数化など）を行うことが多く、編集に失敗するとXML構造が壊れて開けなくなることがあります。編集前に日時付きでバックアップを取っておく習慣をつけておくと安心です。</li>
</ul>
<hr>
<h2><span id="toc21">AIエージェントにシナリオを解析・整理させる活用アイデア</span></h2>
<p>記録直後のjmxファイルは1行の巨大なXMLになっていることが多く、人間の目でリクエストの中身をひとつずつ追うのは非効率です。ここでClaude CodeのようなAIエージェントを使うと、以下のような作業を効率化できます。</p>
<ul>
<li><strong>リクエスト一覧の抽出</strong>: jmxファイル内の<code>testname</code>属性（各リクエストサンプラーの名前）を抽出させ、記録されたリクエストの全体像を一覧化させる</li>
<li><strong>記録済みシナリオの解析</strong>: 「このjmxファイルにはどんな業務操作が何件記録されているか整理して」と依頼し、記録内容の棚卸しをさせる</li>
<li><strong>複数jmxファイルの統合支援</strong>: あるパターンのシナリオ（例: ログイン〜A画面操作）と別のパターンのシナリオ（例: ログイン〜B画面操作）を1本の統合シナリオにまとめたい場合、それぞれのXMLブロックのうち必要な部分（ログイン部分の重複を除いた業務リクエスト群）を特定し、統合用のスクリプトを組んでもらう</li>
<li><strong>固定値のパラメータ化</strong>: 記録時に埋め込まれてしまったID等の固定値を、CSVデータや変数に置き換えるスクリプトを組んでもらう（sessionKeyのような動的パラメータの変数化については<a href="/jmeter-session-key-testing-guide/">sessionKey動的化のハマりどころ</a>で詳しく扱います）</li>
</ul>
<p>実務で実際にAIエージェントにPowerShellスクリプトでjmxファイルの一括置換をやってもらった際、<strong>PowerShellスクリプト（.ps1）ファイル自体の文字コードが原因で日本語部分が文字化けし、置換がうまく動かない</strong>というトラブルに繰り返し遭遇しました。Windows PowerShell 5.1は、<code>.ps1</code>ファイルに日本語（マルチバイト文字）を含む場合、<strong>BOM付きUTF-8で保存しないと正しく解釈できない</strong>という制約があります。BOMなしのUTF-8で保存すると、システムの既定コードページ（日本語環境ではShift-JIS）として読み込まれてしまい、シングルクォートの対応がずれる、<code>printf</code>の書式指定が文字化けする、といった不可解なエラーが発生します。</p>
<p>AIエージェントにjmxファイルの一括編集用スクリプトを組んでもらう際は、<strong>「日本語を含むPowerShellスクリプトは必ずBOM付きUTF-8で保存すること」を明示的に指示しておく</strong>か、そもそもスクリプト内に日本語のリテラルを含めず外部データファイル（CSV/TSV等）から読み込む方式にしておくと、無用なトラブルを避けられます。</p>
<hr>
<h2><span id="toc22">まとめ</span></h2>
<ul>
<li>HTTP(S) Test Script Recorder（日本語版では「HTTPプロキシサーバ」）を使えば、ブラウザ操作をそのままJMeterのテストシナリオとして記録できる</li>
<li>記録前に「除外するパターン」で静的リソースを除外しておくのが重要（1行1パターンで登録すること）</li>
<li>プロキシ設定・証明書設定・対象コントローラの指定など、記録がうまくいかない原因はいくつかのパターンに絞り込める。特にイントラネット環境ではローカルアドレスのプロキシバイパスに注意</li>
<li>記録後は不要なリクエストの削除・命名・Think Timeの調整といった整理作業が必要</li>
<li>jmxファイルの整理・統合・パラメータ化はAIエージェントに任せると効率化できるが、PowerShellスクリプトの文字コード（BOM付きUTF-8）には注意が必要</li>
</ul>
<p>シナリオが記録できたら、次は実際の業務利用パターンに近づけるための設計や、動的パラメータへの対応が必要になります。</p>
<ul>
<li>次のステップ①: <a href="/jmeter-access-log-scenario-design/">本番アクセスログからのシナリオ設計</a> — 本番のアクセスログを使って、より実態に近い操作パターン・Think Timeを設計する方法</li>
<li>次のステップ②: <a href="/jmeter-session-key-testing-guide/">sessionKey動的化のハマりどころ</a> — 記録時に固定値として埋め込まれてしまう動的パラメータへの対処法</li>
</ul>
<p>体系的にJMeterを学びたい場合は、記事冒頭で紹介したUdemy講座も参考にしてみてください。HTTP(S) Test Script Recorderの使い方だけでなく、負荷テスト全体の設計・実行・分析までカバーされています。</p><p>The post <a href="https://caymezon.com/jmeter-scenario-recording-guide/">JMeterでシナリオを記録する実践ガイド（HTTP(S) Test Script Recorder）</a> first appeared on <a href="https://caymezon.com">CayTech Lab</a>.</p>]]></content:encoded>
					
					<wfw:commentRss>https://caymezon.com/jmeter-scenario-recording-guide/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>JMeterとは？基本概念とインストール・環境構築【Windows11対応】</title>
		<link>https://caymezon.com/jmeter-overview-guide/</link>
					<comments>https://caymezon.com/jmeter-overview-guide/#respond</comments>
		
		<dc:creator><![CDATA[caymezon]]></dc:creator>
		<pubDate>Mon, 17 Aug 2026 04:42:06 +0000</pubDate>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[AIエージェント]]></category>
		<category><![CDATA[Claude Code]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[JMeter]]></category>
		<category><![CDATA[パフォーマンステスト]]></category>
		<category><![CDATA[負荷テスト]]></category>
		<guid isPermaLink="false">https://caymezon.com/jmeter-overview-guide/</guid>

					<description><![CDATA[<p>目次 はじめにこの記事で分かることJMeterとは対応プロトコルJMeterでできることなぜAIエージェント（Claude Code等）と組み合わせると効率的かインストール手順（Windows11対応）Java実行環境の [&#8230;]</p>
<p>The post <a href="https://caymezon.com/jmeter-overview-guide/">JMeterとは？基本概念とインストール・環境構築【Windows11対応】</a> first appeared on <a href="https://caymezon.com">CayTech Lab</a>.</p>]]></description>
										<content:encoded><![CDATA[<div id="toc" class="toc tnt-number toc-center tnt-number border-element"><input type="checkbox" class="toc-checkbox" id="toc-checkbox-4" checked><label class="toc-title" for="toc-checkbox-4">目次</label>
    <div class="toc-content">
    <ol class="toc-list open"><li><a href="#toc1" tabindex="0">はじめに</a></li><li><a href="#toc2" tabindex="0">この記事で分かること</a></li><li><a href="#toc3" tabindex="0">JMeterとは</a><ol><li><a href="#toc4" tabindex="0">対応プロトコル</a></li><li><a href="#toc5" tabindex="0">JMeterでできること</a></li></ol></li><li><a href="#toc6" tabindex="0">なぜAIエージェント（Claude Code等）と組み合わせると効率的か</a></li><li><a href="#toc7" tabindex="0">インストール手順（Windows11対応）</a><ol><li><a href="#toc8" tabindex="0">Java実行環境の要件</a></li><li><a href="#toc9" tabindex="0">JMeter本体のダウンロード・インストール</a></li><li><a href="#toc10" tabindex="0">日本語化（任意）</a></li><li><a href="#toc11" tabindex="0">動作確認</a></li></ol></li><li><a href="#toc12" tabindex="0">基本的な画面構成・テスト計画の階層構造</a><ol><li><a href="#toc13" tabindex="0">スレッドグループ（Thread Group）</a></li><li><a href="#toc14" tabindex="0">HTTPリクエスト（HTTP Request Sampler）</a></li><li><a href="#toc15" tabindex="0">HTTPクッキーマネージャ</a></li><li><a href="#toc16" tabindex="0">タイマー（Timer）</a></li><li><a href="#toc17" tabindex="0">リスナー（結果の収集・表示）</a></li></ol></li><li><a href="#toc18" tabindex="0">Javaの知識があると理解が早くなる場面</a></li><li><a href="#toc19" tabindex="0">Udemy講座で体系的に学びたい方へ</a><ol><li><a href="#toc20" tabindex="0">Learn JMETER from Scratch on Live Apps -Performance Testing</a></li></ol></li><li><a href="#toc21" tabindex="0">このシリーズの構成</a></li><li><a href="#toc22" tabindex="0">まとめ</a></li></ol>
    </div>
  </div>

<h2><span id="toc1">はじめに</span></h2>
<p><strong>Apache JMeter</strong>は、Webアプリケーションの負荷テスト・性能テストに使われるオープンソースツールです。「本番リリース前に、想定される同時アクセス数に耐えられるか確認したい」「特定の画面だけレスポンスが遅くなる原因を調べたい」といった場面で使われます。</p>
<p>筆者は実務でJavaアプリの画面負荷テストにJMeterを使った経験があり、この記事はその実体験をベースにしています。本記事はJMeter入門シリーズの1本目として、<strong>JMeterの基本概念とインストール・環境構築</strong>を扱います。実際にシナリオを記録して負荷をかけるところまでは踏み込まず、まず「JMeterとは何か」「手元の環境をどう整えるか」を押さえることがゴールです。</p>
<p>さらにこのシリーズでは、JMeterの操作そのものだけでなく、<strong>Claude Codeなどの AIエージェントと組み合わせて負荷テストを進めるとどう効率化できるか</strong>という観点も扱っていきます。JMeterはGUI操作が中心の伝統的なツールですが、テスト計画ファイル（JMX）の中身はXMLテキストであり、設定エレメントの追加手順やエラーメッセージの調査はAIエージェントとの相性が良い作業です。</p>
<hr>
<h2><span id="toc2">この記事で分かること</span></h2>
<ul>
<li>Apache JMeterとは何か、何ができるツールなのか</li>
<li>JMeterとAIエージェントを組み合わせるメリット（シリーズ全体の導入）</li>
<li>Windows環境でのインストール手順とJavaの動作要件</li>
<li>テスト計画の基本的な階層構造（スレッドグループ・HTTPリクエストなど）</li>
<li>シリーズ後続記事（シナリオ記録・アクセスログ分析・sessionKey動的化・トラブルシューティング）への案内</li>
</ul>
<hr>
<h2><span id="toc3">JMeterとは</span></h2>
<p>Apache JMeterは、Apacheソフトウェア財団が開発するオープンソースの負荷テストツールです。Webアプリケーションを中心に、さまざまなプロトコルの性能・負荷テストを実施できます。</p>
<table>
<thead>
<tr>
<th>項目</th>
<th>内容</th>
</tr>
</thead>
<tbody>
<tr>
<td>正式名称</td>
<td>Apache JMeter</td>
</tr>
<tr>
<td>ライセンス</td>
<td>Apache License 2.0（無料）</td>
</tr>
<tr>
<td>実装言語</td>
<td>Java（GUI/CUIどちらの実行モードもあり）</td>
</tr>
<tr>
<td>動作要件</td>
<td>Java 8以上（最新版はJava 17以降を推奨）</td>
</tr>
<tr>
<td>公式サイト</td>
<td><a href="https://jmeter.apache.org/">https://jmeter.apache.org/</a></td>
</tr>
</tbody>
</table>
<h3><span id="toc4">対応プロトコル</span></h3>
<p>JMeterはHTTP/HTTPS以外にも幅広いプロトコルに対応しています。</p>
<ul>
<li><strong>HTTP/HTTPS</strong> — Webアプリの画面テスト（本シリーズで扱うメインの用途）</li>
<li><strong>JDBC</strong> — DBに対する直接の負荷テスト</li>
<li><strong>FTP</strong> — ファイル転送テスト</li>
<li><strong>SOAP/REST</strong> — Web APIのテスト</li>
<li><strong>LDAP</strong> — ディレクトリサービスのテスト</li>
<li><strong>JMS</strong> — メッセージキューのテスト</li>
<li><strong>TCP</strong> — 汎用TCP通信のテスト</li>
</ul>
<h3><span id="toc5">JMeterでできること</span></h3>
<ul>
<li>同時接続ユーザーのシミュレーション（数十〜数千ユーザー規模）</li>
<li>シナリオベースのテスト（ログイン→画面操作→ログアウトという一連の流れを再現）</li>
<li>レスポンスタイム・スループット（リクエスト/秒）の計測</li>
<li>リアルタイムグラフ表示</li>
<li>HTMLレポートの自動生成</li>
<li>CSV/XML形式での結果出力</li>
</ul>
<p>「Webサイトに一定数のアクセスが集中したときにどれくらいの応答時間になるか」「エラー率が上がり始めるアクセス数はどこか」といった問いに、実際に近い負荷をかけて答えを出せるのがJMeterの役割です。</p>
<hr>
<h2><span id="toc6">なぜAIエージェント（Claude Code等）と組み合わせると効率的か</span></h2>
<p>JMeterはGUIで設定エレメントをポチポチ追加していく操作が基本のツールです。一見AIエージェントとは縁が薄そうに見えますが、実務で使ってみると相性の良いポイントがいくつもあります。</p>
<table>
<thead>
<tr>
<th>場面</th>
<th>AIエージェントが役立つ理由</th>
</tr>
</thead>
<tbody>
<tr>
<td>テスト計画の設計相談</td>
<td>「スレッドグループを画面パターンごとに分けるべきか、1つにまとめるべきか」といった設計判断を、実務の制約（セッション管理の仕組みなど）を伝えながら相談できる</td>
</tr>
<tr>
<td>JMXファイルの中身の確認・一括置換</td>
<td>JMX（テスト計画ファイル）の実体はXMLテキストなので、正規表現抽出器の設定や固定値のパラメータ化を、GUI操作とファイル編集の両面から支援してもらえる</td>
</tr>
<tr>
<td>エラーメッセージの読み解き</td>
<td>「結果をツリーで表示」リスナーに出るレスポンスエラーやスタックトレースを貼り付けて、原因の仮説出しを手伝ってもらえる</td>
</tr>
<tr>
<td>手順の言語化・ドキュメント化</td>
<td>実施したテストシナリオや設定変更の経緯を、後から読み返せる形にまとめる作業を任せられる</td>
</tr>
</tbody>
</table>
<p>特に効果を感じたのは、<strong>「GUI操作の手順」と「JMXファイルの中身（XML）」を両方参照しながら会話できる</strong>点です。JMeterのGUIだけでは「今どこで何が起きているか」を追いにくい場面でも、AIエージェントにファイルの中身を見せながら質問すると、設定の食い違いに気づきやすくなります。</p>
<p>このシリーズの後続記事（シナリオ記録・アクセスログからのシナリオ設計・sessionKeyの動的化・実際のトラブルシューティング体験記）では、この組み合わせを具体的にどう使ったかを紹介していきます。</p>
<hr>
<h2><span id="toc7">インストール手順（Windows11対応）</span></h2>
<h3><span id="toc8">Java実行環境の要件</span></h3>
<p>JMeterはJavaで動作するツールのため、事前にJavaの実行環境（JRE または JDK）が必要です。</p>
<ul>
<li><strong>最低要件</strong>: Java 8以上</li>
<li><strong>推奨</strong>: Java 17以降（JMeterの最新安定版はJava 17以降を前提にしていることが多いため）</li>
<li>keytool（証明書関連のコマンド）を使う場合はJRE単体ではなくJDKが必要</li>
</ul>
<p>Windowsのコマンドプロンプトまたは PowerShell で、以下のコマンドを実行してJavaのバージョンを確認します。</p>
<pre><code class="language-powershell">java -version</code></pre>
<p>Javaが未インストール、またはバージョンが古い場合は、<a href="https://adoptium.net/">Eclipse Temurin</a>（旧AdoptOpenJDK）などから最新のJDKをインストールしておきます。</p>
<blockquote>
<p>補足：業務で使っているPCの場合、社内標準で古いJavaランタイムがインストール済みのケースもあります。その場合はJMeterのバージョン側をインストール済みのJavaバージョンに合わせて選ぶ（新しすぎるJMeterを使わない）という選択肢もあります。JMeterのバージョンはサーバー側のJavaバージョンに合わせる必要は必ずしもなく、<strong>手元の実行環境（クライアント側）のJavaバージョンに合わせる</strong>のが基本です。</p>
</blockquote>
<h3><span id="toc9">JMeter本体のダウンロード・インストール</span></h3>
<p>JMeterのインストールは、実行ファイルをインストーラーで入れる形式ではなく、<strong>ZIPファイルを展開するだけ</strong>で完了します。</p>
<ol>
<li><a href="https://jmeter.apache.org/download_jmeter.cgi">Apache JMeter公式サイトのダウンロードページ</a>にアクセスする</li>
<li>「Binaries」セクションから <code>apache-jmeter-x.x.x.zip</code> をダウンロードする</li>
<li>任意のフォルダ（例: <code>C:\tools\jmeter</code>）に展開する</li>
<li><code>bin</code> フォルダ内の <code>jmeter.bat</code> をダブルクリックして起動する</li>
</ol>
<pre><code class="language-plaintext">C:\tools\jmeter\
├── bin\
│   ├── jmeter.bat          ← Windowsでの起動用バッチ
│   ├── jmeter               ← macOS/Linux用シェルスクリプト
│   └── ...
├── lib\
├── docs\
└── ...</code></pre>
<p>起動すると、JMeterのGUI画面が立ち上がります。初回起動時は少し時間がかかることがありますが、エラーが出なければインストールは成功です。</p>
<h3><span id="toc10">日本語化（任意）</span></h3>
<p>JMeterのGUIは初期状態では英語表示ですが、メニューから日本語に切り替えられます。</p>
<pre><code class="language-plaintext">Options（オプション） &gt; Choose Language（言語選択） &gt; Japanese</code></pre>
<p>日本語化すると各項目のラベルが日本語になり、初学者には扱いやすくなります。ただし、Web検索で見つかる情報や公式ドキュメントは英語表記が前提になっていることが多いため、慣れてきたら英語表示のまま使うのも一つの選択です。</p>
<h3><span id="toc11">動作確認</span></h3>
<p>インストールが完了したら、起動時にエラーが出ていないかコンソールログ（<code>jmeter.bat</code> を実行したコマンドプロンプトの出力）を確認しておきます。特に以下のようなメッセージが出ていれば、Javaのバージョンとの紐付けも含めて正常に起動できています。</p>
<pre><code class="language-plaintext">Created the tree successfully using ...
Starting the test @ ...</code></pre>
<hr>
<h2><span id="toc12">基本的な画面構成・テスト計画の階層構造</span></h2>
<p>JMeterの操作を理解する上で最初に押さえておきたいのが、<strong>「テスト計画（Test Plan）」を頂点とした階層構造</strong>です。GUI画面の左ペインにはこの階層がツリー表示され、右クリックで各要素を追加していく操作が基本になります。</p>
<pre><code class="language-plaintext">テスト計画 (Test Plan)
├── スレッドグループ (Thread Group)         ← 仮想ユーザー数・ランプアップ時間・ループ回数
│   ├── HTTPリクエスト (HTTP Request)       ← 実際に送信するリクエストの定義
│   ├── HTTPリクエスト ...
│   ├── タイマー (Timer)                    ← リクエスト間の待機時間
│   ├── アサーション (Assertion)            ← レスポンス内容の検証
│   └── 前処理/後処理                       ← 動的パラメータの抽出など
├── HTTPクッキーマネージャ                   ← セッション管理（Cookie）
├── HTTP ヘッダマネージャ                    ← 共通ヘッダの設定
├── CSVデータセット                         ← テストデータの外部ファイル読み込み
└── リスナー (Listener)                     ← 結果の表示・集計
    ├── 結果をツリーで表示
    ├── 統計レポート
    └── グラフ結果</code></pre>
<p><!-- ![JMeterのテスト計画ツリー構造のスクリーンショット](images/test-plan-tree.jpg) --></p>
<h3><span id="toc13">スレッドグループ（Thread Group）</span></h3>
<p>仮想ユーザーの振る舞いを定義する、最も重要なコンポーネントです。</p>
<table>
<thead>
<tr>
<th>設定項目</th>
<th>意味</th>
<th>例</th>
</tr>
</thead>
<tbody>
<tr>
<td>スレッド数</td>
<td>同時に実行する仮想ユーザー数</td>
<td>50</td>
</tr>
<tr>
<td>Ramp-Up期間</td>
<td>全スレッドが起動しきるまでの秒数</td>
<td>10秒（5ユーザー/秒のペースで増加）</td>
</tr>
<tr>
<td>ループ回数</td>
<td>各スレッドが繰り返す回数</td>
<td>10回、または無限</td>
</tr>
</tbody>
</table>
<h3><span id="toc14">HTTPリクエスト（HTTP Request Sampler）</span></h3>
<p>実際にサーバーへ送信するリクエストを定義する要素です。プロトコル・サーバー名・ポート・メソッド（GET/POST）・パス・パラメータなどを設定します。</p>
<h3><span id="toc15">HTTPクッキーマネージャ</span></h3>
<p>多くのWebアプリはログイン後のセッションをCookie（<code>JSESSIONID</code>など）で管理しています。HTTPクッキーマネージャを追加しておくと、JMeterがこのCookieを自動的に管理し、ログイン後のセッションを維持したまま複数リクエストを実行できます。ログインが必要なシステムを対象にする場合は、ほぼ必須の設定です。</p>
<h3><span id="toc16">タイマー（Timer）</span></h3>
<p>実際のユーザーは画面を見ながら次の操作をするまでに間（Think Time）を置きます。この間隔を再現するのがタイマーです。</p>
<table>
<thead>
<tr>
<th>種類</th>
<th>用途</th>
</tr>
</thead>
<tbody>
<tr>
<td>固定タイマー</td>
<td>常に一定間隔（例: 2秒）で次のリクエストを送る</td>
</tr>
<tr>
<td>ガウシアンタイマー</td>
<td>ランダムな待機時間で、実ユーザーの操作に近い揺らぎを再現する</td>
</tr>
<tr>
<td>均一乱数タイマー</td>
<td>指定した範囲内でランダムな待機時間にする</td>
</tr>
</tbody>
</table>
<h3><span id="toc17">リスナー（結果の収集・表示）</span></h3>
<table>
<thead>
<tr>
<th>リスナー名</th>
<th>用途</th>
</tr>
</thead>
<tbody>
<tr>
<td>結果をツリーで表示</td>
<td>デバッグ用。個々のリクエスト/レスポンスの詳細を確認する</td>
</tr>
<tr>
<td>統計レポート</td>
<td>平均・最大・最小レスポンスタイムやエラー率を集計表示する</td>
</tr>
<tr>
<td>グラフ結果</td>
<td>レスポンスタイムの時系列変化をグラフで確認する</td>
</tr>
<tr>
<td>集約レポート</td>
<td>サンプラーごとの集約統計を表形式で確認する</td>
</tr>
</tbody>
</table>
<blockquote>
<p>注意点として、リスナーで結果を詳細表示しながらの実行（GUIモード）はJMeter自体がリソースを消費し、負荷テストの結果に影響を与えます。本番相当の負荷をかける段階では、GUIを使わない<strong>CUIモード</strong>（<code>jmeter -n -t test.jmx -l result.jtl -e -o report/</code>）での実行が推奨されます。この使い分けはシリーズ後続記事で詳しく扱います。</p>
</blockquote>
<hr>
<h2><span id="toc18">Javaの知識があると理解が早くなる場面</span></h2>
<p>JMeter自体はJava製のツールであり、JavaのWebアプリ（Spring Bootなど）を対象にテストする場合、Java側の知識があると原因調査がスムーズになる場面が多くあります。例えばセッション管理の仕組みやCSRFトークンの扱いは、Javaのフレームワークの動作を理解しているかどうかで調査スピードが変わってきます。</p>
<p>これからJavaを体系的に学びたい・資格取得と合わせて基礎を固めたいという方は、以下の記事も参考にしてください。</p>
<p>👉 <a href="https://caymezon.com/java-silver-udemy-courses-guide/">Java Silver（Oracle認定資格） おすすめUdemy講座比較【2026年版】</a></p>
<hr>
<h2><span id="toc19">Udemy講座で体系的に学びたい方へ</span></h2>
<p>ハンズオンで手を動かす前に、JMeterの操作全体を動画でまとめて学びたい場合は、以下の講座が候補になります。</p>
<h3><span id="toc20">Learn JMETER from Scratch on Live Apps -Performance Testing</span></h3>
<p>👉 <a href="https://trk.udemy.com/OYE0Mz">講座の詳細を見る（Udemyで確認）</a></p>
<p>8時間19分・48講義というボリュームで、JMeterの基本操作から実際のアプリケーションを使った負荷テストまでを一通り扱う入門〜初中級向け講座です。評価4.6・レビュー26,000件超、受講者数12万人超と、JMeter関連講座の中でも特に実績が豊富です。講義は英語ですが、Udemyの自動翻訳字幕（日本語含む）に対応しています。</p>
<p><strong>メリット</strong></p>
<ul>
<li>受講者数12万人超・評価4.6という、この分野では際立った実績</li>
<li>「ゼロから」を掲げている通り、JMeter未経験でも迷わず追える構成</li>
<li>スレッドグループ・リスナー・アサーション・コントローラー・タイマー・正規表現抽出など、本記事や後続記事で扱う要素を体系的にカバー</li>
</ul>
<p><strong>正直なデメリット</strong></p>
<ul>
<li>講義そのものは英語（自動翻訳字幕での視聴が前提になる）</li>
<li>実務の細かいユースケース（社内システム特有のセッション管理など）までは当然カバーしていないため、応用は自分で行う必要がある</li>
</ul>
<blockquote>
<p><strong>こんな人におすすめ</strong>：この記事でJMeterの概念は掴めたので、次は動画で実際の操作画面を見ながら体系的に基礎を固めたい人。</p>
</blockquote>
<hr>
<h2><span id="toc21">このシリーズの構成</span></h2>
<p>本記事はJMeter実務体験記シリーズの1本目（基礎編）です。実際にシナリオを記録して負荷をかけ、トラブルを解決していく後続記事もあわせてご覧ください。</p>
<ul>
<li><strong>① JMeterとは？基本概念とインストール・環境構築</strong>（本記事）</li>
<li>② <a href="https://caymezon.com/jmeter-scenario-recording-guide/">JMeterでシナリオを記録する実践ガイド</a> — HTTPプロキシサーバー機能を使った画面操作の記録方法</li>
<li>③ <a href="https://caymezon.com/jmeter-access-log-scenario-design/">本番アクセスログからのJMeterシナリオ設計</a> — 実際のアクセスログを参考にした、実態に近いシナリオの組み立て方</li>
<li>④ <a href="https://caymezon.com/jmeter-session-key-testing-guide/">sessionKey動的化のハマりどころ</a> — 正規表現抽出器を使ったセッション値の動的パラメータ化と、そこで起きたトラブル</li>
<li>⑤ <a href="https://caymezon.com/jmeter-ai-troubleshooting-story/">AIエージェントとのトラブルシューティング体験記</a> — 実際に発生したエラーをAIエージェントと一緒に切り分けた記録</li>
</ul>
<hr>
<h2><span id="toc22">まとめ</span></h2>
<p>JMeterは、Webアプリの同時アクセスをシミュレーションしてレスポンスタイムやエラー率を計測できる、無料のオープンソース負荷テストツールです。インストール自体はZIPを展開するだけとシンプルですが、テスト計画の階層構造（スレッドグループ・HTTPリクエスト・クッキーマネージャ・タイマー・リスナー）を理解しておくと、この後のシナリオ作成がぐっとスムーズになります。</p>
<p>次のステップとして、実際にブラウザ操作を記録してテストシナリオを組み立てる方法をシリーズ②で解説しています。あわせて参考にしてください。</p>
<p>👉 <a href="https://caymezon.com/jmeter-scenario-recording-guide/">JMeterでシナリオを記録する実践ガイド</a></p><p>The post <a href="https://caymezon.com/jmeter-overview-guide/">JMeterとは？基本概念とインストール・環境構築【Windows11対応】</a> first appeared on <a href="https://caymezon.com">CayTech Lab</a>.</p>]]></content:encoded>
					
					<wfw:commentRss>https://caymezon.com/jmeter-overview-guide/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>本番アクセスログから現実的な負荷テストシナリオを設計する方法</title>
		<link>https://caymezon.com/jmeter-access-log-scenario-design/</link>
					<comments>https://caymezon.com/jmeter-access-log-scenario-design/#respond</comments>
		
		<dc:creator><![CDATA[caymezon]]></dc:creator>
		<pubDate>Mon, 17 Aug 2026 04:41:46 +0000</pubDate>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[access_log]]></category>
		<category><![CDATA[AIエージェント活用]]></category>
		<category><![CDATA[Apache]]></category>
		<category><![CDATA[JMeter]]></category>
		<category><![CDATA[パフォーマンステスト]]></category>
		<category><![CDATA[ログ解析]]></category>
		<category><![CDATA[負荷テスト]]></category>
		<guid isPermaLink="false">https://caymezon.com/jmeter-access-log-scenario-design/</guid>

					<description><![CDATA[<p>目次 はじめにこの記事で分かること1. なぜ「思いつきのシナリオ」では負荷テストが意味をなさないのか2. 本番Apache access_logから実アクセスパターンを抽出する2-1. access_logのフォーマット [&#8230;]</p>
<p>The post <a href="https://caymezon.com/jmeter-access-log-scenario-design/">本番アクセスログから現実的な負荷テストシナリオを設計する方法</a> first appeared on <a href="https://caymezon.com">CayTech Lab</a>.</p>]]></description>
										<content:encoded><![CDATA[<div id="toc" class="toc tnt-number toc-center tnt-number border-element"><input type="checkbox" class="toc-checkbox" id="toc-checkbox-6" checked><label class="toc-title" for="toc-checkbox-6">目次</label>
    <div class="toc-content">
    <ol class="toc-list open"><li><a href="#toc1" tabindex="0">はじめに</a></li><li><a href="#toc2" tabindex="0">この記事で分かること</a></li><li><a href="#toc3" tabindex="0">1. なぜ「思いつきのシナリオ」では負荷テストが意味をなさないのか</a></li><li><a href="#toc4" tabindex="0">2. 本番Apache access_logから実アクセスパターンを抽出する</a><ol><li><a href="#toc5" tabindex="0">2-1. access_logのフォーマットを確認する</a></li><li><a href="#toc6" tabindex="0">2-2. 抽出1：ピーク時間帯を丸ごと抜く（最優先）</a></li><li><a href="#toc7" tabindex="0">2-3. 抽出2：アクティブなユーザー（IP）を特定する</a></li><li><a href="#toc8" tabindex="0">2-4. 抽出3：特定ユーザーの1セッションを追跡し、操作フローを再現する</a></li><li><a href="#toc9" tabindex="0">2-5. Windows端末での代替手段</a></li></ol></li><li><a href="#toc10" tabindex="0">3. 抽出データが教えてくれるシナリオ設計の勘所</a></li><li><a href="#toc11" tabindex="0">4. 既存のExcel設計資料をAIエージェントでMarkdown化・構造化する</a><ol><li><a href="#toc12" tabindex="0">方法A：CSVに変換してから読み込ませる</a></li><li><a href="#toc13" tabindex="0">方法B：PowerShellのCOM経由でAIエージェントに直接読ませる</a></li></ol></li><li><a href="#toc14" tabindex="0">5. 抽出したアクセスパターンをJMeterシナリオに落とし込む</a><ol><li><a href="#toc15" tabindex="0">5-1. スレッド数・Ramp-up</a></li><li><a href="#toc16" tabindex="0">5.2. Think Time（Uniform Random Timer）</a></li><li><a href="#toc17" tabindex="0">5-3. 操作比率の再現（Throughput Controller / 重み付け）</a></li><li><a href="#toc18" tabindex="0">5-4. テストデータのバリエーション</a></li></ol></li><li><a href="#toc19" tabindex="0">6. 実務での注意点：本番ログの取り扱い</a></li><li><a href="#toc20" tabindex="0">まとめ</a></li></ol>
    </div>
  </div>

<h2><span id="toc1">はじめに</span></h2>
<p>JMeterの基本的な使い方は <a href="/jmeter-overview-guide/">JMeterとは？基本概念とインストール</a> で、ブラウザ操作をシナリオとして記録する方法は <a href="/jmeter-scenario-recording-guide/">シナリオ記録実践ガイド</a> で解説しました。この2つを押さえれば、「動くシナリオ」は作れます。</p>
<p>ですが、負荷テストの担当者として実際に業務で向き合うと、もっと手前に大きな壁があることに気づきます。それは、**「そのシナリオ、本当に本番の使われ方に近いんですか？」**という問いです。</p>
<p>この記事では、筆者が実務のWebアプリケーション負荷テストで実際に行った、<strong>本番のApache access_logからアクセスパターンを抽出してシナリオ設計に反映させる工程</strong>を、AIエージェントとの実際のやり取りをベースに一般化してまとめます。検索してもほとんど情報が出てこない領域ですが、負荷テストの「結果の信頼性」を左右する、地味だが非常に重要な工程です。</p>
<blockquote>
<p><strong>社内情報の取り扱いについて</strong>：この記事で示すログ・画面名・IPアドレス・数値はすべて説明用のダミーデータです。実際に筆者が扱った本番データそのものは一切含まれていません。</p>
</blockquote>
<hr>
<h2><span id="toc2">この記事で分かること</span></h2>
<ul>
<li>「思いつきのシナリオ」がなぜ負荷テストの結果を無意味にしてしまうのか</li>
<li>本番のApache access_logからgrepで実アクセスパターンを抽出する具体的な手順</li>
<li>既存のExcel設計資料をAIエージェントに読み込ませてMarkdown化・再利用可能な形に構造化するアイデア</li>
<li>抽出したアクセスパターンをJMeterのスレッドグループ・Think Time設定に落とし込む流れ</li>
<li>本番ログを扱う上での注意点（アクセス権限・個人情報マスキング等）</li>
</ul>
<hr>
<h2><span id="toc3">1. なぜ「思いつきのシナリオ」では負荷テストが意味をなさないのか</span></h2>
<p>負荷テストのシナリオを作るとき、つい「よく使われていそうな画面」を経験と勘で並べてしまいがちです。ログイン→一覧画面→検索→詳細→ログアウト、のような「いかにもありそうな流れ」です。</p>
<p>しかし、これには大きな落とし穴があります。<strong>負荷テストは「本番に近い負荷をかけて、本番で起きうる問題を事前に見つける」ことが目的</strong>です。シナリオが実際の使われ方とズレていれば、以下のような事態が起こります。</p>
<ul>
<li>実際にはほとんど使われない画面に負荷をかけて「問題なし」と結論づけてしまう（本当のボトルネックを見逃す）</li>
<li>逆に、実際には少人数しか同時操作しない画面を過大な同時ユーザー数でテストし、不要な改修コストをかけてしまう</li>
<li>本番でよく発生する「検索条件を変えて何度も再検索する」といった連続操作を再現できず、DBキャッシュ効果込みの楽観的な結果しか得られない</li>
</ul>
<p>筆者が担当した案件でも、最初は「画面ごとのアクセス数」を集計したExcelの調査資料（時間帯別・画面別のアクセス回数一覧）だけがあり、これをもとにシナリオを検討していました。ですが、AIエージェントに相談する中で次の指摘を受け、認識を改めることになりました。</p>
<blockquote>
<p>画面アクセス数だけでは「その画面に何人がアクセスしたか」しか分かりません。<strong>負荷テストのシナリオ設計に必要なのは、それに加えて「操作順序」「操作間隔（Think Time）」「同時セッション数」の3つです。</strong></p>
</blockquote>
<p>つまり、集計済みのサマリーデータは「入口」に過ぎず、<strong>生のaccess_logまで遡って初めて実態に近いシナリオが組める</strong>、ということです。</p>
<hr>
<h2><span id="toc4">2. 本番Apache access_logから実アクセスパターンを抽出する</span></h2>
<p>ここからが本題です。本番のaccess_logは通常、数GB〜数十GB単位で溜まっているため、全量を持ち出すのは現実的ではありません。<strong>「何を知りたいか」から逆算して、必要な範囲だけをgrepで抜き出す</strong>のがポイントです。</p>
<h3><span id="toc5">2-1. access_logのフォーマットを確認する</span></h3>
<p>まず対象システムのaccess_logがどのフォーマットで出力されているかを確認します。よくあるCombined Log Format＋レスポンスタイム付与のパターンだと、以下のようなイメージになります（<strong>以下はすべて説明用のダミーデータです</strong>）。</p>
<pre><code class="language-plaintext">10.0.0.23 - - [10/Aug/2026:09:03:12 +0900] "GET /dummy-app/order/init.do HTTP/1.1" 200 15234 187
10.0.0.23 - - [10/Aug/2026:09:03:34 +0900] "POST /dummy-app/order/search.do HTTP/1.1" 200 8123 342
10.0.0.45 - - [10/Aug/2026:09:03:36 +0900] "POST /dummy-app/receiving/regist.do HTTP/1.1" 200 512 1204</code></pre>
<p>この1行から読み取れる情報は多いです。</p>
<table>
<thead>
<tr>
<th>項目</th>
<th>読み取れる情報</th>
</tr>
</thead>
<tbody>
<tr>
<td>送信元IP</td>
<td>セッション（ユーザー）単位の追跡キー</td>
</tr>
<tr>
<td>タイムスタンプ</td>
<td>操作間隔（Think Time）の算出元</td>
</tr>
<tr>
<td>URLパス</td>
<td>画面・処理の遷移順序</td>
</tr>
<tr>
<td>HTTPメソッド</td>
<td>GET＝画面表示系、POST＝検索・登録系の目安</td>
</tr>
<tr>
<td>末尾の数値（レスポンスタイム）</td>
<td>性能ベースラインの把握、重い処理の特定</td>
</tr>
</tbody>
</table>
<h3><span id="toc6">2-2. 抽出1：ピーク時間帯を丸ごと抜く（最優先）</span></h3>
<p>まずは「その時間、同時に何人がどんなリクエストを投げていたか」の全体像を掴むため、ピークと思われる時間帯を丸ごと抽出します。</p>
<pre><code class="language-bash">grep "10/Aug/2026:09:0" /var/log/apache2/access_log \
  &gt; extract_access_log_0900-0910.log</code></pre>
<p>日付・時刻の文字列パターンでgrepするだけなので単純ですが、<strong>「その時間帯に何件のリクエストが飛んでいたか」「業務系リクエストと静的リソース（css/js/img等）の比率」がすぐ見える</strong>のが利点です。</p>
<h3><span id="toc7">2-3. 抽出2：アクティブなユーザー（IP）を特定する</span></h3>
<p>次に、その時間帯で特にアクセス数が多かった送信元を洗い出します。<code>awk</code> と <code>sort</code> の組み合わせが定番です。</p>
<pre><code class="language-bash"># 時間帯を絞ったログから、アクセス数の多い送信元IPトップ10を確認
grep "10/Aug/2026:09:" /var/log/apache2/access_log \
  | awk '{print $1}' | sort | uniq -c | sort -rn | head -10</code></pre>
<p>このコマンド1本で、「その時間帯にヘビーに操作していたユーザー」の見当がつきます。負荷テストのシナリオで再現すべき「代表的な操作パターン」の候補が、ここから見えてきます。</p>
<h3><span id="toc8">2-4. 抽出3：特定ユーザーの1セッションを追跡し、操作フローを再現する</span></h3>
<p>トップに挙がったIPを対象に、そのユーザーの全リクエストを時系列で抜き出すと、<strong>1人のユーザーが実際にどの画面をどんな間隔で操作していたか</strong>が丸ごと再現できます。</p>
<pre><code class="language-bash">grep "10.0.0.23" /var/log/apache2/access_log \
  | grep "09:0" \
  &gt; extract_access_log_user_10.0.0.23_09h.log</code></pre>
<p>これを整理すると、以下のような「実測の操作フロー」が得られます（数値・画面名はすべて説明用のダミーです）。</p>
<pre><code class="language-plaintext">09:03:12  /dummy-app/menu/init.do        (187ms)  メインメニュー表示
09:03:20  /dummy-app/menu/clickButton.do (98ms)   メニュー選択
09:03:34  /dummy-app/order/init.do       (245ms)  発注入力画面 起動
09:03:52  /dummy-app/order/search.do     (342ms)  ★検索実行（1回目）
09:04:29  /dummy-app/order/search.do     (318ms)  ★検索実行（2回目・条件変更）
09:04:41  /dummy-app/order/regist.do     (1204ms) ★登録処理</code></pre>
<p>このレベルまで見えると、「画面表示→検索を複数回繰り返す→条件を変えて再検索→最後に登録」という<strong>現実的な操作単位のブロック</strong>が見えてきます。タイムスタンプの差分を取れば、操作間隔（Think Time）も実測値として算出できます。</p>
<table>
<thead>
<tr>
<th>区間</th>
<th>実測間隔</th>
</tr>
</thead>
<tbody>
<tr>
<td>メニュー表示→選択</td>
<td>約8秒</td>
</tr>
<tr>
<td>選択→画面起動</td>
<td>約14秒</td>
</tr>
<tr>
<td>起動→検索1回目</td>
<td>約18秒</td>
</tr>
<tr>
<td>検索1回目→2回目</td>
<td>約37秒</td>
</tr>
<tr>
<td>検索2回目→登録</td>
<td>約12秒</td>
</tr>
</tbody>
</table>
<p>「Think Timeは何となく30秒にしておく」ではなく、<strong>実測で「検索操作の間隔はおよそ20〜40秒」という根拠</strong>が持てるようになります。</p>
<h3><span id="toc9">2-5. Windows端末での代替手段</span></h3>
<p>grepやawkが使える環境がない場合や、ログサイズが大きすぎて素直なgrepでは処理が重い場合は、PowerShellの <code>Select-String</code> や <code>Get-Content</code> ＋オブジェクト集計でも同様の集計が可能です。抽出済みのログをAIエージェントに読み込ませて、リクエスト数の分単位推移・IPごとの集計・レスポンスタイムのパーセンタイル（50%ile、90%ile等）まで一気に統計化してもらう、という使い方も実務では有効でした。人力でExcelに貼り付けて集計するより圧倒的に早く、かつ「異常値（極端に遅いリクエスト）」にも気づきやすくなります。</p>
<p><!-- ![access_logからアクセスパターンを抽出する流れを示したフロー図](images/access-log-extraction-flow.jpg) --></p>
<hr>
<h2><span id="toc10">3. 抽出データが教えてくれるシナリオ設計の勘所</span></h2>
<p>生ログを解析すると、Excelのサマリーだけでは分からなかった以下のような情報が見えてきます。</p>
<ul>
<li><strong>書き込み系（登録・更新）処理の比率</strong>：DBへの書き込みを伴う処理は読み取り系より負荷が高いため、比率を正確に再現する価値が大きい</li>
<li><strong>同一画面への「検索を繰り返す」実務パターン</strong>：1回の検索で終わらず、条件を変えて何度も検索するのが実際の使われ方であるケースは多い。シナリオも1回のリクエストで終わらせず、ループさせて再現すべき</li>
<li><strong>異常に遅いリクエストの存在</strong>：CSV出力や大量データ処理など、一部のリクエストだけ突出して遅いケースがある。これは負荷テストのシナリオに含めるかどうかを意図的に判断する材料になる（含めないと本番相当の負荷にならないが、含めすぎるとテスト結果が偏る）</li>
</ul>
<p>こうした「量」だけでなく「質」の情報が、実データを見ることで初めて手に入ります。</p>
<hr>
<h2><span id="toc11">4. 既存のExcel設計資料をAIエージェントでMarkdown化・構造化する</span></h2>
<p>もう一つ、実務で効果があった工程を紹介します。負荷テストのノウハウは往々にして<strong>過去の別システムでの実施手順がExcelにまとまっている</strong>形で社内に眠っています。今回のケースでも、別システムで過去に作成された「JMeterシナリオ作成手順書」（環境構築・シナリオ記録・実行方法などをシート分けしたExcel）がありました。</p>
<p>これをそのまま参照したかったのですが、AIエージェント（Kiro／Claude Code等のCLIエージェント）は標準ではExcelのバイナリ形式を直接読み取れません。ここで実務上有効だったアプローチが以下の2つです。</p>
<h3><span id="toc12">方法A：CSVに変換してから読み込ませる</span></h3>
<p>Excel側で各シートを「CSV UTF-8」で書き出し、テキストファイルとして配置する方法です。シンプルですが、シートが多いと手間がかかります。</p>
<h3><span id="toc13">方法B：PowerShellのCOM経由でAIエージェントに直接読ませる</span></h3>
<p>Windows環境であれば、PowerShellのCOMオブジェクト（<code>New-Object -ComObject Excel.Application</code>）を使ってExcelアプリケーションを裏で操作し、シートの内容をテキストとして取得できます。AIエージェントにこの手順を依頼すると、変換作業なしで元のExcelの構成（シート名・表形式）を保ったままMarkdownとして整理してもらえます。</p>
<p>実際には、以下のような構成で整理し直してもらいました。</p>
<pre><code class="language-plaintext"># 対象システム JMeter負荷テスト手順書（Markdown化）

## 環境構築
- Java／JMeterのバージョン対応表
- インストール手順

## シナリオ作成時の注意点
- ループ実行しても問題ない操作かの確認
- 複数スレッドで同時実行しても問題ない操作かの確認
- 日付など、実施日に依存するパラメータの動的化方針

## シナリオ記録手順
- HTTPプロキシサーバーの設定〜記録〜復元までの手順

## 実行と計測
- スレッド数／Ramp-up／ループ回数の設定例
- 非GUIモードでのコマンドライン実行例</code></pre>
<p>これにより、<strong>紙（Excel）でしか存在しなかった過去のノウハウが、AIエージェントが検索・参照できるMarkdown資料として再利用可能になり</strong>、新しい対象システム向けにカスタマイズする際の土台として使えるようになりました。「Excelは読めないから手打ちで転記する」という手間を省ける、という意味で地味に効果の大きい工程です。</p>
<blockquote>
<p>補足：Excel内に埋め込まれた画像（スクリーンショットや図解）まではAIエージェントが自動で読み取れないケースが多く、その部分は別途チャットへの手動貼り付けなどで補完する必要がありました。表・テキスト情報の構造化は自動化できても、画像情報は人手を挟む前提で考えておくのが実務的です。</p>
</blockquote>
<p><!-- ![Excel設計資料をAIエージェントでMarkdown化する前後のイメージ](images/excel-to-markdown-structuring.jpg) --></p>
<hr>
<h2><span id="toc14">5. 抽出したアクセスパターンをJMeterシナリオに落とし込む</span></h2>
<p>ここまでの解析結果を、実際のJMeterのスレッドグループ設定に反映していきます。</p>
<h3><span id="toc15">5-1. スレッド数・Ramp-up</span></h3>
<p>「ユニークIP数＝同時アクセスユーザー数」ではない点に注意が必要です。ある時間帯にアクセスしてきたユニークIPが多くても、その全員が<strong>同じ瞬間に</strong>操作していたとは限りません。実測のリクエスト密度（1分あたりのリクエスト数）と1ユーザーあたりの操作ペースから逆算し、「同時にアクティブだったであろうセッション数」を見積もったうえでスレッド数を決めます。</p>
<pre><code class="language-plaintext">例）ユニークIP数が多くても、実際に同時にアクティブなセッションは
    その6〜8割程度に収まることが多い、という前提で調整する</code></pre>
<h3><span id="toc16">5.2. Think Time（Uniform Random Timer）</span></h3>
<p>2-4で実測した操作間隔をもとに、JMeterの「Uniform Random Timer」の最小値・最大値を設定します。「検索操作の間隔は実測で20〜40秒だった」であれば、そのままレンジとして反映できます。固定値（Constant Timer）ではなく、実測のばらつきをレンジで表現できるUniform Random Timerの方が、実際のユーザー行動に近いゆらぎを再現できます。</p>
<h3><span id="toc17">5-3. 操作比率の再現（Throughput Controller / 重み付け）</span></h3>
<p>抽出したログから算出した「書き込み系〇%・照会系〇%・画面遷移系〇%」といった構成比を、JMeterの「Throughput Controller」や、コントローラを複数用意して実行頻度に重み付けする方法で再現します。1本のシナリオを全スレッドが同じ順序でなぞるのではなく、実測の比率に応じて「このスレッドは照会だけを繰り返す」「このスレッドは登録中心」といったユーザータイプ別のシナリオを複数用意し、それぞれの比率でスレッドを配分する構成が実態に近づきます。</p>
<h3><span id="toc18">5-4. テストデータのバリエーション</span></h3>
<p>実測ログから、同じ処理でも複数のユーザーが異なる検索条件・入力データで操作していることが分かります。CSV Data Set Configで複数パターンのテストデータを用意し、スレッドごとに異なる値を使わせることで、DBキャッシュだけが効いてしまう非現実的に速い結果を避けられます。</p>
<hr>
<h2><span id="toc19">6. 実務での注意点：本番ログの取り扱い</span></h2>
<p>本番のaccess_logやアプリケーションログには、IPアドレス・ユーザーID・場合によっては入力データそのものが含まれます。負荷テストのために便利だからといって無造作に扱ってよいものではありません。実務では最低限、次の点を徹底しました。</p>
<ul>
<li><strong>アクセス権限の確認</strong>：本番ログの取得・閲覧は、情報システム部門などログへの正式なアクセス権限を持つ担当者が行い、許可されたメンバー以外に共有しない</li>
<li><strong>必要な範囲だけを抜き出す</strong>：全量をコピーせず、「対象時間帯」「対象IP」など目的に応じた範囲だけをgrepで抽出する（2章の手法はこの観点でも有効）。ログの持ち出し自体を最小化できる</li>
<li><strong>作業後の削除</strong>：解析用に一時的に抽出したログファイルは、シナリオ設計が完了したら削除する。ローカル端末や共有フォルダに残さない</li>
<li><strong>記事・資料化する際のマスキング</strong>：この記事のように社外に知見を共有する場合は、IPアドレス・画面名・URLパス・ユーザーIDなどをすべてダミーデータに置き換える（実データの数値そのものを転記しない）</li>
<li><strong>社内の情報管理規程の確認</strong>：本番ログの取り扱いに関するルールは組織によって異なるため、着手前に情報管理部門・上長に確認を取る</li>
</ul>
<p>「実データに近づけたシナリオを作る」ことと「実データをそのまま扱う」ことは別問題です。<strong>目的を達成するのに必要な情報の粒度まで抽象化・匿名化してから手元に置く</strong>、という意識が重要になります。</p>
<hr>
<h2><span id="toc20">まとめ</span></h2>
<ul>
<li>画面アクセス数の集計だけでは、負荷テストのシナリオ設計には情報が不足している。<strong>操作順序・Think Time・同時セッション数</strong>まで踏み込む必要がある</li>
<li>本番のApache access_logは、①時間帯 → ②アクティブユーザー → ③1セッションの操作フロー、という順に絞り込んでgrepすれば、現実的なボリュームで実アクセスパターンを抽出できる</li>
<li>過去のExcel設計資料は、AIエージェント（PowerShell COM経由での読み取りなど）を使ってMarkdown化しておくと、次のプロジェクトでも再利用できる資産になる</li>
<li>抽出したデータは、スレッド数・Think Time・操作比率・テストデータのバリエーションという形でJMeterシナリオに反映する</li>
<li>本番ログはアクセス権限・保管期間・マスキングを徹底して扱う。実データに近づけることと、実データをそのまま持ち出すことは別問題</li>
</ul>
<p>「思いつき」ではなく「実測」に基づいたシナリオを組めるようになると、負荷テストの結果そのものへの説得力が大きく変わります。</p>
<p>シナリオが実データに近づいてくると、次にぶつかるのが「JSESSIONIDなど動的な値をどう扱うか」という問題です。次の記事では、この<strong>sessionKeyの動的化でハマったポイント</strong>を実体験ベースで解説します。</p>
<p>👉 次のステップ：<a href="/jmeter-session-key-testing-guide/">sessionKey動的化のハマりどころ</a></p>
<p>まだ読んでいない方は、基礎編もあわせてどうぞ。</p>
<ul>
<li><a href="/jmeter-overview-guide/">JMeterとは？基本概念とインストール</a></li>
<li><a href="/jmeter-scenario-recording-guide/">シナリオ記録実践ガイド</a></li>
</ul><p>The post <a href="https://caymezon.com/jmeter-access-log-scenario-design/">本番アクセスログから現実的な負荷テストシナリオを設計する方法</a> first appeared on <a href="https://caymezon.com">CayTech Lab</a>.</p>]]></content:encoded>
					
					<wfw:commentRss>https://caymezon.com/jmeter-access-log-scenario-design/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
