TL;DR

アプリケーションやインフラの信頼性とパフォーマンスをテストするためのツール。Grafana Labs が開発している。Go で実装されているが、テストのコード(シナリオ)は JavaScript か TypeScript で書く。

なぜ必要か

k6 は、チームがエラーや SLO の違反を防ぎ、スケールしても回復力があり、性能の高いアプリケーションを作れるように支援することを目的としている。

仕組み

シングルバイナリで動くので、クラウドネイティブな環境に組み込みやすい。k6 Studio を使えば、コードを書かずにブラウザの操作からスクリプトを生成できる。SaaS 版の Grafana Cloud k6 もある。

主な用途は次のとおりである。

  • 負荷テスト: Web サイトやアプリに大量のアクセスを模擬し、どれだけの負荷に耐えられるかを調べる
  • ブラウザテスト: 実際のブラウザで、ページの表示速度や操作性を調べる
  • CI/CD への統合: 開発やデプロイの自動化の流れに組み込む
  • 障害テスト: 障害を意図的に起こし、システムの回復力を調べる(カオスエンジニアリング)
  • インフラテスト: データベースや API など、個々のコンポーネントの性能を調べる
  • 監視: 結果を Prometheus に送って Grafana のダッシュボードで可視化する。New Relic や Datadog などの SaaS や、OpenTelemetry とも連携できる

例

macOS では Homebrew でインストールできる(Set up)。VS Code の拡張機能と、型定義もあると書きやすい。

brew install k6
npm install --save-dev @types/k6

スクリプトの作成と実行には、次のコマンドを使う。--vus で VU(仮想ユーザ、つまり並列度)を指定する。

k6 new [file] [flags]  # スクリプトファイルを作る
k6 run [flags]         # スクリプトを実行する
k6 run --vus ...       # VU を指定して実行する

関連

出典