Trace.
/

OPEN SOURCE

DETECTION ENGINE

Trace.

AIは書ける。

Traceは[読める]

AI が書いたコード特有の失敗パターンを検出するオープンソースの静的解析ツール。

ハルシネーション。認証情報。無視された例外。サニタイズ不全。

02 / 11ライブ スキャナー

Traceは、AIが書いたコードをこう読む。

47行の FastAPI ファイルに対するライブスキャン。検出エンジンは6言語24パターンで動作する。各問題に重要度、行番号、一行の説明を付与する。

file.py · 47 lines · pythonCOMPLETE
01import fastapi
02from fastapi import FastAPI, Depends, HTTPException
03import fake_validator_xyz
04import sqlite3
05import jwt
06from pydantic import BaseModel
07
08app = FastAPI()
09
10# Config
11SECRET_KEY = "dev-jwt-secret-2026"
12STRIPE_KEY = "sk_live_51xZy_abcdef..."
13
14class User(BaseModel):
15 id: int
16 name: str
17
18def fetch_user(user_id):
19 conn = sqlite3.connect("db.sqlite")
20 q = f"SELECT * FROM users WHERE id = {user_id}"
21 return conn.execute(q).fetchone()
22
23@app.get("/users/{uid}")
24def get_user(uid: int):
25 try:
26 u = fetch_user(uid)
27 except Exception:
28 pass
29 return u
30
31@app.post("/users")
32def create_user(name: str):
33 conn = sqlite3.connect("db.sqlite")
34 conn.execute(
35 f"INSERT INTO users (name) VALUES ('{name}')"
36 )
37 conn.commit()
38
39@app.delete("/users/{uid}")
40def delete_user(uid: str):
41 eval(f"removeUser({uid})")
42
43@app.get("/search")
44def search(q: str):
45 return {"results": []}
46
47# end of file
5 detections found
criticalline 03hallucinated dependency
fake_validator_xyz · not on PyPI
criticalline 11credential leak
JWT secret hardcoded
criticalline 12credential leak
Stripe live key · redacted
criticalline 20SQL injection
f-string interpolation in execute
criticalline 41code injection
eval() with user input
03 / 11ザ・シフト

本番コードの半分を、いまAIが書いている。

しかし、それを守るツールは人間のバグのために作られた。迷い、確認し、typoを残す人間のためのもの。AIは自信満々に書く。その自信こそが攻撃面だ。

0%

AI生成コードに脆弱性が含まれる割合Veracode

0%

AIコードに脆弱性を発見した組織の割合CSA

0%

2025年にコミットされたAI書記コードの割合SonarSource

04 / 11ザ・ギャップ

事故は、すでに起きている。

この3ヶ月の事件を3つ。機密扱いではない、特殊でもない。ありふれた AI 補助開発での、ありふれた大事故。

MOLTBOOK · 2026年2月

150万件のAPIキーが露出。

創業者は一行もコードを書いていなかった。AIがSupabaseのデータベースをpublic read/write権限で構築し、誰もそれを確認しないまま本番へ公開した。

AXIOS · 2026年3月

メンテナアカウント経由のサプライチェーン攻撃。

改ざんされたパッケージは検知までに45万回ダウンロードされた。影響は数時間で下流のアプリに波及した。

PYPI · 2026年4月

Slopsquattingは340パッケージに到達。

大規模言語モデルがハルシネーションしがちな名前に合わせて、攻撃者がタイポスクワットを仕込んでいる。オートコンプリートひとつで任意コードが実行される距離にある。

05 / 11あなたに起きること

静かに終わるのは、あなたのサービスかもしれない。

有名な事件ではない。YC のスタートアップでもない。ここに書かれているのは、AIが書いたコードをそのまま出荷した個人開発者に、実際に起きていることだ。

シナリオ 01
AM 2:00土曜の深夜。Claude Code が書いてくれた認証フローが、ようやく動いた。デプロイして寝た。
AM 9:00月曜の朝。誰かが /user?id='; DROP TABLE users;-- にアクセスしてくる。
AM 9:00Claude が書いていたのは cursor.execute(f"SELECT * FROM users WHERE id = {user_id}") だった。クエリは、そのまま実行された。
AM 11:00データベースのユーザーは全員、消えた。自動バックアップは、まだ設定していなかった。

6週間の週末を使って作ったプロダクトに、もうユーザーはいない。

Trace は、commit する前に SQL インジェクションを検出する。

シナリオ 02
DAY 1Lovable に決済ページを作ってもらった。ファイルに const stripe = new Stripe("sk_live_...") と、そのまま埋め込まれていた。
DAY 1GitHub にリポジトリを push した。public が、デフォルトだから。
DAY 1 +00:30GitHub を Stripe キーで巡回している Bot が、30分で見つけた。
DAY 2Stripe から通知が届く。47,000 ドルの不正利用。全額、返金された。
DAY 3同時に、Stripe アカウントも停止される。規約違反。再審査、再申請、数週間。

お金は戻ってくる。でも「ちゃんとした開発者」という評判は、もう戻らない。

Trace は、ライブキーを含む commit を、拒否する。

シナリオ 03
MONTH 01Claude が react-form-validator-x を勧めてきた。npm install は最初失敗した。もう一度やったら通った。よかった、と思った。
MONTH 01その20分の間に、誰かが npm にその名前を登録していた——そのことに、気づかなかった。
MONTH 04SaaS は有料ユーザー 1,200 人。売上は伸びている。もう依存パッケージなんて気にしていない。
MONTH 05そのパッケージの作者が、新しいバージョンを push する。起動時に、ユーザーのパスワードを外に送る仕込みが入っていた。
MONTH 05自分のプロダクトのことを、Hacker News のスレッドで知った。

ユーザー全員のパスワードが、流出した。信用は、ゼロに戻った。

Trace は、初日にそのimport を止める。存在しない npm パッケージは、存在しない。

06 / 11作ったもの

6言語、24パターン。

v0.7.0はPython、JavaScript、TypeScript、Go、Rust、Rubyの6言語で24の検出パターンを提供する。すべてオープンソース。AIがコードを壊す方法のうち、人間がやりがちでない方向だけを捕らえる。

PYTHON / JAVASCRIPT / TYPESCRIPT
01ハルシネーション依存● OSS

npmやPyPIに存在しないパッケージのimport

02非推奨APIの誤用● OSS

存在しないメソッドを自信満々に呼ぶ

03認証情報の埋込み● OSS

APIキー、トークン、接続文字列

04見せかけの型安全● OSS

anyの乱用、genericsの無効化

05例外の握りつぶし● OSS

空のcatch、無視されたPromise

06サニタイズ不全● OSS

SQLインジェクション、XSS、コマンド実行

07意味のないテスト● OSS

構文は通るが絶対に落ちないテスト

GO
08スロップスクワッティング● OSS

AIが幻覚した可能性のある不審なimportパス

09エラー無視● OSS

戻り値のerrorを _ で明示的に破棄

10SPRINTF SQL● OSS

fmt.Sprintfや文字列連結で組み立てたSQL

11ハードコード秘密鍵● OSS

GoソースコードのAPIキー・トークン・認証情報

RUST
12UNWRAP乱用● OSS

実行時にパニックする過剰な.unwrap()使用

13UNSAFEブロック● OSS

安全性保証を迂回するunsafeブロック

14TODOマクロ● OSS

実行時パニックするtodo!()/unimplemented!()

15PANICマクロ● OSS

Result<T, E>を使うべき箇所のpanic!()

RUBY
16マスアサインメント● OSS

Strong Parameters未使用のActiveRecord一括代入

17SQL文字列補間● OSS

SQLクエリ内の文字列補間

18例外の握りつぶし● OSS

例外を黙って無視するrescueブロック

19EVAL注入● OSS

動的入力でのeval/send呼び出し

クロス言語 · v0.7.0 NEW
20await 忘れ● OSS

async 呼び出しを await なしで代入。値は Promise であって解決済みの結果ではない

21脆弱な乱数● OSS

Math.random() や random.random() をセキュリティ目的に使用

22動的 eval● OSS

eval()、new Function()、exec() に変数を渡している。コード注入の攻撃経路

23localhost ハードコード● OSS

非テストコードに http://localhost や http://127.0.0.1 がハードコード

24env フォールバック欠落● OSS

os.environ["X"] や process.env.X をフォールバックなしで直接代入

GitHubでエンジンを見る →
07 / 11AI デモ

AIがコードを書く。それをTraceが読む。

プロンプトを選ぶと、AI生成コードが表示される。そのコードをサーバー側のTraceが解析する。人間が見逃す脆弱性を検出する。

08 / 11使い方

使い方。

Trace の使い方は3通り。手間の少ない順に並べてある。あなたがコードを書く場所に合うものを選べばいい。

METHOD 01 · ブラウザ

インストールなし。登録なし。

tracecheck.dev を開く。
コードを貼って、Check を押す。
だいたい 400ms で結果が出る。

METHOD 02 · コマンドライン

Node.js が必要です。

$ npx trace-core your-file.py

npx は Node.js に含まれている。まだ入れていなければ、nodejs.org から取得できる。

METHOD 03 · CI に組み込む

問題のある commit を止める。

# .github/workflows/check.yml
name: Trace
on: [push, pull_request]
jobs:
  trace:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - run: npx trace-core src/

GitHub Actions の他、GitLab / Bitbucket / Jenkins でも同じように動く。検出があれば workflow は exit 1 で終わる。

09 / 11対応言語

6言語、24パターン。

言語固有のパターンで完全にカバー。さらに多くの言語を追加予定。

Python
JavaScript
TypeScript
Go
Rust
Ruby

Coming soon: Java · PHP · Dart

10 / 11START

3つの入口。

BROWSER

ブラウザで試す。インストール不要。

CLI

CIや pre-commit hook に。npm経由。

$ npx trace-core your-file.py
GITHUB

ソースを読む。MITライセンス。