Cursor IDE + Aikido Security をゼロから設定して PR で動かすまで。3層の設定と、公式ドキュメントには書かれていない罠を実体験ベースで解説。
「IDE にセキュリティを統合する」というコンセプトは、もはや珍しくない。Aikido Security も Cursor IDE 向けに公式拡張を提供している。
ところが、実際にゼロから設定して PR で Aikido が動く状態に持っていくのは、想像以上に複雑だった。分かったのは、設定が3層に分かれていて、それぞれで罠が待っているということ。
この記事は、Cursor + Aikido で「コードを書いてから PR がマージされるまで全部守られる」状態を作るための、実体験に基づく完全ガイドだ。
公式ドキュメントには書かれていない設定の罠も含めて、起きた順に記録した。
このデモリポジトリは、axios@0.31.0 や next@15.5.13 といった既知の脆弱性を持つ古い依存を含んでいる。SQL injection やハードコードされた接続文字列を持つコードも含まれる。「Aikido がどこまで検出してくれるか」を試すには最適な実験場だった。
検証を始めて最初に分かったのが、Aikido のセキュリティ機能は3つのレイヤーに分かれているということだ。
npm install の瞬間に悪意あるパッケージをブロックgit commit の瞬間にシークレット混入をブロックこの3層が独立した設定を持っている。1つを ON にしても、他が動くとは限らない。これが今回の検証で得た最大の学びだ。
Cursor のマーケットプレイスで aikido を検索 → Aikido Security をインストール。VS Code フォークなので、VS Code Marketplace の拡張がそのまま使える。
Aikido: Log In で認証 → 左サイドバーに Aikido アイコンが追加される。
ここで一度ハマった。Aikido ダッシュボードの IDE Adoption Stats を先に見ると、Cursor の MCP / Safe Chain / Pre-Commit Hook が全て「ON」と表示されていた。これを見て「もうインストール済み」と思い込んでしまったのだが、実際には何も入っていなかった。

これは Aikido 本社にも問題として報告済みだ。
正しい手順はこう:インストールする拡張は Aikido Security だけ。MCP / Safe Chain / Pre-Commit Hook は、別途コマンドパレットから個別にインストールする。
Cmd + Shift + P でコマンドパレットを開いて、それぞれ実行:
Aikido: Install MCP ServerAikido: Install Safe ChainAikido: Install Pre-Commit Hook3つともインストールが完了して初めて、これらが本当に有効になる。
実際、これに気づくまで Cursor の Settings → Tools → Installed MCP Servers を見ると No MCP Tools と表示されていた:

ダッシュボードと実態の乖離。これがハマりポイントその1だった。
Cursor のチャット欄で:
「SQLite で user テーブルから id で検索する関数を書いて、id は引数で受け取る」
すると AI は:
better-sqlite3(パラメータ化クエリが書きやすいライブラリ)を選択? プレースホルダで実装export function findUserById(id) {
const row = getDb().prepare('SELECT * FROM user WHERE id = ?').get(id);
return row ?? null;
}
何も指示していないのに、AI が最初からセキュアな書き方をした。

理由は後で判明する。プロジェクトに .github/instructions/aikido_rules.instructions.md というファイルが存在していて、AI はそれを読んでいた。中身はこうなっている:
- Always run aikido_full_scan on generated code
- Fix security issues using Aikido's remediation
- Repeat fix-and-rescan until zero issues
つまり Aikido は AI に対して「セキュアに振る舞え」と指示するルールファイルを置いている。MCP Server がインストールされていれば、AI はこのルールに従って Aikido MCP の aikido_full_scan ツールに直接スキャンを依頼する。実際に検証中、AI が自発的に aikido_full_scan を呼び、ファイルの全文を渡してローカル SAST + Secrets スキャンを実行する場面が確認できた。
Aikido パネルの「Scan All Dependencies」を実行:
next@15.5.13 - Server Function DoS (CVE-2026-23869)axios@0.31.0 - SSRF (CVE-2025-27152)axios@0.31.0 - 別の警告next@15.5.13 - 別の警告
新規コードはクリーン、でも既存依存は脆弱性まみれ。これが現実だった。
Auto-FIX ボタンを押すと、Aikido が package.json の差分プレビューを表示:
- "next": "15.5.13",
+ "next": "15.5.15",
Keep Changes で適用。
ところが axios の更新後、新しい脆弱性が発見された:
axios@1.8.3 → CVE-2025-62718 (NOPROXY bypass)
もう一度 AutoFix。さらに:
axios@1.15.0 → AIKIDO-2026-10509 (Prototype Pollution)
最終的に axios は 0.31.0 → 1.8.3 → 1.15.0 → 1.15.1 の3段階で修正。古い依存には脆弱性の層があり、1回直せば終わりではない。

ダミーのシークレットを .env.local に書いて、わざとコミットを試みる:
git add -f .env.local
git commit -m "test: try committing fake secrets"
結果:
Aikido pre-commit scan detected secrets in staged files!
Secret #1: AWS Access Key ID
Secret #2: GitHub Personal Access Token
Secret #3: Generic API Key
Secret #4: Stripe Access Token
Commit aborted due to detected secrets.
コミット阻止。検出されたシークレットは ****MPLE のようにマスキング表示される。ターミナル履歴やブログ記事に貼っても安全な設計。
ここからが本題だ。
ローカルでは完璧に動いている。AutoFix も Pre-Commit Hook も MCP scan も全部動く。では PR を出したら Aikido が check として登場するか?
→ 登場しない。
✅ All checks have passed - 1 successful check
✅ CI / Test & Build (pull_request)
GitHub Actions しか動いていない。Aikido はどこにもいない。
PR で Aikido が動くには、Aikido ダッシュボードで以下を設定する必要がある:
Settings → Integrations → GitHub PR Checks
→ 対象リポジトリの行で Dependencies / SAST / Secrets / Code Quality を ON
ところが、対象リポジトリの行に 「No access」 警告が表示されていた。
その警告マークをクリックすると、GitHub のアプリ設定画面に飛ばされる…はずが、
404 - This is not the web page you are looking for.

URL を見ると:
https://github.com/organizations/{username}/settings/installations/{id}
organizations と ユーザー名 が含まれている。でも個人アカウントの場合、正しい URL は:
https://github.com/settings/installations/{id}
/organizations/{username}/ の部分を削る必要がある。
これは Aikido 側のバグだ。個人アカウントと組織アカウントで URL 構造が違うのに、同じ URL を生成している。
最終的に効いた手順:
https://github.com/settings/installations/{id})に直接アクセスこれで PR を作成すると:
✅ All checks have passed - 2 successful checks
✅ Aikido Security: check code Successful in 20s — Scan completed
✅ CI / Test & Build (pull_request) Successful in 39s

ついに Aikido が PR で動いた。20秒で scan 完了。
ここまで設定すると、本来あるべきフローはこうなる:
┌────────────────────────────────────────────┐
│ 1. Cursor で IDE で編集 │
│ └─ AI が aikido_rules.instructions.md を読む│
│ └─ MCP scan が AI 生成コードをチェック │
├────────────────────────────────────────────┤
│ 2. npm install │
│ └─ Safe Chain がパッケージをブロック判定 │
├────────────────────────────────────────────┤
│ 3. git commit │
│ └─ Pre-Commit Hook がシークレット検出 │
├────────────────────────────────────────────┤
│ 4. git push │
├────────────────────────────────────────────┤
│ 5. GitHub で PR 作成 │
│ └─ Aikido Security: check code が走る │
├────────────────────────────────────────────┤
│ 6. Merge │
├────────────────────────────────────────────┤
│ 7. main で継続監視 │
│ └─ 新しい CVE が公開されたらアラート │
└────────────────────────────────────────────┘
各ステップで違うレイヤーが守る。1つのレイヤーが抜けても、他が補完してくれる多層防御だ。
なお、3〜4 の commit/push は Cursor のソースコントロールパネルから行うことも、ターミナルから行うこともできる。Pre-Commit Hook は git レベルで動くので、どこから実行しても同じように動作する。
これから Cursor + Aikido を導入する人のために、整理した設定リストを残しておく。
Aikido: Log In で認証Cmd + Shift + P で以下を順番に実行
Aikido: Install MCP ServerAikido: Install Safe ChainAikido: Install Pre-Commit Hookhttps://github.com/settings/installations から直接アクセスAikido + Cursor の組み合わせは、設定さえ正しく行えば 「AI がコードを書く瞬間から PR がマージされるまで」 をカバーできる強力な多層防御になる。
ただし、現時点では設定の罠がいくつか存在する:
これらは Aikido 本社にもフィードバック済みだ。改善されれば、もっとスムーズな導入体験になるはず。
それでも、最終的に Aikido Security: check code Successful in 20s — Scan completed が PR に表示された瞬間の達成感は格別だった。AI が書いて、Pre-Commit Hook が守って、PR で Aikido が再確認する——この流れが目に見える形で動くと、セキュリティが「後から付け足すもの」ではなく「開発フローに溶け込むもの」だと実感できる。
「相手の流れに逆らわず、その流れの中に守りを置く」——Aikido という名前の通り、合気道的な発想がここでも生きている。
Aikido Community Japan
公開日: 2026/5/2
最終更新: 2026/5/2
セキュリティの最新情報をお届けします。