[{"data":1,"prerenderedAt":322},["ShallowReactive",2],{"content-/claude-code-security-review-setup":3,"all-pages-for-dir":320,"og-image-/claude-code-security-review-setup":321},{"id":4,"title":5,"body":6,"category":302,"description":303,"extension":304,"meta":305,"navigation":306,"ogImage":307,"path":308,"project_name":309,"published":310,"publishedAt":311,"seo":312,"stem":313,"tags":314,"todo":307,"unpublished":310,"updatedAt":307,"__hash__":319},"pages/2026-05/2026-05-27/claude-code-security-review-setup.md","Claude Code のセキュリティレビュー・プラグインは、ローカル一人運用ならユーザーレベルだけで十分だった",{"type":7,"value":8,"toc":286},"minimark",[9,18,22,25,28,31,41,44,48,51,60,67,72,123,126,130,136,151,157,160,163,201,204,207,214,230,233,237,240,244,247,250],[10,11,12,13,17],"p",{},"Claude に書かせたコードを、別の Claude が後ろからセキュリティレビューする。そういう仕組み（claude-code-security-review プラグイン）をこのリポジトリに入れようとして、設定ファイルに手を伸ばしかけた手前で止まった。「リポジトリ全体に効かせるなら、プロジェクトの ",[14,15,16],"code",{},"settings.json"," にも書かないと」と思い込んでいたが、整理させてみたら、その一行は一人で開発している自分には要らないものだった。今日はその「要らない」に気づくまでの判断を書き残す。",[19,20,21],"h2",{"id":21},"やりたかったこと",[10,23,24],{},"Claude Code が生成したコードには、自分で気づけないセキュリティ上の穴が混じりうる。決済や認証まわりを Claude に触らせている以上、そこは特に怖い。そこで、コードの変更に対して自動でセキュリティレビューを走らせる claude-code-security-review プラグインを導入することにした。",[19,26,27],{"id":27},"まず前提を確認した",[10,29,30],{},"入れる前に、動作条件を満たしているか確認させた。",[32,33,34,38],"ul",{},[35,36,37],"li",{},"Claude Code: 2.1.150（必要 2.1.144 以上）→ クリア",[35,39,40],{},"Python: 3.11 と 3.13 が入っている（必要 3.8 以上）→ クリア",[10,42,43],{},"どちらも条件を満たしていたので、そのまま導入に進める状態だった。",[19,45,47],{"id":46},"設定ファイルに手を伸ばしかけて止めた","設定ファイルに手を伸ばしかけて、止めた",[10,49,50],{},"ここがこの日の山場だった。",[10,52,53,54,56,57,59],{},"当初の頭の中では「プラグインをリポジトリ全体に適用したいんだから、プロジェクトの ",[14,55,16],{}," にも有効化を書く」という流れになっていた。実際に書き始めようとして、いったん手を止めて整理させた。「そもそも、この ",[14,58,16],{}," は何のために書くんだっけ」を言語化したかった。",[10,61,62,63],{},"整理してみると、自分が2つの別々の話を1つにまぜていたことが分かった。",[64,65,66],"strong",{},"「プラグインがどの範囲で効くか（有効化スコープ）」と「プロジェクト設定をリポジトリに置くべきか」は、別の判断軸だった。",[68,69,71],"h3",{"id":70},"判断軸その1有効化スコープ","判断軸その1：有効化スコープ",[73,74,75,91],"table",{},[76,77,78],"thead",{},[79,80,81,85,88],"tr",{},[82,83,84],"th",{},"スコープ",[82,86,87],{},"書く場所",[82,89,90],{},"効く範囲",[92,93,94,109],"tbody",{},[79,95,96,100,106],{},[97,98,99],"td",{},"ユーザーレベル",[97,101,102,105],{},[14,103,104],{},"/plugin install","（自分の Claude Code 全体）",[97,107,108],{},"すべてのプロジェクト",[79,110,111,114,120],{},[97,112,113],{},"プロジェクトレベル",[97,115,116,117],{},"そのリポジトリの ",[14,118,119],{},".claude/settings.json",[97,121,122],{},"そのリポジトリだけ",[10,124,125],{},"ユーザーレベルで一度入れれば、どのプロジェクトを開いてもレビューは効く。自分は同じマシンで全プロジェクトをいじっているので、これだけで目的は達する。",[68,127,129],{"id":128},"判断軸その2プロジェクト設定が要る条件","判断軸その2：プロジェクト設定が要る条件",[10,131,132,133,135],{},"そのうえで、プロジェクトの ",[14,134,16],{}," に有効化を書く意味が出てくるのは、次のどちらかのときだけだった。",[32,137,138,145],{},[35,139,140,141,144],{},"Claude Code の ",[64,142,143],{},"web 版","を使う（手元のユーザー設定が乗らない環境で動かす）",[35,146,147,150],{},[64,148,149],{},"他人とリポジトリを共有する","（チームの全員に同じレビューを効かせたい）",[10,152,153,154,156],{},"自分はどちらにも当てはまらない。ローカルで、一人で、手元の Claude Code から触っているだけだ。だとすると、プロジェクトの ",[14,155,16],{}," に有効化を書くのは、ユーザーレベルの設定と同じことを二重に書くだけの冗長な行だった。",[19,158,159],{"id":159},"方針を確定させた",[10,161,162],{},"整理した結果、方針はこうなった。",[32,164,165,178],{},[35,166,167,168,171,172,174,175,177],{},"有効化は ",[64,169,170],{},"ユーザーレベルのみ","（",[14,173,104],{},"）。プロジェクトの ",[14,176,16],{}," は作らない。",[35,179,180,181,184,185],{},"代わりに、レビューの観点を伝える ",[64,182,183],{},"ガイダンスを2ファイル","だけ用意する。\n",[32,186,187,194],{},[35,188,189,190,193],{},"共通の観点 → ",[14,191,192],{},"~/.claude/"," 配下（全プロジェクトで参照する自分用）",[35,195,196,197,200],{},"このリポジトリ固有の観点 → プロジェクトの ",[14,198,199],{},".claude/"," 配下",[10,202,203],{},"設定の置き場所と、ガイダンス（何を重点的に見てほしいか）の置き場所は分けて考える。有効化は一箇所で済ませ、リポジトリ固有の事情だけリポジトリ側に置く、という整理に落ち着いた。",[19,205,206],{"id":206},"リポジトリ固有のレビュー観点を反映させた",[10,208,209,210,213],{},"ガイダンスには、このリポジトリで特に見てほしい場所を書き込ませた。",[14,211,212],{},"server/api/"," 配下に、",[32,215,216,227],{},[35,217,218,219,222,223,226],{},"Stripe 決済まわり（",[14,220,221],{},"stripe/","・",[14,224,225],{},"purchase/","）",[35,228,229],{},"認証・admin 系のガード",[10,231,232],{},"があるのを把握していたので、ここをレビューの重点として観点に組み込んだ。決済と認可は、穴があったときの被害が一番大きい。汎用的なレビューに任せきりにせず、「このリポジトリではここを疑え」と先に渡しておく。",[19,234,236],{"id":235},"残作業の引き渡しと後の確認","残作業の引き渡しと、後の確認",[10,238,239],{},"ここまでで、自分（ユーザー）が打つコマンドは2つだけ、という状態まで持っていって引き渡した。後でそのコマンドを実行し、プラグインが正しく入っていること、有効化フラグも立っていることを画面で確認した。想定どおり、ユーザーレベルの導入だけで動いた。",[19,241,243],{"id":242},"この日のハマりプラグインとは無関係","この日のハマり（プラグインとは無関係）",[10,245,246],{},"作業の途中、ツール呼び出しが崩れて「The model's tool call could not be parsed」というエラーが何度も出た。最初はプラグイン導入の副作用かと疑ったが、原因は別で、会話の履歴が膨らみすぎたことによる一時的な不具合だった。プラグインそのものの導入は問題なく完了している。長い作業はセッションを早めに区切るべき、という当たり前のことを、エラーの連発で思い出した格好だった。",[19,248,249],{"id":249},"学びメモ",[32,251,252,262,273,276,283],{},[35,253,254,255,258,259,261],{},"一人ローカル運用なら、セキュリティレビュー・プラグインは",[64,256,257],{},"ユーザーレベルの有効化だけで全プロジェクトに効く","。プロジェクトの ",[14,260,16],{}," を書くのは冗長。",[35,263,264,265,268,269,272],{},"プロジェクト設定に有効化を書く意味が出るのは、",[64,266,267],{},"Claude Code web 版を使うとき","か、",[64,270,271],{},"他人とリポジトリを共有するとき","だけ。",[35,274,275],{},"「有効化スコープ（どの範囲で効くか）」と「設定の置き場所（どこに書くか）」は別の判断軸。混同すると、要らない設定を二重に書く。",[35,277,278,279,282],{},"有効化は一箇所に集約し、",[64,280,281],{},"リポジトリ固有の事情（決済・認証の重点観点）だけ","をリポジトリ側のガイダンスに置く。",[35,284,285],{},"「The model's tool call could not be parsed」は会話履歴の肥大が原因。作業の区切りでセッションを切る。",{"title":287,"searchDepth":288,"depth":288,"links":289},"",2,[290,291,292,297,298,299,300,301],{"id":21,"depth":288,"text":21},{"id":27,"depth":288,"text":27},{"id":46,"depth":288,"text":47,"children":293},[294,296],{"id":70,"depth":295,"text":71},3,{"id":128,"depth":295,"text":129},{"id":159,"depth":288,"text":159},{"id":206,"depth":288,"text":206},{"id":235,"depth":288,"text":236},{"id":242,"depth":288,"text":243},{"id":249,"depth":288,"text":249},"dev","Claude が書いたコードを自動でセキュリティレビューするプラグインを導入する話。プラグインの有効化スコープ（ユーザーレベル vs プロジェクトの settings.json）という判断軸を整理し、一人ローカル運用なら settings.json は不要と決めた記録。","md",{},true,null,"/claude-code-security-review-setup","eurekapu-nuxt4",false,"2026-05-27T00:00:00.000Z",{"title":5,"description":303},"2026-05/2026-05-27/claude-code-security-review-setup",[315,316,317,318],"Claude Code","セキュリティレビュー","プラグイン","開発環境","ueocsoTA2LwKyGtHolbe83awIpA43yFN6EdNeCLTvog",[],"https://log.eurekapu.com/og/blog/claude-code-security-review-setup.png?v=2026-05-27T00%3A00%3A00.000Z&title=Claude%20Code%20%E3%81%AE%E3%82%BB%E3%82%AD%E3%83%A5%E3%83%AA%E3%83%86%E3%82%A3%E3%83%AC%E3%83%93%E3%83%A5%E3%83%BC%E3%83%BB%E3%83%97%E3%83%A9%E3%82%B0%E3%82%A4%E3%83%B3%E3%81%AF%E3%80%81%E3%83%AD%E3%83%BC%E3%82%AB%E3%83%AB%E4%B8%80%E4%BA%BA%E9%81%8B%E7%94%A8%E3%81%AA%E3%82%89%E3%83%A6%E3%83%BC%E3%82%B6%E3%83%BC%E3%83%AC%E3%83%99%E3%83%AB%E3%81%A0%E3%81%91%E3%81%A7%E5%8D%81%E5%88%86%E3%81%A0%E3%81%A3%E3%81%9F&author=Kei%20Komatsu&sig=96f3a438580af770",1782528842894]