Content is user-generated and unverified.

Claude Code Git管理戦略: チーム設定vs個人設定の完全ガイド

🚨 重要な発見: .claude/を丸ごと無視するのは間違い

❌ 間違った従来認識

gitignore
# これは間違い!
.claude/

✅ 正しいGit管理戦略

gitignore
# Claude Code: 個人設定のみ無視、チーム設定は管理対象
.claude/settings.local.json
.claude/hooks/local/
.claude/commands/local/
.claude/logs/
.claude/*.log
.claude/audit-*.log

# 以下はGit管理対象(明示的コメント)
# .claude/settings.json      ← チーム標準設定
# .claude/CLAUDE.md          ← プロジェクト規律  
# .claude/commands/          ← チーム共有コマンド
# .claude/hooks/             ← チーム共有Hook

🏗️ Claude Code プロジェクト設定の二重構造

📊 設定ファイルの役割分担

ファイル役割Git管理優先度用途
settings.jsonチーム共有✅ 管理対象チーム標準・規律
settings.local.json個人専用❌ 無視対象個人最適化

🔄 設定マージの動作

Claude Codeは以下の順序で設定を読み込み・マージします:

1. Enterprise管理ポリシー         (システム全体)
2. ~/.claude/settings.json       (個人グローバル)  
3. project/.claude/settings.json (チーム共有) ← Git管理
4. project/.claude/settings.local.json (個人専用) ← Git無視

重要: settings.local.jsonsettings.jsonより優先されます

📁 推奨ディレクトリ構造

project-repo/
├── .gitignore                      # 適切な.gitignore設定
├── .claude/
│   ├── settings.json               # 🔄 Git管理(チーム標準)
│   ├── settings.local.json         # 🚫 Git無視(個人専用)
│   ├── CLAUDE.md                   # 🔄 Git管理(プロジェクト規律)
│   ├── commands/                   # チーム共有コマンド
│   │   ├── deploy.md               # 🔄 Git管理(チーム標準)
│   │   ├── test-workflow.md        # 🔄 Git管理(チーム標準)
│   │   ├── code-review.md          # 🔄 Git管理(チーム標準)
│   │   └── local/                  # 個人専用コマンド
│   │       ├── my-shortcuts.md     # 🚫 Git無視(個人専用)
│   │       └── debug-helper.md     # 🚫 Git無視(個人専用)
│   └── hooks/                      # Hook管理
│       ├── pre-commit.sh           # 🔄 Git管理(チーム標準)
│       ├── post-edit-format.sh     # 🔄 Git管理(チーム標準)
│       ├── team-linter.sh          # 🔄 Git管理(チーム標準)
│       └── local/                  # 個人専用Hook
│           ├── personal-logger.sh  # 🚫 Git無視(個人専用)
│           └── debug-tracer.sh     # 🚫 Git無視(個人専用)
├── src/
├── tests/
└── package.json

⚙️ 実装例: チーム vs 個人設定

project/.claude/settings.json(チーム標準)

json
{
  "_description": "チーム共有設定 - 全メンバー適用・Git管理対象",
  "_team": "このファイルの変更はチーム全体に影響します",
  
  "permissions": {
    "allow": [
      "Bash(npm run test)",
      "Bash(npm run build)", 
      "Bash(npm run lint)",
      "Bash(git add *)",
      "Bash(git commit *)",
      "Read(*)",
      "Write(src/*)",
      "Write(tests/*)",
      "Write(docs/*)",
      "DeleteFile(*.tmp)",
      "DeleteFile(node_modules/*)"
    ],
    "deny": [
      "Bash(npm run deploy:prod)",
      "Bash(rm -rf src)",
      "Bash(git push origin main)",
      "DeleteFile(src/*)",
      "DeleteFile(.env*)",
      "DeleteFile(package.json)",
      "WriteFile(.env.production)"
    ]
  },
  
  "hooks": {
    "PostToolUse": [
      {
        "matcher": "Edit",
        "command": "./.claude/hooks/team-formatter.sh \"$TOOL_INPUT_PATH\"",
        "description": "チーム標準コードフォーマット"
      },
      {
        "matcher": "Write",
        "command": "./.claude/hooks/pre-commit.sh",
        "description": "チーム標準品質チェック"
      }
    ],
    "PreToolUse": [
      {
        "matcher": "Bash",
        "command": "./.claude/hooks/team-command-guard.sh \"$TOOL_INPUT_COMMAND\"",
        "description": "チーム危険コマンド防止"
      }
    ]
  }
}

project/.claude/settings.local.json(個人専用)

json
{
  "_description": "個人専用設定 - Git無視対象・自由にカスタマイズ可能",
  "_personal": "このファイルの変更は自分にのみ影響・他メンバーには共有されません",
  
  "permissions": {
    "allow": [
      "Bash(npm run dev:debug)",
      "Bash(npm run dev:watch)",
      "DeleteFile(my-debug-*)",
      "DeleteFile(temp-*)",
      "Write(tmp/*)",
      "Write(debug/*)",
      "Bash(docker logs *)"
    ]
  },
  
  "hooks": {
    "PostToolUse": [
      {
        "matcher": "*",
        "command": "./.claude/hooks/local/personal-activity-logger.sh",
        "description": "個人作業ログ記録"
      },
      {
        "matcher": "Edit",
        "command": "./.claude/hooks/local/my-custom-formatter.sh",
        "description": "個人用追加フォーマット"
      }
    ],
    "Stop": [
      {
        "matcher": "",
        "command": "./.claude/hooks/local/session-summary.sh",
        "description": "個人セッション要約"
      }
    ]
  }
}

🎯 チーム開発ワークフロー

新メンバーのオンボーディング

bash
# 1. リポジトリクローン
git clone https://github.com/team/awesome-project.git
cd awesome-project

# 2. チーム設定は自動適用(settings.jsonがGit管理されているため)
claude  # チーム標準設定が自動読み込み

# 3. 個人設定を作成(オプション)
cp .claude/settings.json .claude/settings.local.json
# settings.local.json を個人用にカスタマイズ
# Claude Codeが自動的に .gitignore に追加

# 4. 個人用コマンド・Hook作成(オプション)
mkdir -p .claude/commands/local .claude/hooks/local
# 個人専用のスラッシュコマンドやHookを追加

チーム標準設定の更新

bash
# リードが行う設定更新
vim .claude/settings.json
# チーム全体のルール変更

git add .claude/settings.json .claude/CLAUDE.md
git commit -m "feat: 本番デプロイ操作の追加制限"
git push origin main

# 他メンバーは通常のgit pullで更新取得
git pull origin main
# 次回 claude 起動時に新しいチーム設定が自動適用

個人設定の調整

bash
# 各メンバーが個別に行う
vim .claude/settings.local.json
# 個人の作業効率化設定

# Git管理対象外なので commit/push 不要
# 他メンバーには影響なし

🔧 具体的な.gitignore設定

完全版 .gitignore

gitignore
# === Claude Code設定管理 ===

# 個人専用設定(Git無視)
.claude/settings.local.json
.claude/hooks/local/
.claude/commands/local/
.claude/logs/
.claude/*.log
.claude/audit-*.log
.claude/debug-*.json
.claude/personal-*.md

# チーム共有設定(Git管理対象)
# .claude/settings.json      ← チーム標準設定
# .claude/CLAUDE.md          ← プロジェクト規律
# .claude/commands/          ← チーム共有コマンド(local/除く)
# .claude/hooks/             ← チーム共有Hook(local/除く)

# === その他の標準的な無視設定 ===
node_modules/
dist/
build/
.env.local
.env.*.local
*.log
.DS_Store
.vscode/settings.json

📋 チーム設定のベストプラクティス

1. チーム共有設定(settings.json)で行うべきこと

json
{
  "permissions": {
    "deny": [
      "Bash(npm run deploy:prod)",      // 本番デプロイ防止
      "DeleteFile(src/*)",              // ソースコード保護
      "WriteFile(.env.production)",     // 本番環境変数保護
      "Bash(git push origin main)"      // main直接push防止
    ]
  },
  "hooks": {
    "PostToolUse": [
      {
        "matcher": "Edit",
        "command": "npm run lint:fix",   // 自動リント実行
        "description": "チーム標準リント"
      }
    ]
  }
}

2. 個人設定(settings.local.json)で行うべきこと

json
{
  "permissions": {
    "allow": [
      "Bash(npm run dev:debug)",        // 個人デバッグ環境
      "DeleteFile(my-temp-*)",          // 個人一時ファイル
      "Write(playground/*)"             // 個人実験領域
    ]
  },
  "hooks": {
    "PostToolUse": [
      {
        "matcher": "*",
        "command": "./hooks/local/my-logger.sh",  // 個人作業ログ
        "description": "個人活動記録"
      }
    ]
  }
}

🚀 チーム設定の段階的導入戦略

Phase 1: 基本的な.gitignore修正

bash
# 既存プロジェクトでの導入
echo "# Claude Code個人設定" >> .gitignore
echo ".claude/settings.local.json" >> .gitignore
echo ".claude/hooks/local/" >> .gitignore
echo ".claude/commands/local/" >> .gitignore
echo ".claude/*.log" >> .gitignore

git add .gitignore
git commit -m "feat: Claude Code設定のGit管理戦略導入"

Phase 2: チーム標準設定の作成

bash
# チーム標準設定作成
mkdir -p .claude/{commands,hooks}

# 基本的なチーム設定
cat > .claude/settings.json << 'EOF'
{
  "_description": "チーム共有設定",
  "permissions": {
    "deny": [
      "Bash(npm run deploy:prod)",
      "DeleteFile(src/*)"
    ]
  }
}
EOF

git add .claude/settings.json
git commit -m "feat: Claude Codeチーム標準設定追加"

Phase 3: 個人設定の作成(各メンバー)

bash
# 各メンバーが個別実行
cp .claude/settings.json .claude/settings.local.json
# 個人用にカスタマイズ...

🎊 この戦略の革新的価値

1. チーム標準化

  • 新メンバーが即座にチーム規律を取得
  • コードレビュー負荷削減
  • 品質統一の自動化

2. 個人最適化

  • チーム規律を破らない範囲での自由度
  • 作業効率の個人最適化
  • 学習・実験環境の確保

3. 段階的ガバナンス

  • プロジェクト初期は緩い設定
  • 成熟に応じてチーム規律強化
  • 個人の成長に応じた権限拡大

4. AI時代のチーム管理

  • AIツール使用の組織標準化
  • 技術的制約によるヒューマンエラー防止
  • 開発速度とセキュリティの両立

🔚 まとめ: Git戦略の根本的転換

従来の「.claude/ 丸ごと無視」から、**「チーム資産と個人設定の適切な分離」**へ。

この戦略により:

  • ✅ チーム標準の確実な共有
  • ✅ 個人作業の効率化
  • ✅ セキュリティ規律の統一
  • ✅ AI時代の開発チーム管理

Claude Codeを活用したチーム開発において、このGit管理戦略は必須の基盤となります。

Content is user-generated and unverified.
    Claude Code Git管理戦略: チーム設定vs個人設定の完全ガイド | Claude