Mozillaが開発するバグ分類・テスト選択MLプラットフォーム「bugbug」— Firefoxの品質管理を機械学習で自動化
Mozillaが開発するバグ分類・テスト選択MLプラットフォーム「bugbug」— Firefoxの品質管理を機械学習で自動化
ひとことでいうと
bugbug(バグバグ)は、Firefox で知られる Mozilla が開発・公開しているオープンソースの機械学習プラットフォームです。バグ報告を「本物のバグか、それとも機能要望か」「どのチームが担当すべきか」といった観点で自動的に仕分けしてくれます。また、「このコード変更は既存の機能を壊しそうか」を事前に予測したり、「このパッチに関係するテストだけを選んで実行する」ことも得意です。Python で動き、20 種類以上の分類器(クラシファイア)があらかじめ用意されています。大量のバグ報告を手作業で処理している開発チームや、機械学習の実験データを探している研究者にとって、すぐに使い始められる実践的なツールです。
こんな人におすすめ
-
バグ報告の仕分けに追われているチーム — 毎日届く大量のバグレポートを手で分類するのは大変です。bugbug を使えば「本当に直すべきバグ」と「機能要望」を機械学習が自動で区別してくれます。手動トリアージ(仕分け作業)にかかる時間を大幅に減らせます。
-
ソフトウェア工学の研究者・機械学習エンジニア — バグ予測やテスト選択、コード変更のリスク評価といったテーマで研究をしている方に最適です。Mozilla が実際に運用しているデータセットや学習済みモデルをそのまま利用できるので、実験の出発点としてすぐに活用できます。
-
CI(継続的インテグレーション)の実行時間を短くしたいエンジニア — テスト全件を毎回回すのは時間がかかります。bugbug の
testselect機能を使うと、変更したコードに関連するテストだけを自動で選んで実行できます。無駄な待ち時間を減らし、開発のサイクルをスピードアップできます。
インストール・使い方
bugbug は uv(ユーブイ)という Python 用パッケージマネージャを使って導入します。uv は従来の pip よりも高速で、バージョン管理もしやすいツールです。以下の手順をターミナル(文字で命令を入力する画面)にコピー&ペーストするだけで始められます。
Step 1: uv をインストールする
curl -LsSf https://astral.sh/uv/install.sh | sh
インターネット経由で uv の本体をダウンロードして自動セットアップするコマンドです。実行後、ターミナルを一度閉じて再度開くか、表示される指示にしたがってパスを通してください。
Step 2: リポジトリ(ソースコードの置き場)を手元にコピーして、必要なライブラリを揃える
git clone https://github.com/mozilla/bugbug.git
cd bugbug
uv sync
git clone で bugbug のコード一式をダウンロードし、uv sync で動作に必要なライブラリをまとめてインストールします。テスト用のライブラリも一緒に入れたい場合は uv sync --group test、自然言語処理(文章を解析する技術)の拡張機能も使いたい場合は uv sync --extra nlp を実行してください。
Step 3: 学習済みモデルを使ってバグを分類してみる
# Bugzilla(Mozillaのバグ管理システム)のバグ番号を指定して分類する
python -m scripts.bug_classifier defect --bug-id 1234567
学習済みのモデルは初回実行時に自動でダウンロードされます。Bugzilla 上で公開されている実在のバグ番号(例: Firefox の公開バグ)を指定するだけで、「これは本物のバグか?」という分類結果がすぐに返ってきます。コードを書く必要はありません。
Step 4: モデルを自分でゼロから学習させる(上級・任意)
# defect(バグ判定)モデルを最初から訓練する
python -m scripts.trainer defect
既存の学習済みモデルではなく、自分でデータを用意してモデルを鍛え直したい場合に使います。データ量によっては 30 分以上かかることもあります。まずは Step 3 の学習済みモデルで試してみて、慣れてきたら挑戦してみてください。
動かしてみた
検証環境では Python 3.12.13 が正常に稼働することを確認しました。プロジェクトのフォルダ構成は整然としており、bugbug/ の中に model.py(モデルの共通機能)、bugzilla.py(Bugzilla との連携)、repository.py(Firefoxのコード履歴を読み取る機能)、db.py(データの保存・読み込み)といったモジュールが役割ごとに分かれています。目的の機能がどこにあるか、コードを読んで探しやすい構成です。
Python 3.12.13
uv.lock というファイルがリポジトリに含まれている点も重要です。これは「どのバージョンのライブラリを使うか」を固定するファイルで、チームの誰が・どのマシンで実行しても、同じ環境を再現できます。CI 環境(自動テストの仕組み)での安定稼働にも役立ちます。なお、一部のオプション機能(llama-cpp-python など)は C/C++ のコンパイラ(プログラムを変換するツール)が必要ですが、これはメインの分類機能には関係なく、必要になったときだけ対処すれば問題ありません。
ブラウザで試す(デモ)
bugbug に実装されているクラシファイア(分類器)の種類や用途は、ブラウザ上でインタラクティブに確認できるデモが用意されています。実際のモデルを動かすには Bugzilla への API アクセスと学習済みモデルのダウンロードが必要ですが、デモでは各クラシファイアの概要・対象データ・精度の目安をその場で見渡せます。「どんな分類器が使えるのか」を最初に把握したい方は、インストール前にデモを眺めてみるとイメージがつかみやすいでしょう。
はじめの一歩 — すぐ試せる実践のコツ
- 最初は学習済みモデルを使う: 自分でモデルを訓練しなくても、初回実行時に自動ダウンロードされる学習済みモデルですぐに結果が得られます。まずはコマンド 1 本で動作を体験するのがおすすめです。
- Bugzilla の公開バグ番号を使う: Firefox の Bugzilla は誰でも閲覧できます。実在するバグ番号をそのまま指定すれば、学習データと同じ土俵で分類を試せます。
scripts/bug_classifier.pyを読む: 分類の仕組みを理解するには、このスクリプトを読むのが近道です。コードは比較的短く、Python に慣れていれば処理の流れを追えます。- データセットだけ使う: bugbug のモデルを動かさなくても、Mozilla が Taskcluster(CI プラットフォーム)で定期的に生成しているデータセットを単独で利用できます。
docs/data.mdに入手方法が記載されています。 - NLP 拡張は後から: 自然言語処理の拡張(
--extra nlp)は最初は不要です。基本機能に慣れてから必要に応じて追加しましょう。 - オプションライブラリのエラーは焦らない: コンパイラが必要なオプションパッケージのインストールで警告が出ても、メインの機能には影響しないことがほとんどです。
活用アイデア
- 自社バグトラッカーへの転用: bugbug は Mozilla/Firefox 向けに設計されていますが、学習データを GitLab Issues や Jira のデータに差し替えることで、自社プロジェクト専用のバグ分類器を作れます。大量のバグ報告を抱えるプロダクトで特に効果を発揮します。
- テスト選択による CI の高速化:
testselectクラシファイアを CI パイプライン(自動テストの流れ)に組み込み、変更コードに関係するテストだけを実行することで、フルテストにかかる時間を大幅に短縮できます。特に大規模なテストスイートを持つプロジェクトで威力を発揮します。 - リグレッション(機能の退行)予防:
regressorクラシファイアをコードレビューの仕組みに組み込むと、リスクの高いパッチに自動でフラグを立てられます。レビュアーが重点的に確認すべき変更を事前に把握でき、品質向上につながります。 - 機械学習研究のベースライン作り: バグ予測やテスト最適化を研究テーマとしている場合、bugbug は実世界データと実装済みモデルがセットで手に入る貴重なリソースです。自前でデータ収集をする手間を省いて、モデルの改善に集中できます。
- 新人エンジニアの学習教材: scikit-learn を使った実践的な機械学習パイプラインのサンプルとして、コードリーディングに最適です。「バグ分類」という身近なテーマで、特徴量設計からモデル評価まで一連の流れを学べます。
- OSS コントリビューションの入口: Mozilla が活発にメンテナンスしている実プロジェクトです。新しいクラシファイアの追加や既存モデルの精度改善など、OSS(オープンソースソフトウェア)への貢献経験を積む場としても活用できます。
用語とポイント解説
クラシファイア(分類器) 入力されたデータを決められたカテゴリに振り分ける機械学習のモデルです。かんたんに言うと「仕分けロボット」のようなものです。bugbug では「バグかどうか」「どのチーム担当か」などの判断をクラシファイアが担います。20 種類以上が実装されており、目的に応じて使い分けられます。
トリアージ 届いたバグ報告を、重要度・種別・担当チームで仕分ける作業のことです。かんたんに言うと「バグ報告の受付・仕分け係」の仕事です。件数が多いプロジェクトでは非常に手間がかかるため、bugbug の自動化が役立ちます。
リグレッション
コードを変更したことで、以前は正常に動いていた機能が壊れてしまうことです。かんたんに言うと「直そうとしたら別の場所が壊れた」という状態です。bugbug の regressor クラシファイアは、この問題が起きそうな変更を事前に検知します。
uv(ユーブイ) Python のライブラリをインストール・管理するための新しいツールです。かんたんに言うと「アプリの部品を自動で揃えてくれる道具」です。Rust 言語で作られており、従来の pip よりも動作が高速で、依存関係の解決も安定しています。
scikit-learn(サイキットラーン) Python で機械学習を行うための代表的なライブラリ(追加機能の集まり)です。かんたんに言うと「機械学習の道具箱」です。bugbug の各クラシファイアはこのライブラリをベースに作られており、学習・予測・評価の基本機能を担っています。
Taskcluster Mozilla が自社の CI/CD(自動テスト・自動デプロイの仕組み)に使っているプラットフォームです。かんたんに言うと「Mozillaの自動テストロボット」です。bugbug のモデルはこの Taskcluster 上で定期的に再学習されており、常に最新の傾向を学んだ状態が保たれています。
uv.lock(ロックファイル)
プロジェクトで使うライブラリのバージョンを固定して記録したファイルです。かんたんに言うと「部品リストの確定版」です。このファイルがあることで、チームの誰が・どの環境でセットアップしても、まったく同じ状態を再現できます。
testselect(テストセレクト) 変更されたコードに関連するテストだけを自動で選び出す機能です。かんたんに言うと「今回の変更に関係するテストだけを賢く選ぶ係」です。テスト全件を実行する必要がなくなるため、CI の実行時間を大幅に短縮できます。
特徴量(とくちょうりょう) 機械学習モデルへの入力として使う情報の項目のことです。かんたんに言うと「モデルが判断するときに見るポイント一覧」です。bugbug ではバグの説明文・コンポーネント名・変更されたファイルのパスなどが特徴量として使われています。
bugbug は、バグ分類の自動化から CI のテスト効率化、リグレッション予防まで、ソフトウェア開発の品質管理を幅広くサポートしてくれるプラットフォームです。学習済みモデルがすぐに使えるため、機械学習の専門知識がなくても体験を始められます。ぜひバグトリアージの自動化や CI パイプラインのテスト最適化などに活用してみてはいかがでしょうか。