堅牢性チェック
想定外の入力が来たとき、そのコードは例外で落ちませんか。
無料ベータ・面談制/正式版は有料提供予定
前提:Python実装コードのみ対応
- 所要時間: 30分
- 進め方: 現場の状況をヒアリングし、最初に効くツールと順番を一緒に決めます
- ご準備は不要です
概要
「動いた=壊れない」ではありません。要素アクセスや検証なしの数値変換などは、正常系では通っても、未知の値・空・数値でない入力・空の並びといったエッジで例外を投げて落ちます。こうした脆さはハッピーパスのテストでは見つからないため、つくる瞬間に機械的に先回りで拾います。
効果
- エッジ入力で例外を投げて落ちる箇所を、実装時に位置・深刻度・直し方つきで把握できる。
- 決定的(同入力同出力)なので、CIで検出件数・重大度をしきい値にしてビルドを止められる。
- 存在・空・メンバ確認や try で守られた操作は陰性にする保守的判定でノイズが少ない。
- 誤検出が多い対象(スライスや安全な既知キーアクセス等)は検出対象から外している。
- 残る誤検出は report_outcome で報告すればallowlistに載り、以後は自動で抑制される(サーバは何も保存しないステートレス設計)。
インプット
- 実装コード(Python)
汎用LLMとの違い
危険操作の種別・脆さカタログ・ガード判定手順(存在/空/メンバ確認・try の解釈)が bubo 独自の中核です。汎用LLMに「このコード壊れない?」と聞くと運次第ですが、本ツールは構文木の規則照合で機械的に拾い、同じ入力には必ず同じ結果を返します。
実際の入力と、返ってきた出力
同じコードと問いかけを、汎用AIと robustness-lint にそのまま渡した実際のやりとりです(要約ではありません)。
# projects/alarm-controller/src/trigger.py
class TriggerDetector:
def poll(self, raw_buffer: list[int]) -> TriggerSample:
read_ms = POLL_PERIOD_MS
latest = self._read_latest_sample(raw_buffer)
pulled = latest == 1
return TriggerSample(pulled=pulled, read_ms=read_ms)
def _read_latest_sample(self, buffer: list[int]) -> int:
"""信号バッファ先頭(最新)のサンプル値を読み取る。"""
first = buffer[0]
return first
raw_buffer が空/None のときにクラッシュする点は的中させましたが、read_ms が固定値でタイムアウト判定が実質機能していない点(妥当ではあるが未知の指摘)や、バッファ値が0/1以外だった場合の誤認識(推測)もあわせて指摘し、示した3件のうち2件はラベル外の指摘でした。
検出1件(unguarded_sequence_index/medium) - シーケンスの固定位置(先頭/末尾)を空チェックなしで参照しており、空入力で IndexError を投げて落ちる - 場所: _read_latest_sample (line 50) - 直し方: 参照前に空でないこと(if seq: / len(seq))を確認するか、try/except で IndexError を扱う recall = 1.0(既知欠陥を的中)。
汎用LLMは同じコードに対しても実行のたびに指摘が変動しやすく、バグを直した後のコードにまで想像で指摘を追加してしまうことがあります。実際、バグを修正済みの清潔なコードに対しても、既に空チェック済みであるにもかかわらず汎用LLMは新たに4件の指摘を作り出しましたが、robustness-lintは決定的な静的解析のため、修正後のコードには何も指摘せず「pass」と即答します。誤検出(false positive)の少なさが、実運用でのアラート疲れを左右します。
社外秘のコードを、どう守るか
buboは入力を保存しません
ツールに渡したコード・仕様・データを、buboのサーバーは保存しません。bubo自身が学習に使うこともなく、処理はその場限りです。
AIに送るか・どこへ送るかは、あなたが握ります
標準のキーレス接続では、意味を読む処理は普段お使いのAIクライアントの中で実行されます。データの扱いは、お客様とそのプロバイダの既存のご契約のもとにあり、buboがAPIキーやコードをお預かりすることはありません。ご自身の契約するプロバイダを直接指定したい場合は、BYOK(Bring Your Own Key)として任意で設定できます。
AIに送らず動くツールも多くあります
多くのツールは決定的な静的解析だけで完結し、LLMに渡すのは必要な場面に限られます。AIに送る範囲を、あなた自身で絞り込めます。
ワンタイムコードは単回使用・有効期限7日・サーバーに平文保存はしません。発行したトークンは設定ファイルに直書きせず環境変数で参照します。既存のMCP設定がある場合も、壊さず冪等にマージします。
どう申し込み、どうつなぐのか
1. 面談を予約する
予約フォームから面談をお申し込みください。現在のQAの困りごとと、試したいツールをお聞かせいただきます。
2. 面談で適用先を一緒に決める
そろえたツールのうち、貴社の工程で効く順番をご一緒に見立てます。ワンタイムコードと接続コマンドは、面談後にあわせてお渡しします。
3. コード1つ、コマンド1行で接続
お受け取りしたワンタイムコードで、コマンドを1行実行(Windows / mac / Linux 各1行)。有効化・MCP設定(.mcp.json)生成・環境変数設定まで自動で完了します。あとはAIクライアント(Claude Code / Gemini CLI)を再起動するだけで、そのままQA方法論を呼び出せます。APIキーのご用意は不要です。ご自身の契約するLLMを使いたい場合は、BYOK(Bring Your Own Key)として任意で設定いただけます。