AIがコードを書く速度にレビューが追いつかない。Aikido Code Qualityは46個の自動チェックでセキュリティ・バグ・品質を守る。実際にClaude Codeで構築したサイトをスキャンし、43秒でXSS脆弱性を発見した実例を紹介。
10年前を思い出してほしい。チームは5人、言語はJava、フレームワークはSpringくらい。PRは1日2〜3件。全部目で見てレビューできた。SQLインジェクションも「あ、ここ文字列結合してるよ」で気づけた。ライブラリは限られていたし、オープンソースを使うことすら禁止されていた会社も多い。コードを書くのも人間、レビューするのも人間。速度が合っていた。
しかし、今はどうだろうか。
CursorやCopilotでReactアプリを作れば、1日でPRが10件、差分3,000行。AIが勝手にnpmパッケージを5個追加している。中身を知らない。ライセンスも確認していない。レビュアーが「LGTM(Looks Good To Me=問題なさそう)」と書いたけど、本当に全部読んだだろうか?
コードを書く速度はAIで10倍になった。でもレビューの速度は変わっていない。 ここにギャップが生まれている。
AIは「動くコード」を書く。テストも通る。でも**「誰がアクセスしていいか」「エッジケースでどうなるか」「本番環境で安全か」は考えない。** 具体的に見てみよう。
AIに「請求書APIを作って」と頼むと、こう書く:
// ❌ AIが生成しがちなパターン
app.get('/api/invoices/:id', async (req, res) => {
const invoice = await db.invoice.findById(req.params.id);
res.json(invoice);
});
動く。テストも通る。でも、URLの :id を1つ変えるだけで他社の請求書が見える。マルチテナントSaaSなら一発で情報漏洩だ。正しくはこう:
// ✅ テナントチェックを追加
app.get('/api/invoices/:id', async (req, res) => {
const invoice = await db.invoice.findById(req.params.id);
if (!invoice || invoice.tenantId !== req.user.tenantId) {
return res.status(403).json({ error: 'Forbidden' });
}
res.json(invoice);
});
たった1行の if 文の差。でもこの1行がなければ、顧客データの流出事故になる。
# ❌ AIが文字列結合で書く
query = f"SELECT * FROM users WHERE name = '{name}'"
# ✅ パラメータ化クエリ
cursor.execute("SELECT * FROM users WHERE name = %s", (name,))
name に '; DROP TABLE users;-- を入れられたら、テーブルごと消える。AIはパラメータ化を「知っている」が、常にそう書くとは限らない。
// ❌ AIが考慮しない
const avg = total / users.length;
// ✅ ガードを追加
const avg = users.length > 0 ? total / users.length : 0;
普段は問題ない。でも新規サービス立ち上げ時やテストテナントでユーザー0人のとき、本番がクラッシュする。深夜3時にアラートが鳴る。
// ❌ デバッグで残しがち
console.log("DB接続:", process.env.DATABASE_URL);
// ✅ 機密情報はログに出さない
console.log("DB接続: established");
開発中は便利。でもそのまま本番にデプロイすると、DatadogやCloudWatch Logsにデータベースのパスワードが平文で残る。過去に実際あった事故だ。
# ❌ AIが平気で使う
hashlib.md5(password.encode()).hexdigest()
# ✅ 安全なアルゴリズム
hashlib.pbkdf2_hmac('sha256', password.encode(), salt, 100000)
MD5は数秒で総当たり解読される。2026年にMD5でパスワードをハッシュしているコードがPRに含まれていたら、それはセキュリティインシデントの種だ。
ここまで「理論上の落とし穴」を紹介してきた。では、実際にどう動くのか?
私たちは aikido-community.jp というコミュニティサイトをClaude Code(AIコーディングツール)で構築した。Next.js + TypeScript + Prismaのフルスタック構成だ。そのコードをAikido Code Qualityでスキャンしてみた。
PRを作成してからわずか43秒。Aikidoが自動でコードをスキャンし、PRにコメントを残した:
Using dangerouslySetInnerHTML in React can lead to XSS attacks - high severity
Using dangerouslySetInnerHTML can allow attacks to insert HTML into your page, or even scripts if you don't have strict CSP rules set up. Worst case, it could be used as a way to start a social engineering attack or start an account takeover attack.
Remediation: Avoid dangerouslySetInnerHTML usage. If you must use HTML, sanitize it with a library such as DOMPurify.
✅ Aikido Security: check code — Successful in 43s — Scan completed
AIが書いたコードを、AIがレビューして、43秒で脆弱性を見つけた。 人間のレビューでは「LGTM」でスルーされていたかもしれない箇所だ。
Aikidoは問題を指摘するだけでなく、修正方法も提示する:
PRのコメント上で @AikidoSec ignore: [理由] と返信すれば、正当な理由がある場合は無視することもできる。
AikidoのCode Qualityは、PRごとにコードを自動レビューする機能だ。46個のチェックが5つのカテゴリに分かれている:
49言語に対応し、リポジトリを接続してチェックを有効にするだけで、PRごとに自動でこれらを指摘してくれる。人間が見落とすパターンも、AIは見落とさない。
上で紹介した5つの落とし穴は、すべてCode Qualityの既存チェックでカバーされている。設定するだけで、明日から防げる問題だ。
既存の46チェックだけでは足りないケースもある。チーム固有のルールが必要になる場面だ。例えば:
process.env をログに出して認証情報が漏れた → 「process.envをconsole.logに渡すコードはPRブロック」 というルールを作るlegacyAuth() をまだ使う人がいる → 「legacyAuth()の呼び出しは即警告」 を追加ポストモーテムの教訓をルールとして埋め込む。 同じ事故を二度と起こさない仕組みだ。人が入れ替わっても、ルールは残る。
Code Qualityを有効にすると、最初は指摘が多すぎると感じるかもしれない。
実際、先ほどのaikido-community.jpのスキャンでも dangerouslySetInnerHTML が指摘された。しかしこのケースでは、表示しているHTMLはAikido公式ブログの記事コンテンツであり、ユーザー入力ではない。つまり、XSSのリスクは実質的に低い。
こういうときに使うのがCode Contextだ。
チームの暗黙知――「これはうちではOK」という例外ルールをAIに教える機能。設定画面で自然言語で書くだけでいい:
さらに、PR上で @AikidoSec にコメントするだけで、そのフィードバックが自動的にCode Contextに反映される。使えば使うほど、チームに合ったレビュアーに育っていく。
Custom Code Rulesが「新しいルールを足す」なら、Code Contextは「不要な指摘を消す」。 この2つを組み合わせることで、ノイズの少ない、精度の高い自動レビューが実現する。
Aikido Code Qualityは、この「レビューが追いつかない」問題をAIで解決する。
人間のレビューは「知ってる人が見れば気づく」。Code Qualityは「知らない人のPRでも止まる」。
実際に私たちは、Claude Codeで構築したサイトをAikidoでスキャンし、43秒でXSSの脆弱性を発見した。AIが書いたコードを、AIがレビューして止めてくれた。これが2026年のコードレビューの姿だ。
AIが大量にコードを吐く時代だからこそ、レビューもAIに任せる。Aikido Code Qualityは、チーム専属のAIレビュアーだ。
Aikido Community Japan
公開日: 2026/4/8
最終更新: 2026/4/8
セキュリティの最新情報をお届けします。