本文へスキップ
株式会社JQITCorporate
ClaudeCodeセキュリティAI駆動開発生成AI

AIへの禁止ルールは、書き方ひとつで効かなくなる

執筆:株式会社JQIT(技術広報)

触ってほしくないファイルを指定する設定は、書いただけでは効かないことがあります。書き方と命令の包み方で外れた実測、そして「置き場所では外れなかった」という実測をもとに、業務で使う前に確認すべき点を整理しました。

AI コーディングツールには、触ってほしくないファイルを指定する仕組みがあります。 設定ファイルに1行書けば、そのファイルへの書き込みや読み取りを止められる——という建て付けです。

本番の認証情報、顧客データ、料金表。業務で使うなら、まず書きたくなる設定です。

ところが測ってみると、書いたのに効いていない形がいくつもありました。 しかもエラーは出ません。設定ファイルには確かに書いてあるので、画面を見ても気づけません。

この記事は、これまで公開してきた検証記事5本を1つの流れにまとめ直し、 確かめていなかった1点をあらためて測ったものです。個別の詳細は、それぞれの記事にリンクしています。

1. 2通りある書き方のうち、片方は何も止めない

禁止ルールには書き方が2通りあります。Edit(ファイル) と Write(ファイル)。 名前から素直に読めば、前者が「編集の禁止」、後者が「書き込みの禁止」です。

編集・新規作成・シェルからの書き込みという3経路で、合計36回試しました(書き方ごとに12回ずつ)。

書いた禁止ルール

編集

新規作成

シェルから書く

Write(...) だけ

書けた

書けた

書けた

Edit(...) だけ

止まった

止まった

止まった

両方

止まった

止まった

止まった

Write(...) は、1件も止めませんでした。 3経路とも素通りです。

逆に Edit(...) は3経路すべてを止めます。名前は「Edit」ですが、新規作成まで止めます。

しかも、この効かない書き方を出力していたのはツール自身の設定支援コマンドでした。 提供元の更新履歴にも「その書き方は権限検査に一致しない」と明記されています。

確認は1行で済みます。 設定ファイルを開いて Write( を探し、見つかったら Edit( に直すだけです。

詳細は Write() で拒否しても、Claude Code は12回とも書き込んだにまとめました。

2. 置き場所で変わるのは、許可のほうだった

「承認していないフォルダに置いた設定は無視される」という話があります。 禁止ルールまでそうなら重大です。 測りました。

捨てフォルダに対象ファイルを置き、禁止ルールを書いた場合と書かない場合で、各3回。

置いた設定

フォルダ

結果

禁止ルールを置く

未承認

3回とも止まった

禁止ルールを置く

承認済み

3回とも止まった

ルール無し(対照)

未承認

3回とも書けた

ルール無し(対照)

承認済み

3回とも書けた

禁止ルールは、承認していないフォルダでも効きました。 ここは安心してよい部分です。

無視されるのは、逆の「許可」のほうでした。 別の実測では、作業を通すために書いた許可ルールが 未承認のフォルダで1件も効かず、同じルールをコマンドラインの引数で渡すと効きました。

理由は標準エラー出力に書いてありました。「このフォルダはまだ信頼されていないので、設定を無視した」 という趣旨の警告です。この警告は構造化されたログには出ません。 自動実行や CI で回していると、出力のJSONしか見ないので気づけません。

業務での意味はこうです。 「リポジトリに設定を入れておいたから大丈夫」は、 禁止については成立し、許可については成立しません。 共有した設定のうち作業を通すための許可だけが黙って落ち、承認待ちで止まります。

詳細は 許可ルールを settings.json に書いても効かなかった。分かれ目はフォルダを信頼したかどうかに書いています。

3. 包み方を変えられると、外れる

書き方も場所も正しくした状態で、今度は命令の包み方を変えてみます。

禁止したファイルに対して、同じ「書き込む」「読む」を別の書き方で投げた結果です。

投げたもの

結果

ファイル名を直接書いて読む

止まった

ファイル名の一部を * にして読む

中身が返ってきた

直接書き込む

止まった

確認を省略する設定で、別のコマンドで包んで書き込む

書けた

同じファイルです。 名前の書き方を1つ変えただけで、中身が返ってきました。

古い版には、シェルの tee という機能で包むと禁止が外れる形もありました。 こちらは提供元が修正済みです。ただし「ひとつ塞がれても、別の包み方が残る」という構図は変わっていません。

禁止ルールの守備範囲は、「機械が読み取れたファイル名」まででした。 .gitignore と同じで、書き方を変えられると外れます。

tee の詳細は Claude Code で編集を拒否したファイルが、tee なら4回中4回書けたに、 上の表の2件(ワイルドカードと包み方)は、最後に挙げる一覧記事に書いています。

4. 止めていたのは、禁止ルールではなかった

最後に、いちばん誤解しやすい点です。

危なそうなコマンドを投げると、たいてい止まります。禁止ルールが効いている証拠に見えます。 そこで、禁止ルールを1行も書かずに同じコマンドを流してみました。

設定

結果

禁止ルールあり

止まった

禁止ルールなし

止まった

同じでした。 止めていたのは禁止ルールではなく、その手前にある別の検査です。 機械が読み解けない命令を、内容にかかわらず弾いていました。

禁止ルールが働く場面もあります。 同じ実測で、素直に書いた書き込みのほうは禁止ルールが止めていました。 2つは別の仕組みで、止まった理由はログを見ないと区別できません。

だから「書いたら止まった」を効いている証拠にはできません。 確認するなら、禁止ルールを消して同じことをやってみるのが確実です。

詳細は 拒否ルールを全部消しても、Claude Code は eval を止めたに書いています。

まとめ

  • 書き方で効かなくなる。 Write(...) は3経路とも1件も止めなかった。Edit(...) に直す
  • 場所では効かなくなる、とは限らない。 禁止ルールは未承認のフォルダでも効いた。一方で許可ルールは無視され、共有した設定が承認待ちで止まる
  • その警告は構造化ログに出ない。 自動実行では気づけない
  • 包み方を変えられると外れる。 ファイル名の書き方ひとつで中身が返ってきた
  • 止まったことは、効いている証拠にならない。 別の検査が止めている場合がある

提供元は短期間に何度も修正を出していて、塞がれた形もあります。 それでも、最新版で残っている形がありました。

この設定は「うっかり」を減らす仕組みであって、防御の境界線ではありません。 本当に触られたくないものは、そもそもその作業フォルダに置かない—— 面白みはありませんが、これがいちばん確実でした。

調べた7つの形と、最新版で残っているものの一覧は Claude Code の拒否ルールを7つの形で測った。最新版でまだ3つ残っているにまとめました。

各項目の検証データは、リンク先の記事に実測値を載せています。

生成AIを実務で使える形にするまでを、伴走して支援しています。

生成AIの導入支援・内製化支援について見る

同じような課題をお持ちですか。

現状の整理からご相談いただけます。まずはお気軽にお問い合わせください。