BLOG

ブログ

2026/07/06 技術系

負荷テストツール『k6』の使い方

この記事を書いた人 T.S

k6』とは、JavaScriptでテストシナリオが記述できる、オープンソースの負荷テストツールです。
今回はk6の導入からテストの作成・実行手順のほか、テスト結果を見やすくする方法をご紹介します!

k6の使い方

k6は、Grafana Labs社が開発している負荷テストツールです。
JavaScriptで記述できるため導入ハードルが低いこと、インストールから実行までの流れがシンプルなこと、動作が軽量かつ高速なことが特徴です。
クラウド上からテストの実行が可能な『Grafana Cloud k6』というサービスもありますが、今回はローカル上での実行手順についてご説明します!

導入方法

公式ドキュメント(Install k6)に、各OSごとのインストール方法が記載されています。
macOSの場合、Homebrewからインストールが可能です。インストール後、k6 version のコマンドでバージョン情報が表示されれば導入完了です👍

% brew install k6

% k6 version
k6 v1.7.1

テスト作成方法

k6 new ファイル名 コマンドで、サンプルコード付きのテストファイルが作成できます。

% k6 new k6test.js
New script created: k6test.js (minimal template).

デフォルトのサンプルコードは「ピザ屋のデモサイトにアクセスし続ける負荷テスト」となっています🍕

import http from 'k6/http';
import { sleep, check } from 'k6';

export const options = {
  vus: 10,
  duration: '30s',
};

export default function() {
  let res = http.get('https://quickpizza.grafana.com');
  check(res, { "status is 200": (res) => res.status === 200 });
  sleep(1);
}

コード内の設定値やテスト内容の詳細は以下の通りです。

  • 設定値(options
    • vus:仮想ユーザー(Virtual Users)数の指定。サンプルのvus: 10は「同時に10人がアクセスする」設定
    • duration:テスト実施時間の指定。サンプルのduration: '30s' は「30秒間テストをする」設定
  • テスト内容(default function
    • http.get:指定のURLにGETメソッドでアクセスする
    • check:ステータスコードが200(成功レスポンス)であることを確認する
    • sleep(1):次回アクセスまで1秒待機する

まとめると、「30秒間、10人のユーザーが、1秒おきにサイトにアクセスし続ける」といった内容の負荷テストになっています。URL・vusduration の設定を変更するだけでも、ある程度の負荷テストが可能な、使い勝手の良いコードだと思います!

テスト実行方法

k6 run ファイル名 コマンドで、テストを実行します。
実行後にテスト結果が表示されます。下記の例では、約30秒間で240回のアクセスに成功しています(checks_succeeded)。このように、人力では再現できない規模の負荷テストを、簡単に作成&実行することができます🎉

テスト結果の中で注目すべき点

  • 失敗数・失敗率(http_req_failed / checks_failed
    失敗数・失敗率が0以外の場合(0を超えている場合)、タイムアウトやサーバーの処理落ちが発生している可能性があります。ここがカウントされていると、負荷がかかりすぎてるのかも…?
  • レスポンスタイム(http_req_duration
    「平均(avg)」のほか、「P95(データの中で最も遅い(最も待たされた)5%の値)」に注目します。ここの値がavgより遅すぎると、負荷がかかりすぎてるのかも…?
% k6 run k6test/k6test.js

         /\      Grafana   /‾‾/  
    /\  /  \     |\  __   /  /   
   /  \/    \    | |/ /  /   ‾‾\ 
  /          \   |   (  |  (‾)  |
 / __________ \  |_|\_\  \_____/ 

     execution: local
        script: k6test.js
        output: -

     scenarios: (100.00%) 1 scenario, 10 max VUs, 1m0s max duration (incl. graceful stop):
              * default: 10 looping VUs for 30s (gracefulStop: 30s)

  █ TOTAL RESULTS 

    checks_total.......: 240     7.850217/s
    checks_succeeded...: 100.00% 240 out of 240
    checks_failed......: 0.00%   0 out of 240

    ✓ status is 200

    HTTP
    http_req_duration..............: avg=235.14ms min=175.58ms med=215.33ms max=581.37ms p(90)=271.63ms p(95)=461.14ms
      { expected_response:true }...: avg=235.14ms min=175.58ms med=215.33ms max=581.37ms p(90)=271.63ms p(95)=461.14ms
    http_req_failed................: 0.00%  0 out of 240
    http_reqs......................: 240    7.850217/s

    ~~ 一部省略 ~~

running (0m30.6s), 00/10 VUs, 240 complete and 0 interrupted iterations
default ✓ [======================================] 10 VUs  30s

おまけ:テスト結果をより見やすくする方法

テスト結果について、デフォルトではターミナルにテキスト出力されますが、「k6-reporter」を利用することで、HTMLファイルとして出力してくれます!
k6-reporterを使うには、テストコード内に以下の設定を追記します。

import { htmlReport } from 'https://raw.githubusercontent.com/benc-uk/k6-reporter/latest/dist/bundle.js'

export function handleSummary(data) {
  return {
    'summary.html': htmlReport(data),
  }
}

上記を記述してk6 runを実行すると、同ディレクトリ内にHTMLファイルが作られます。標準のテキスト出力でも事足りるとは思いますが、より見やすく!そしてより目も泳がなくなるので😂、個人的にはおすすめです!

おわりに

今回は、簡単に負荷テストが実行できる『k6』をご紹介しました。

JavaScriptはよく分からない…という方でも、公式のメソッドをコピーして数値を変えるだけで、簡単に実用的なテストコードが作成できます!導入から実行にいたるまでのコストが低めなツールなので、興味のある方はぜひ一度試してみてください!

ちなみに実際の環境で負荷テストをする際、テストのoptionsについては、まずは小さめの数値を指定して徐々に上げていくスタイルが、心臓に優しくて良いかと思います…👍


株式会社ウイングドアは福岡のシステム開発会社です。
現在、私達と一緒に"楽しく仕事が出来る仲間"として、新卒・中途採用を絶賛募集しています!
ウイングドアの仲間達となら楽しく仕事できるかも?と興味をもった方、
お気軽にお問い合わせ下さい!

アーカイブ