Proプランで使えるようになったClaude Code:ターミナルでの破壊的変更と除外設定

  • Claude Codeはなんとなく使い始めるとファイルや設定が壊されそう。
  • claude/settings.jsonを確認して、アクセス範囲を制限しておくことがとても大事。
  • あと、gitでバージョン管理するもほぼ必須。

はじめに:何が根本的に変わったのか

2025年6月、Anthropic社のClaude CodeがProプラン(月額20ドル)で利用可能になりました1

Claude Codeはターミナルで動作する

Claude Codeは「実行者」として機能します。ターミナル(コマンドライン)で直接動作し、ファイルの編集やGit操作を自動で実行できます。まるで隣に座った優秀なプログラマーが、直接キーボードを操作してくれるようなものです。

自然言語での指示するだけで、Claude Codeは以下を自動実行します:

claude "認証システムのバグを修正して、テストも追加してコミットまでして"
Code language: JavaScript (javascript)
  1. プロジェクト全体の調査と理解
  2. 関連ファイルの特定
  3. 複数ファイルにまたがる修正の実施
  4. テストの作成と実行
  5. Git操作(add、commit、場合によってはpush)

開発者は結果を確認し、必要に応じて修正を指示するだけです。AIが「実行者」として直接作業を行います。

従来の方法はコピー・ペーストが大変だった

これまでのプログラミング支援AIは、あくまで「助言者」でした。コードを見せて修正案をもらい、それを手動で実装する流れでした。

  1. 手動でコードを準備
    修正したいファイルの内容をコピーして、AIとの対話画面に貼り付けます。複数ファイルにまたがる場合は、関連するすべてのファイルを自分で選択する必要があります。
  2. 背景情報の説明
    「このコードは認証部分で、○○の機能を担当している」といった文脈を詳しく説明します。AIはプロジェクト全体を理解していないため、必要な情報を手動で提供しなければなりません。
  3. 修正案の受け取り
    AIが提案した修正内容を画面で確認します。通常は修正されたコード全体が表示されます。
  4. 手動での実装
    提案されたコードをコピーして、元のファイルに貼り付けます。複数ファイルの場合は、それぞれに対して同じ作業を繰り返します。
  5. 手動での確認
    修正が正しく動作するかテストを実行します。問題があれば、再び1からやり直しです。

従来のAI支援は「相談相手(Advisor)」でした。コードを見せて助言をもらい、その内容を自分で実装する関係です。この流れでは、開発者が「翻訳者」の役割を担います。AIの提案を人間の作業に変換する労力が必要でした。

しかし、Claude Codeは「協働者(Co-Worker)」として機能します。実際にファイルを編集し、コマンドを実行し、Git操作まで行います。この変化を一言で表現するなら、「アドバイスをもらう」から「作業を任せる」への移行です。

Claude Code のインストールはnpmから

npm install -g @anthropic-ai/claude-code
Code language: CSS (css)

インストール後、既存のClaudeアカウントでログインします。
新しいAPIキーは不要で、既存のProプラン契約がそのまま適用されます。

Claude CodeはClaude 3.7 SonnetとClaude 3.5 Haikuの2つのモデルを使い分けています2。複雑な推論が必要な作業にはSonnet、簡単なファイル操作にはHaikuを使用して、コストと性能のバランスを取っています。

Proプランの利用制限も多い

  • 利用回数の制約
    Proプランでは5時間あたり約10〜40回のやりとりが可能です3
    ただし、この数値はプロジェクトの複雑さとファイル数に大きく依存します。単純なファイル修正なら40回近く、大規模なリファクタリングなら10回程度が目安です。
  • 共有制限の重要性
    通常のClaude(ブラウザ版)との使用量は合算されます。
    ブラウザでClaudeを頻繁に使用する場合、Claude Codeで使える回数が大幅に減少します。この制限は多くのユーザーにとって予想以上に厳しく感じられるでしょう。
  • 対象プロジェクトの規模
    Proプランは1000行以下の小規模プロジェクトに適しています。
    それ以上の規模では、Maxプラン(月額100ドル、5倍の使用量)またはMaxプラン上位版(月額200ドル、20倍の使用量)が実質的に必要です。

ファイルシステムとセキュリティリスクの詳細分析

確認された具体的なリスク

  • 環境変数の意図しない読み込み
  • シェル環境の完全継承
  • コマンド実行範囲の広さ

Claude Codeがプロジェクトの.envファイルを自身の設定として読み込む現象が報告されています4。例えば、.envファイルにDEBUG=trueと設定されている場合、Claude Codeのデバッグログが表示されてしまいます。これは機密情報の漏洩につながる可能性があります。

また、Claude Codeは実行時のシェル環境をすべて継承します。これには以下が含まれます:

  • システムにインストールされているすべてのコマンド
  • カスタムスクリプトと関数
  • 環境変数(PATH、API_KEY等)
  • エイリアス設定

デフォルト状態では、Claude Codeは以下のコマンドを実行できます:

  • ファイル操作(作成、編集、削除、移動)
  • ネットワーク操作(wget、curl等は一部制限あり)
  • パッケージ管理(npm、pip、cargo等)
  • Git操作(commit、push、pull、merge等)
  • システムコマンド(ls、find、grep等)

実装されている安全機能

  • 多層防御アプローチ
  • 開発コンテナによる隔離

Claude Codeは以下の防御機能を実装しています5

  1. 権限システム: 機密操作には明示的な承認が必要
  2. コンテキスト分析: 有害な指示を検出してブロック
  3. 入力サニタイゼーション: コマンドインジェクション攻撃を防止
  4. コマンドブロックリスト: curl、wgetなど危険なコマンドの制限
  5. プロンプトインジェクション対策: 悪意のある指示の無効化

Anthropic社は開発コンテナ設定を提供しています6。この環境では:

  • ファイアウォールによるネットワーク制限
  • 必要最小限のサービスのみへのアクセス許可
  • システムから分離された安全な実行環境
  • --dangerously-skip-permissionsフラグの安全な使用が可能

バージョン管理システムとの統合の重要性

Git前提の機能設計

Claude CodeはGitとの深い統合を前提として設計されています。

たとえば、AIが10個のファイルを同時に変更した場合、どこを変更したかを正確に把握するのは困難です。Gitのコミット履歴により、AIによる変更も含めて完全な記録が残ります。git diffで変更内容を確認し、git reset --hardで一瞬で元に戻すことができます。

以下の機能が標準で提供されています:

claude commit                    # 自動でコミットメッセージを生成
claude "create a pr"            # プルリクエストの作成
claude "rebase on main"         # ブランチのリベース
claude "resolve merge conflicts" # マージ競合の解決
claude "which commit added tests for markdown back in December?"
                                 # Git履歴の検索
Code language: PHP (php)

これらの機能は、バージョン管理システムなしでは成り立ちません。

セキュリティ設定の実践ガイド

3層構造の設定システム

Claude Codeは階層的な設定システムを採用しています:

  1. ユーザーレベル設定(~/.claude/settings.json)
    すべてのプロジェクトに適用される基本的なセキュリティルールを定義します。
  2. プロジェクトレベル設定(.claude/settings.json)
    特定のプロジェクトに必要な権限を設定します。.claude/settings.jsonをGitで管理してチーム全体で共有することが推奨されます7
  3. ローカル設定(.claude/settings.local.json)
    個人的な設定を記述します。このファイルはGitで自動的に無視されます。

詳細な権限設定例

node_modules/dist/build/などのビルド成果物や、.env*などの機密ファイルは初期設定で除外すべきです8

{
  "permissions": {
    "allow": [
      // ファイル読み取り権限
      "Read(src/**)",           // ソースコード全体
      "Read(docs/**)",          // ドキュメント
      "Read(README.md)",        // READMEファイル
      "Read(package.json)",     // 依存関係情報
      "Read(*.md)",             // マークダウンファイル
      
      // 制限付き編集権限
      "Edit(src/**)",           // ソースコードのみ
      "Edit(docs/**)",          // ドキュメントのみ
      "Edit(tests/**)",         // テストファイルのみ
      
      // 安全なコマンド実行
      "Bash(npm run lint)",     // リントツールの実行
      "Bash(npm run test:*)",   // テストの実行(ワイルドカード使用)
      "Bash(npm run build)",    // ビルドプロセスの実行
      "Bash(git status)",       // Gitステータスの確認
      "Bash(git diff)",         // 変更差分の確認
      "Bash(git add .)",        // ファイルのステージング
      "Bash(git commit:*)",     // コミット(任意のメッセージ)
      
      // 制限付きWebアクセス
      "WebFetch(domain:docs.example.com)",
      "WebFetch(domain:api.github.com)"
    ],
    
    "deny": [
      // 危険なシステムコマンド
      "Bash(curl:*)",           // 任意ファイルのダウンロード
      "Bash(wget:*)",           // 任意ファイルのダウンロード
      "Bash(rm -rf:*)",         // 強制削除
      "Bash(sudo:*)",           // 管理者権限での実行
      "Bash(chmod +x:*)",       // 実行権限の変更
      
      // システムファイルへのアクセス
      "Read(/etc/**)",          // システム設定
      "Edit(/etc/**)",          // システム設定の変更
      "Read(/home/*/.ssh/**)",  // SSH鍵
      "Edit(/home/*/.ssh/**)",  // SSH鍵の変更
      
      // 機密ファイルの保護
      "Read(.env)",             // 環境変数ファイル
      "Edit(.env)",             // 環境変数ファイルの変更
      "Read(.env.*)",           // 環境変数関連ファイル
      "Edit(.env.*)",           // 環境変数関連ファイルの変更
      
      // パターンマッチによる機密保護
      "Read(**/*secret*)",      // secretを含むファイル
      "Read(**/*key*)",         // keyを含むファイル
      "Read(**/*password*)",    // passwordを含むファイル
      "Edit(**/*secret*)",
      "Edit(**/*key*)",
      "Edit(**/*password*)"
    ]
  },
  
  "ignorePatterns": [
    // ビルド成果物
    "node_modules/**",          // 依存関係
    "dist/**",                  // ビルド出力
    "build/**",                 // ビルド出力
    "coverage/**",              // テストカバレッジ
    
    // ログとキャッシュ
    "logs/**",
    "*.log",
    ".cache/**",
    
    // 機密ファイル
    ".env*",                    // 環境変数
    "*.key",                    // 鍵ファイル
    "*.pem",                    // 証明書
    "*.p12",                    // PKCS#12証明書
    
    // OS固有ファイル
    ".DS_Store",                // macOS
    "Thumbs.db",                // Windows
    
    // エディタ設定
    ".vscode/settings.json",
    ".idea/**",
    
    // パターンベース除外
    "**/*secret*",
    "**/*password*",
    "**/*.backup",
    "**/*.tmp"
  ],
  
  "env": {
    "CLAUDE_CODE_ENABLE_TELEMETRY": "0",
    "NODE_ENV": "development"
  }
}
Code language: JSON / JSON with Comments (json)

重要な設定原則

  • Denyルールの優先
  • gitignore仕様の活用
  • 環境変数による制御

設定システムでは、Denyルールが Allowルールより常に優先されます9。まず必要最小限の権限をAllowで許可し、明確に危険なものをDenyで禁止する戦略が効果的です。

ignorePatternsとRead/Editルールは、gitignoreと同じパターンマッチング仕様を使用します10。既存の.gitignoreファイルの知識を活用できます。

設定ファイル内で環境変数を定義することで、Claude Codeの動作を細かく制御できます。これにより、チーム全体で統一された環境を構築できます。

実践的な安全運用指針

それでは、どのようにClaude Codeを利用していくのがよいのでしょう。

段階的導入アプローチ

まずは、安全な隔離環境を用意してから導入することが大事です。

  • フェーズ1:隔離環境での検証
    Docker等のコンテナ環境で、限定的なプロジェクトを使ってClaude Codeの動作を確認します。この段階では--dangerously-skip-permissionsフラグは絶対に使用しません。
  • フェーズ2:制限された実環境での試用
    実際の開発環境で、厳格な権限設定のもとで小規模な作業を依頼します。すべての変更をGitで追跡し、必要に応じて即座に戻せる体制を整えます。
  • フェーズ3:段階的な権限拡大
    安全性が確認できた操作について、徐々に権限を拡大していきます。ただし、機密ファイルへのアクセスは最後まで慎重に検討します。

チーム開発での人間によるレビュープロセス

チーム開発では、AIの使い方も意思統一が必要です。
AIによる変更であっても、最終的な責任は承認した人間にあります。この責任の所在を明確にし、適切な承認プロセスを維持することが重要です。

  • 承認フローの維持
    Claude Codeが提示する「Yes, don’t ask again」オプションは、十分に検証された操作以外では使用を避けるべきです。人間による最終確認は、安全性の最後の砦です。
  • 変更内容の理解責任の明確化
    AIが行った変更について、必ず内容を理解してから承認します。理解できない変更は、説明を求めるか、より小さな単位に分割して実行します。
  • 定期的な設定見直し経験の共有
    プロジェクトの進行に合わせて、権限設定を定期的に見直します。不要になった権限は削除し、新たに必要になった権限のみを追加します。Claude Codeの使用経験や有効な設定パターンを、チーム内で積極的に共有します。特に、セキュリティインシデントや予期しない動作については、速やかに情報を共有して対策を講じます。

現在の限界と今後の課題

Claude Codeは優秀ですが、まだまだ課題もあります。それを理解して付き合っていく必要があるのです。

  • コンテキスト理解の限界
    複雑なビジネスロジックや暗黙的な制約については、人間による説明が必要な場合があります。
  • 大規模プロジェクトでの性能
    数万行を超えるプロジェクトでは、全体把握に時間がかかり、関連性の判断が困難になる場合があります。
  • 言語・フレームワーク依存
    すべてのプログラミング言語やフレームワークが等しくサポートされているわけではありません。新しい技術や特殊な構成では、期待通りの動作をしない可能性があります。
  • 新しい脅威への対応
    AIによるコード操作は新しい領域であり、まだ知られていないセキュリティリスクが発見される可能性があります。より細かなセキュリティ制御が可能になる一方で、設定の複雑さが増し、適切な設定が困難になるリスクがあります。

まとめ:破壊的変化への適応

Claude CodeのProプラン対応により、AIによる直接的なコード操作が多くの開発者にとって現実的な選択肢となりました。これは「助言型」から「実行型」への根本的な変化であり、真の意味で破壊的です。この変化の核心は、開発者とAIの関係性の変化にあります。従来の「質問と回答」のモデルから、「指示と実行」のモデルへの移行です。開発者は管理者の役割を担い、AIは実行者として機能します。しかし、この力には相応の責任が伴います。環境変数へのアクセス、システムコマンドの実行、ファイルシステムへの広範囲なアクセスなど、適切な制限なしでは深刻なセキュリティリスクを招きます。

成功の鍵は、段階的な導入と継続的な学習にあります。権限システムとバージョン管理システムを活用し、人間による最終確認を維持しながら、AIの能力を最大限に活用する体制の構築が重要です。Claude Codeは強力なツールですが、魔法ではありません。適切な理解と準備により、プログラミングの生産性を大幅に向上させる可能性を秘めています。重要なのは、その力を責任を持って活用することです。

  1. 以前はMaxプラン(月額100ドル)以上でのみ利用可能でした。この変更により、より多くの開発者がアクセス可能になりました。 – Using Claude Code with your Pro or Max Plan
  2. 複雑なコード理解と生成にはSonnet、軽量な機能にはHaikuを使用することで、パフォーマンスとコストの最適化を図っています。 – Claude Code on Amazon Bedrock: Quick Setup Guide
  3. この数値はプロジェクトの複雑さ、コードベースのサイズ、auto-accept設定により大きく変動します。小さなリポジトリでの軽作業に最適化されています。 – Using Claude Code with your Pro or Max Plan
  4. DEBUG=trueが設定されている場合、Claude Codeのデバッグログが意図せず表示される事例が確認されています。これは潜在的なセキュリティリスクです。 – Potential Security Risk: Claude Code Accessing Local .env File Environment Variables
  5. 権限システム、コンテキスト分析、入力サニタイゼーション、コマンドブロックリスト、プロンプトインジェクション対策など、多層防御アプローチを採用しています。 – Manage permissions and security – Claude Code
  6. VS CodeのRemote – Containers拡張機能と連携し、ファイアウォール設定とネットワーク制限により安全な実行環境を提供します。 – Manage permissions and security – Claude Code
  7. プロジェクト設定をバージョン管理することで、チーム全体で一貫したセキュリティ基準を維持できます。 – Claude Code Best Practices
  8. node_modulesを含めると、最初の1000ファイルがnode_modulesになり、Claude Codeが混乱して効果が大幅に低下することが報告されています。 – Ignore ‘node_modules’ by default
  9. この仕様により、明示的に禁止されたコマンドは、Allowルールで許可されていても実行されません。セキュリティ上重要な設計です。 – Claude Code settings
  10. 既存の.gitignoreファイルの知識をそのまま活用でき、*、!などのパターンが使用可能です。 – Claude Code settings