
Karmaは2011年にGoogleのAngularJSチーム(Vojta Jínaらが中心)が開発したJavaScriptテストランナーで、当初はTestacularの名前で公開され、後にKarmaへ改名された。実ブラウザ上でJasmineやMochaのテストを走らせ、結果をターミナルへ集約する仕組みを提供し、AngularJSの公式推奨ツールとして広く普及した。本稿ではKarmaの背景、アーキテクチャ、設定方法、現在の位置づけと後継ツールについて整理する。
この記事の目次
- AngularJSとKarma誕生の経緯
- Karmaの実行モデル
- Angular 2以降の流れと役割の変化
- 後継ツールとの比較
- まとめ
AngularJSとKarma誕生の経緯

2010年にMisko HeveryらGoogleエンジニアが公開したAngularJSは、双方向データバインディングとDIによってフロントエンド開発のスタイルを大きく変えた一方、テスト自動化基盤の不足が課題となっていた。Vojta JínaはこのギャップをTestacularというツールで埋め、2012年に発表した。後の改名でKarmaとなり、AngularJS公式チュートリアルでもデフォルト採用された。
Karmaの設計哲学は「実ブラウザでのテストを開発体験に組み込む」ことである。テストはNode.js上のローカルサーバから配信され、ChromeやFirefox、Safari、IEなどがWebSocket経由で接続する。ファイル変更を検知すると即座に再実行し、複数ブラウザの結果を一画面に集約することで、クロスブラウザ互換性をリアルタイムに確認できる開発フローが実現した。
Karmaの実行モデル

起動時、Karmaは設定ファイルkarma.conf.jsを読み込んでテスト対象ファイル、フレームワーク(jasmine、mocha、qunit)、ブラウザランチャー(karma-chrome-launcher、karma-firefox-launcherなど)を決定する。次にローカルWebサーバを立て、対象ブラウザを起動し、テストランナーHTMLを配信してテストを実行させる。結果はWebSocketで返却され、ターミナル側で集計・整形される。
プリプロセッサ機構を持ち、Babel、Webpack、TypeScriptコンパイラなどをテストパイプラインに挿入できる。Reporterもkarma-spec-reporter、karma-junit-reporter、karma-coverageなどが揃い、CI連携時はJUnit形式やCoberturaカバレッジを出力するのが定番だった。AngularJS時代のWeb開発では、grunt karma:unitやkarma start --single-runを叩いて検証する流れが標準化された。
Angular 2以降の流れと役割の変化

AngularJS(v1.x)の後継であるAngular 2(2016年公開)でも、Angular CLI生成プロジェクトの初期テスト構成はKarma+Jasmineだった。Karma+jsdomではなく実ブラウザ前提の構成は、フレームワークの正当性を実環境で確認できる点で支持されたが、起動の重さやマルチプロセス並列化の難しさ、Headless Chromeへの依存集中といった課題も指摘された。
2023年にAngularチームは公式にKarmaの非推奨化を発表し、JestやWeb Test Runner、Vitestへの移行ガイドを公開した。とはいえ既存のAngular 2〜16系アプリの多くはKarma構成のまま稼働しており、保守用途では現役である。新規プロジェクトでは別ランナーを採用しつつ、既存資産はメンテナンスフェーズとしてKarmaを残す、という二重構成が現実的な選択肢となっている。
後継ツールとの比較

Karmaの後継候補として挙げられるのが、JestのjsdomベースのDOMテスト、Vitestのブラウザモード、Modern Web Test Runner、PlaywrightのComponent Testingなどである。jsdom系は速度と並列性に優れるが、実ブラウザのCSSやWeb APIを完全再現できない場合がある。Playwright Component Testingは実ブラウザを使う点でKarmaに近く、後継として有力視されている。
選択にあたっては、テスト対象がフレームワーク非依存のロジック中心ならjsdom系、ブラウザのレンダリング挙動まで検証したいならPlaywrightやVitestブラウザモードを選ぶ、という整理が現実的である。Karmaの歴史は、JavaScriptテストが「ブラウザ実機」と「擬似DOM」の間を行き来してきた変遷を象徴するエピソードとして押さえておく価値がある。
まとめ
KarmaはAngularJS時代に実ブラウザテストの基盤として広く採用されたランナーで、Webテスト文化の発展に大きく寄与した。現在では公式に非推奨化が進み、Jest、Vitest、Playwrightなどへ役割を譲りつつあるが、保守中の資産では依然として現役であり、後継ツール選定の文脈でも理解しておく価値の高い存在である。
※本記事はIT用語辞典の手書きドラフトです。公開前に最新情報・出典を確認のうえ加筆修正してください。

コメント