additionalDirectoriesからディレクトリを削除すると--add-dirで追加した同一ディレクトリのアクセスも失われていた問題の修正
原文(日本語に翻訳)
additionalDirectoriesからディレクトリを削除すると、--add-dirで渡された同一ディレクトリへのアクセスが取り消されていた問題を修正しました。
原文(英語)
Fixed removing a directory from additionalDirectories revoking access to the same directory passed via --add-dir
概要
Claude Codeでは追加ディレクトリを指定する方法が2つあります。設定ファイルのpermissions.additionalDirectoriesと、コマンドラインフラグの--add-dirです。このバグでは、これら2つの設定が干渉し合い、設定ファイルのadditionalDirectoriesからあるディレクトリを削除すると、コマンドライン引数--add-dirで明示的に指定した同一ディレクトリへのアクセスまで失われてしまう問題がありました。v2.1.98でこの問題が修正され、--add-dirで指定したディレクトリはadditionalDirectoriesの変更に影響されなくなりました。
基本的な使い方
修正前の動作(問題のある挙動)
bash
# --add-dir で /shared/resources を指定して起動
$ claude --add-dir /shared/resources
# .claude/settings.json にも同じパスが含まれていた場合:
# { "permissions": { "additionalDirectories": ["/shared/resources"] } }
# 設定ファイルから /shared/resources を削除すると...
# { "permissions": { "additionalDirectories": [] } } ← /shared/resources を削除
# 修正前の動作:
# --add-dir で指定しているのに /shared/resources へのアクセスが失われる
> ls /shared/resources
# → アクセス拒否(--add-dir を指定しているのに!)修正後の動作(v2.1.98以降)
bash
# --add-dir で /shared/resources を指定して起動
$ claude --add-dir /shared/resources
# settings.json から /shared/resources を削除しても...
# { "permissions": { "additionalDirectories": [] } }
# 修正後:--add-dir は独立して動作するため、アクセスは維持される
> ls /shared/resources
# → アクセス可能 ✓(--add-dir の指定が正しく機能する)実践例
シナリオ1:プロジェクト固有ディレクトリへのアクセス(修正後)
コマンドラインから明示的に指定したディレクトリが確実にアクセス可能になります。
bash
# 共有ライブラリディレクトリを --add-dir で指定してClaude Codeを起動
$ claude --add-dir /opt/shared-libraries --add-dir /data/datasets
# 設定ファイルを管理者が変更して additionalDirectories を空にしても...
# --add-dir で指定したディレクトリは引き続きアクセス可能(修正後)
# Claude Codeは指定ディレクトリのファイルにアクセスできる
> cat /opt/shared-libraries/utils.js
# → 正常に読み込み可能 ✓シナリオ2:開発環境とマネージド設定の組み合わせ(修正後)
管理者が設定を変更しても、個々の開発者が--add-dirで指定したディレクトリへのアクセスが維持されます。
bash
# 開発者の個別設定(.claude/settings.json)
{
"permissions": {
"additionalDirectories": [
"/home/developer/project-a",
"/home/developer/shared-data" ← 管理者が削除
]
}
}
# 開発者はClaude Codeを次のように起動
$ claude --add-dir /home/developer/shared-data
# 管理者が "shared-data" を additionalDirectories から削除した場合
# 修正前:--add-dir にもかかわらず shared-data へのアクセスが失われる
# 修正後:--add-dir の指定が維持され、shared-data へのアクセスが続く ✓シナリオ3:スクリプトからの呼び出し(修正後)
スクリプト経由でClaude Codeを呼び出す場合に、一貫したディレクトリアクセスが保証されます。
bash
#!/bin/bash
# analyze_project.sh
PROJECT_DIR="$1"
SHARED_LIB="/opt/company/shared-libraries"
# 必要なディレクトリを --add-dir で明示的に指定
claude --add-dir "$PROJECT_DIR" \
--add-dir "$SHARED_LIB" \
"プロジェクトのコードを分析して、改善点を提案してください"
# 修正後:settings.json の additionalDirectories の状態に関わらず、
# --add-dir で指定したディレクトリへのアクセスが保証されるシナリオ4:2つのディレクトリ指定方法の使い分け(修正後)
--add-dir と additionalDirectories の違い(修正後):
1. --add-dir(コマンドラインフラグ)
- そのセッションのみ有効
- コマンド実行時に明示的に指定
- additionalDirectories の変更に影響されない(修正後)
- 例: $ claude --add-dir /tmp/project-data
2. permissions.additionalDirectories(設定ファイル)
- すべてのセッションで有効
- 設定ファイルで管理
- セッション中の変更が即座に反映(v2.1.98の別の修正)
- 例: { "permissions": { "additionalDirectories": ["/home/user/projects"] } }
両方を同じディレクトリに設定することができ、
それぞれ独立して動作するようになった(修正後)注意点
- この修正により、
--add-dirとadditionalDirectoriesの設定が独立して動作するようになりました。同じディレクトリが両方に設定されている場合、どちらか一方を削除してももう一方で有効なままになります。 --add-dirの指定はセッション固有であり、設定ファイルのadditionalDirectoriesとは別々に管理されます。- スクリプトや自動化ツールから
--add-dirでディレクトリを指定する場合は、この修正により動作が安定します。 - 一方、意図的に
--add-dirとadditionalDirectoriesの両方からディレクトリを削除してアクセスを完全に拒否したい場合は、両方の設定から削除する必要があります。