Plan Mode (計画モード)
Shift+Tab で Plan Mode に切り替えると、Claude は 書き換えを行わず計画だけ提示 します。
典型的な流れ
[default] > ユーザー認証に Google OAuth を追加して
↓ Shift+Tab
[plan] > (同じ依頼)
↓
Claude: 計画を提示...
1. requirements.txt に authlib を追加
2. app/auth/oauth.py を新規作成 (OAuth フロー実装)
3. app/routes/auth.py に /login/google, /callback ルート追加
4. app/templates/login.html に「Googleでログイン」ボタン追加
5. .env.example に GOOGLE_CLIENT_ID/SECRET を追記
6. tests/test_oauth.py で 5 ケース追加
↓ ユーザーがレビュー → 「OK、進めて」
↓ Shift+Tab
[acceptEdits] > 計画通り実装して
なぜ Plan Mode が便利か
- ✅ 大きな変更を事前レビュー: 数百行の編集前に方針確認
- ✅ 違う方向で動き出す前に修正: 「authlib じゃなく google-auth で」など
- ✅ 学習・読み合わせ用途: コードベースを Claude に解読させる時
- ✅ AI の暴走を防ぐ: 関係ないファイルへの修正を未然にカット
- ✅ 見積もり: 「この変更どれくらい?」のスコープ確認
Plan Mode で深く計画させるコツ
「計画を出して」だけだと粗い場合があるので、こう聞くと精度が上がる:
計画を提示してください。各ステップに次を含めてください: - 対象ファイルの絶対パス - 変更前後のロジックの要点 - 影響範囲 (他に修正が波及するファイル) - テスト戦略 (新規テスト名・既存テストへの影響) - ロールバック方法
安全な進め方のチェックリスト
| # | やること | なぜ |
|---|---|---|
| 1 | ブランチを切ってから | main を直接いじらない (git checkout -b feat/oauth) |
| 2 | 小さな単位でコミット | 失敗時に部分巻き戻しできる |
| 3 | テストを通してからマージ | Claude にもテスト実行させる |
| 4 | 危険操作は手動で | git push -f, rm -rf は自分で打つ |
| 5 | CLAUDE.md に禁則を書く | 「migrations 手動編集禁止」など |
| 6 | 大規模変更は Plan Mode から | 方向性ズレを早期発見 |
| 7 | git status を毎節目で確認 |
想定外の編集を発見 |
チェックポイント運用 (実例)
リファクタの前後で git をうまく使う:
# 1. 不安なら一時コミット (作業ベースを残す)
git checkout -b refactor/services
git commit -am "wip: before refactor"
# 2. Claude に任せる
claude
> services 層を別ファイルに分離。テストも新パスに合わせて修正。
# 3. テスト
pytest -q
# 4a. OK → squash で綺麗な 1 コミットに
git rebase -i HEAD~5
# 4b. NG → 一発でロールバック
git reset --hard HEAD~5
/undo と git の関係
Claude Code には /undo がある場合がありますが、git に頼るのが確実。
Claude が複数ファイル / シェルコマンドを実行した後の状態を戻すには、git の方が信頼できる。
Worktree で本格的に隔離する (詳細は ch6-l7)
リスキーな作業や並列実験には git worktree:
git worktree add ../my-project-experiment -b experiment
cd ../my-project-experiment
claude
main 作業ツリーを汚さず別フォルダで実験できる。Claude Code 側にも EnterWorktree ツール (Agent から isolation: worktree) があり、エージェント自身が隔離環境を作る使い方も可能。
permission ルールで自動承認の枠組みを定義 (詳細は ch6-l6)
.claude/settings.json でルール化:
{
"permissions": {
"allow": [
"Bash(git status)",
"Bash(git diff*)",
"Bash(pytest*)",
"Bash(npm test*)",
"Bash(npm run lint)"
],
"deny": [
"Bash(git push --force*)",
"Bash(git reset --hard*)",
"Bash(rm -rf*)",
"Read(.env)",
"Read(**/*.pem)"
]
}
}
→ git status / pytest などは 無確認で実行、git push --force は 絶対実行不可 に。
危険な操作のリスト
Claude Code に任せず 自分の手で打つ べきコマンド:
| カテゴリ | 例 |
|---|---|
| git の破壊 | git push --force, git reset --hard origin/main |
| 広範な削除 | rm -rf, git clean -fd |
| 本番アクセス | DB の DELETE/UPDATE/DROP, 本番 deploy |
| シークレット操作 | API キー再発行、.env への鍵書き込み |
| CI/CD 設定 | .github/workflows/ の本番デプロイトリガー |
| ネット越し操作 | curl ... | bash, クラウド SDK の delete 系 |
CLAUDE.md と .claude/settings.json の両方に明記しておくのが理想。
あなたは Claude Code の Plan Mode のような立場で、次の依頼に対する変更計画 (read 対象ファイル / 編集箇所 / 検証方法 / ロールバック手順) を提示してください。依頼: 「Flask アプリにレートリミット機構を追加 (1分100リクエスト上限)」