6
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Google社員が開発したAIバグ発見システム「Sashiko」の仕組みと、AIがソフトウェア品質を変える未来

6
Last updated at Posted at 2026-03-20

はじめに

2026年3月、GoogleのLinuxカーネルチームに所属するRoman Gushchin氏が、AIを活用したパッチレビューシステム「Sashiko」を公開しました。Linuxカーネルのメーリングリストに送られるパッチをリアルタイムで解析し、人間のレビュアーが見落としたバグを自動検出するシステムです。

名前の由来は日本の伝統的な刺繍技法「刺し子」です。布を補強しながら美しい模様を描く刺し子のように、単なるパッチ当てではなくコードの品質そのものを強化するという意図が込められています。

直近1,000件のFixed:タグ付きupstreamコミットを対象にGemini 3.1 Proで検証したところ、約45.2%のバグを検出できたという結果が出ています。注目すべきは、これらのバグがすべて人間のレビュアーによる承認プロセスを通過していた点です。

本記事では、Sashikoの技術的な仕組みを解説しつつ、AIによるバグ検出が実務にどのような影響をもたらすか考察します。

Sashikoのアーキテクチャ

二層構成のシステム設計

SashikoはRust(87.4%)で実装されており、Apache License 2.0で公開されています。アーキテクチャは以下の二層構成を採用しています。

コンポーネント 役割
デーモン LKML(Linux Kernel Mailing List)の監視、SQLiteによるDB管理、Web UIとAPIの提供
CLI デーモンとの対話、手動レビューの実行

デーモンがNNTP(Network News Transfer Protocol)経由でメーリングリストを常時監視し、新しいパッチが投稿されるとLLMによる解析パイプラインが起動します。解析結果はsashiko.devのWebインターフェースでリアルタイムに確認できます。

LLMによるパッチ解析の流れ

Sashikoのコアとなるのは、LLMを使ったセマンティックなコード解析です。単純なパターンマッチングや静的解析ではなく、パッチの変更意図を文脈から理解した上でバグの可能性を判定します。

処理の流れは概ね以下のとおりです。

  1. メーリングリストから新着パッチを取得
  2. パッチの差分とメタデータをLLMに入力
  3. 過去のバグ修正パターンと照合しながら解析
  4. 問題の深刻度を「Critical / High / Medium / Low」で分類
  5. 問題が確認された場合、インラインコメント付きのレビューメールを自動生成

対応するLLMプロバイダーは以下のとおりです(2026年3月時点)。

  • Google Gemini : gemini-3.1-pro(プレビュー版)
  • Anthropic Claude : claude-sonnet-4-5(プロンプトキャッシング対応)

設計上はLLMプロバイダーに依存しない構造になっており、将来的にはオープンソースモデルへの対応も見込まれています。

ファジングとLLMベース解析の違い

AIによるバグ検出と聞くと、Googleが長年運用してきたファジングツール「syzkaller」やその自動報告基盤「syzbot」を思い浮かべる方も多いでしょう。ここで両者のアプローチの違いを整理しておきます。

ファジング(syzkaller / syzbot)

ファジングとは、プログラムにランダムまたは半構造化された入力を大量に投げ込み、クラッシュや異常動作を検出する手法です。

syzbotはこのファジングをLinuxカーネルに対して自動実行し、検出したクラッシュをバグレポートとして開発者に通知します。実際にカーネルを動かしてバグを踏むため、再現性の高いバグレポートを生成できるのが強みです。

ファジングは「実行時」のバグを検出するアプローチです。メモリ破壊やNULLポインタ参照など、実行しないと顕在化しないバグに強いです。

LLMベース解析(Sashiko)

一方、Sashikoは「コードレビュー時」のバグ検出に焦点を当てています。パッチのdiffを読み、変更の意図と実装の整合性を検証します。

実際にコードを実行するわけではないため、ファジングとは異なる種類のバグを検出できます。具体的には、ロジックの誤り、エッジケースの見落とし、リソース管理の不備といった、コードレビューでしか捕捉できないタイプの問題に強いです。

観点 ファジング(syzbot) LLMベース(Sashiko)
検出タイミング 実行時 レビュー時(マージ前)
検出対象 クラッシュ、メモリ破壊 ロジック誤り、設計上の問題
入力 ランダム/半構造化データ パッチの差分とメタデータ
再現性 高い N/A(実行しない)
偽陽性率 低い 限定的な手動レビューでは20%以内と見積もり

Sashikoの偽陽性率は、限定的な手動レビューに基づき20%以内と見積もられています。これは無視できない数値であり、人間による最終確認は依然として必須です。AIレビューを鵜呑みにするのではなく、判断材料の一つとして活用するのが現実的な運用方針になります。

両者は競合するものではなく、補完関係にあります。ファジングで実行時のクラッシュを検出し、Sashikoでマージ前のロジックエラーを検出する、という二段構えが理想的な構成です。

検出精度と開発者コミュニティの反応

45.2%という数字の意味

Sashikoのバグ検出率45.2%という数字は、直近1,000件のFixed:タグ付きupstreamコミットをGemini 3.1 Proで検証した結果です。言い換えると、実際にバグとして修正されたコミットのうち、約半数近くをSashikoが事前に検出できた計算になります。

この数字をどう評価するかは立場によって異なります。Hacker Newsでの議論では「45%でも十分に有用。人間が見落とした問題をこれだけ拾えるなら、レビューの補助として価値がある」という肯定的な意見が多く見られました。

一方で、偽陽性の問題も指摘されています。curlやSQLiteといったプロジェクトでは、AIによる低品質なバグ報告が開発者の負担を増加させた事例があります。Sashikoはこの問題を認識しており、以下のような対策を取っています。

  • メーリングリストへの自動投稿は慎重に制御されている
  • 不正確なレポートが続けばブロックされるリスクを開発チーム自身が認識している
  • オプトイン方式であり、メンテナへの強制はない

従来ツールとの比較

Hacker Newsでは、GCCの警告やSmatchなどの既存静的解析ツールとの比較も議論されました。これらのツールはルールベースで動作するため偽陽性が少ないですが、検出できるバグの種類が限られます。SashikoのLLMベースのアプローチは、ルールに定義されていないパターンのバグも検出できる可能性を持つ点で差別化されています。

自プロジェクトで活用できるAIバグ検出ツール

Sashiko自体はLinuxカーネル特化のシステムですが、同様のアプローチを自分のプロジェクトに適用したい場合に参考になるツールがいくつかあります。

Sashikoをセルフホストする

Sashikoはオープンソースであり、セルフホストが可能です。Rust 1.86以上の環境があれば自分でビルドできます。

git clone --recurse-submodules https://github.com/sashiko-dev/sashiko.git
cd sashiko
# Settings.tomlを編集してLLM APIキーを設定
cargo build --release

ただし、現時点ではLinuxカーネルのメーリングリスト解析に特化しているため、他のプロジェクトに適用するにはカスタマイズが必要になります。

CIに組み込めるAIコードレビュー

自分のプロジェクトでAIによるバグ検出を導入する場合、CIパイプラインに組み込む形が現実的です。

実務では、AIレビューを「必須のゲート」ではなく「参考情報」として位置づけるのが重要です。偽陽性でCIがブロックされるとチームの生産性が落ちます。GitHub ActionsのPRコメントとして結果を表示し、最終判断は人間が行う構成が実用的です。

具体的には、以下のようなアプローチが取れます。

  1. PRのdiffをLLM APIに送信してレビューコメントを取得する
  2. 結果をGitHub PRのコメントとして投稿する
  3. 深刻度が高い指摘のみ通知する(ノイズ軽減)

この構成は、Sashikoがメーリングリストに対して行っていることをGitHubのPRワークフローに置き換えたものです。Sashikoのリポジトリにあるプロンプト設計は、自前のAIレビュー構築の参考になるでしょう。

セキュリティテストの自動化との組み合わせ

AIレビューは万能ではありません。実行時にしか検出できないバグには、従来のセキュリティテストが依然として有効です。

# GitHub Actionsでの組み合わせ例
jobs:
  ai-review:
    # PRのdiffをLLMに送信してレビュー
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - name: AI Code Review
        run: ./scripts/ai-review.sh

  fuzz-test:
    # ファジングテストの実行
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - name: Run Fuzzing
        run: cargo fuzz run target -- -max_total_time=300

AIレビューとファジングを並列実行することで、Sashiko + syzbotの組み合わせと同様の二段構えを実現できます。

C言語特有の問題とAI検出の相性

Hacker Newsでの議論では、C言語のリソース管理の脆弱性を指摘する声もありました。Linuxカーネルに限らず、C言語で書かれたプロジェクトでは以下のようなバグが頻発します。

  • メモリの二重解放(double free)
  • 解放済みメモリへのアクセス(use-after-free)
  • バッファオーバーフロー
  • NULLポインタ参照

これらのバグは、コードの文脈を理解していないと検出が難しいです。局所的なコード断片を見るだけでは、あるポインタがその時点で有効かどうかを判定できないためです。LLMが変更差分だけでなくファイル全体の文脈を考慮して解析できる点は、こうしたバグの検出において従来の静的解析ツールより有利に働く可能性があります。

とはいえ、RustやGoといったメモリ安全な言語への移行が根本的な解決策であることに変わりはありません。AIによるバグ検出は、移行が難しいレガシーコードベースを守るための現実的な防衛線として位置づけるのが適切です。

まとめ

Sashikoは、LLMによるセマンティックなコード解析をLinuxカーネルのパッチレビューに適用した実験的なシステムです。ポイントを整理すると以下のとおりになります。

  • 直近1,000件のバグのうち45.2%を検出(Gemini 3.1 Pro使用)。すべて人間レビュアーが見落としたものでした
  • ファジングとは補完関係にあり、マージ前のロジックエラー検出に強みを持ちます
  • 偽陽性率は限定的な手動レビューで20%以内と見積もられています。人間による最終確認は引き続き必要です
  • Rust実装でApache License 2.0のオープンソース。Gemini 3.1 ProおよびClaude Sonnet 4.5に対応
  • セルフホストが可能であり、プロンプト設計は自前のAIレビュー構築の参考になります

AIによるバグ検出は、人間のレビュアーを置き換えるものではありません。Sashikoのアプローチが示しているのは、AIを「もう一人のレビュアー」として活用することで、人間だけでは網羅しきれないバグを補足できるという点です。

ソフトウェアの品質保証において、AIは銀の弾丸ではありませんが、有効な追加防御層にはなりえます。CIパイプラインへの組み込みから始めて、自分のプロジェクトでの効果を検証してみるとよいでしょう。

参考リンク

6
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?