Claude Codeを本気で運用するなら、~/.claude/ のファイル構造を頭に入れておきたい。どこに何があって、どう編集すれば何が変わるのか。この物理地図を知らないまま使うのは、コックピットを見ずに飛行機を飛ばすのと同じ。
~/.claude/ 直下を ls すると、以下が並ぶ。
~/.claude/
├── CLAUDE.md
# グローバル指示書(全セッション必読)
├── settings.json
# ユーザー設定(permissions / hooks / plugins)
├── settings.local.json
# マシン固有設定(gitignore推奨)
├── skills/
# スキル正本(擬似的な「部下」群)
├── commands/
# スラッシュコマンド
├── projects/
# セッションログ(*.jsonl) + memory/
├── plugins/
# プラグインキャッシュ+marketplaces
├── cache/
# 一時キャッシュ(hookマーカー等)
├── sessions/
# 進行中セッション
├── tasks/
# タスク状態
├── history.jsonl
# コマンド履歴
├── shell-snapshots/
# シェル状態
├── file-history/
# ファイル編集履歴
├── plans/
# プラン実行ログ
└── telemetry/
# テレメトリ
agents/(サブエージェント定義)と output-styles/(出力スタイル)は作成時に生成される。私の環境では未使用なので一覧に出ていない。
本体バイナリは /opt/homebrew/lib/node_modules/@anthropic-ai/claude-code/(Homebrew経由インストール時)。実行ファイルは bin/claude、エントリは cli-wrapper.cjs。ここは触らない。触るのは ~/.claude/ 配下のみ。
Claude Code 知らないと損する40のワザ
早割は先着10名様まで(5名の方が申込済)
マークダウン形式の「システムプロンプト拡張」。Claude Codeはセッション起動時にCLAUDE.mdを必ず読む。 読み込みは連結方式(公式仕様。上書きでなく、全て順にコンテキストへ積まれる)。読み込まれるファイル種別は以下(具体的な読み込み順序の厳密仕様は公式に明記なし。以下は観測ベース)。
/Library/Application Support/ClaudeCode/CLAUDE.md(IT部門配布、除外不可)~/.claude/CLAUDE.md — ユーザーグローバルCLAUDE.md — 起動時に祖先を全て読込<cwd>/CLAUDE.md — 作業中ディレクトリCLAUDE.local.md — 同ディレクトリのローカル上書き(gitignore推奨、CLAUDE.md の後にappendされる)
子ディレクトリの CLAUDE.md はon demand読込(必要時のみ)。
私の運用では、~/.claude/CLAUDE.md に言語・口調・承認ルール等の不変項目を置き、プロジェクト固有の要件は各プロジェクトの CLAUDE.md で具体化している。JSON形式。主要キーは以下。
permissions — 許可/確認/拒否コマンドのリストhooks — イベント発火時に実行するスクリプト(後述)enabledPlugins — 有効化したプラグインeffortLevel — 推論深度(low / medium / high / xhigh / max。max はモデル依存)env — 環境変数
私の実ファイルから抜粋。{
"permissions": {
"ask": ["Bash(rm:*)"]
},
"enabledPlugins": {
"slack@claude-plugins-official": true
},
"effortLevel": "high"
}
rm 系は確認必須にしてある。削除は誤爆コストが高いため ~/.Trash/ への mv で代替するルールをグローバルCLAUDE.mdに明記している。
APIキー・マシン固有パス・個人的に有効化したコマンドなど、git共有すべきでない設定を分離する場所。.gitignoreに入れておく。
~/.claude/projects/-Users-kawai/memory/ が永続メモリの実体。-Users-kawai はホームディレクトリをプロジェクトID化したもの(/ を - に置換)。
projects/-Users-kawai/memory/
├── MEMORY.md
# 目次(全メモリへのリンク一覧)
└── feedback_*.md / project_*.md /
# 個別メモリ
reference_*.md / ceo_handoff.md
MEMORY.md は目次で、冒頭に箇条書きで各ファイルへのリンクと1行要約。本体は個別mdに分離する設計。
公式のAuto memoryに type フィールドの規定はない。私は独自にfrontmatterへ type を入れて分類している。タイプは4種類。
feedback — ユーザーからのフィードバック。行動変容ルールproject — 案件・プロジェクト固有の情報reference — 参考情報・フレームワークpreference — 口調・好み
実例(私のメモリから)。name: 法人問い合わせは予算ヒアリング先行
description: 法人研修・登壇の一次返信は見積提示より予算・テーマヒアリングを優先する
type: feedback
originSessionId: 45a028df-080d-4baa-9683-bc736baa460e
originSessionId を持たせる意味は追跡性。どのセッションでこの学習が発生したか、~/.claude/projects/<project>/<session-id>.jsonl を辿って検証できる。
feedback_短い英単語.md で内容が一目で分かる形にMEMORY.md を常に整えておく(新規追加時は必ず追記)MEMORY.md に対して実体42ファイル。読み込みコストを抑えるため、目次は1行要約に留めている。~/.claude/skills/<名前>/SKILL.md で定義。フロントマターの description に発火条件を書くと、Claude Codeが会話中に自動で呼び出す。
name: writer-article
description: ユーザーが「記事書いて」「note書いて」「○○を記事化」と言った時、テーマ・atom_idを指定して記事を依頼した時に発火する。
context: fork
argument-hint: "[テーマ / 想定読者 / 参考素材パス]"
context: fork は子コンテキストで実行する指定。親の会話履歴を汚さず、独立した作業空間でスキルが走る。
スキル配下に references/ を置き、大きな設計資料・テンプレ・禁則事項を分離するのが運用の定石。SKILL.md本体はトリガーとルーチン骨子だけ、詳細は references に押し込む。
私の環境には30以上のスキルがある(writer-article / thumbnail / diagram / fact-check / secretary / accounting 等)。1スキル=1業務の粒度で量産すると、汎用LLMが「器用貧乏」から「専門家集団を従える指揮官」に変わる。
~/.claude/commands/<名前>.md で定義。チャット入力欄に /名前 と打つと実行される。スキルとの違いは「明示的に呼ぶ」か「自動発火」か。定型作業を手動で回したい時はcommands、文脈判断で自動起動したい時はskills。
複雑なタスクを親Claudeから子Claudeに委譲する仕組み。子は独立コンテキストで走り、結果だけ親に返す。長時間・多ステップのリサーチやコード生成に使う。
プレゼン調・学術論文調・コードレビュー調など、出力の様式をプリセット化する層。複数プリセットを用意し、会話中に切り替えできる。
Claude Codeの挙動を変えるもう一つのレバー。イベント発火時にbashコマンドを実行できる。
SessionStart / SessionEnd — セッション開始・終了UserPromptSubmit — ユーザーがメッセージ送信時PreToolUse / PostToolUse — ツール使用前/後PostToolUseFailure — ツール失敗時Stop — ターン終了時PermissionRequest / PermissionDenied — 権限確認/拒否時Notification — 通知発生時FileChanged — ファイル変更時InstructionsLoaded — CLAUDE.md等の指示ロード時WorktreeCreate — worktree作成時
※ 本記事で当初列挙していた StopFailure / CwdChanged / TaskCreated / TaskCompleted / SubagentStart / SubagentStop / PreCompact / PostCompact は公式ドキュメント未記載のため削除。利用可能イベントは公式ドキュメント(code.claude.com/docs)で最新確認すること。
hook本体はshellコマンド。JSON出力で hookSpecificOutput.additionalContext に文字列を返すと、その内容がClaudeへの追加文脈として注入される。私は「その日初回セッションなら、前日振り返り+AIニュース+4観点の戦略提案を出せ」という命令を SessionStart に仕込んでいる。
"SessionStart": [{
"hooks": [{
"type": "command",
"command": "TODAY=$(TZ=Asia/Tokyo date +%Y-%m-%d); MARKER=~/.claude/cache/last_morning_brief.txt; LAST=$(cat $MARKER 2>/dev/null); if [ \"$TODAY\" != \"$LAST\" ]; then echo $TODAY > $MARKER; printf '{\"hookSpecificOutput\":{\"hookEventName\":\"SessionStart\",\"additionalContext\":\"本日初セッション。戦略提案を実行: (1)前日振り返り (2)AIニュース収集 (3)4観点の戦略提案\"}}'; fi",
"timeout": 10
}]
}]
マーカーファイルで1日1回に制限している点がポイント。同日2回目以降のセッションでは発火しない。
私はタメ語・体言止め・助詞削減ルールを守らせたい。モデルはターンを跨ぐと緩みがちなので、毎プロンプトでスタイル指示を再注入する。
"UserPromptSubmit": [{
"hooks": [{
"type": "command",
"command": "echo '{\"hookSpecificOutput\":{\"hookEventName\":\"UserPromptSubmit\",\"additionalContext\":\"[STYLE厳守] 体言止め強制/助詞削除/断定のみ/クッション禁止/水増し禁止\"}}'"
}]
}]
この1行注入でスタイル逸脱が劇的に減る。CLAUDE.mdに書くだけでは足りない場面で効く。
x.md 編集時にfact-checkを自動発火X投稿下書きを保存した瞬間に事実確認スキルを走らせる。
"PostToolUse": [{
"matcher": "Edit|Write",
"hooks": [{
"type": "command",
"command": "{ INPUT=$(cat); FP=$(echo \"$INPUT\" | jq -r '.tool_input.file_path'); if echo \"$FP\" | grep -q '/x\\.md$'; then echo \"{\\\"hookSpecificOutput\\\":{\\\"additionalContext\\\":\\\"x.md更新検知。fact-checkスキル実行\\\"}}\"; fi; }",
"timeout": 5
}]
}]
matcher でツール種別を絞り、ファイルパスで発火条件を追加する。「うっかり未検証投稿」を構造的に防ぐ仕組み。
statusMessage で進捗表示を出せるmatcher は正規表現。Edit|Write のようにパイプで複数ツールを束ねるClaudeが外部ツール(Slack / Gmail / Google Drive / Playwright等)を呼ぶための標準プロトコル。サーバー追加は claude mcp add コマンドで。
私の環境では ~/.claude/mcp-needs-auth-cache.json に認証待ちMCPが記録されている(※ 公式ドキュメント未記載の内部実装ファイル。将来変更の可能性あり)。
MCP + commands + skills + hooks を束ねた配布単位。~/.claude/plugins/ にキャッシュされ、settings.json の enabledPlugins で有効化する。
有効化側(~/.claude/settings.json)はboolean指定。
{
"enabledPlugins": {
"slack@claude-plugins-official": true
}
}
インストール済みメタデータは別ファイル ~/.claude/plugins/installed_plugins.json に記録される(※ 以下スキーマは実環境の観測ベース。公式ドキュメントに詳細スキーマ記載なし)。
{
"version": 2,
"plugins": {
"slack@claude-plugins-official": [{
"scope": "user",
"installPath": "/Users/kawai/.claude/plugins/cache/claude-plugins-official/slack/1.0.0",
"version": "1.0.0",
"gitCommitSha": "7b9458950d38bb01ddb48b669f9fa89bcdfd98b8"
}]
}
}
marketplaces/ 配下にリポジトリが丸ごとcloneされる。gitコミットSHAまで記録されているので、バージョン固定性が高い。
Claude Codeは会話を全部ログに残す。過去の会話を引っ張り出すには、どこに何があるか知っておく必要がある。
~/.claude/projects/-Users-kawai/)に <session-uuid>.jsonl が並ぶgrep で過去会話全探索可能
私の環境では -Users-kawai/ 配下に数千のjsonlが蓄積している。定期的なローテーション or 古いjsonlを圧縮バックアップへ退避する運用を推奨する。~/Library/Caches/claude-cli-nodejs/mv でゴミ箱へ)~/.claude/cache/ — hookマーカー等の軽量キャッシュ~/.claude/history.jsonl — コマンド履歴~/.claude/shell-snapshots/ — シェル状態スナップショット~/.claude/file-history/ — ファイル編集履歴~/.claude/sessions/ — 進行中セッション~/.claude/plans/ — プラン実行ログ~/.claude/telemetry/ — テレメトリ
ディスク容量が気になったら、まず ~/Library/Caches/claude-cli-nodejs/ と ~/.claude/projects/ 内の古いjsonlから整理する。公式インストール経路は以下の2系統。
brew install --cask claude-codenpm install -g @anthropic-ai/claude-code
私の環境(Apple Silicon + Homebrew nodejs + npm経由)では以下パスに配置されている(※ 環境依存。公式にパス明記なし・内部実装の可能性あり)。/opt/homebrew/lib/node_modules/@anthropic-ai/claude-code/
├── bin/claude
# 実行ファイル
├── cli-wrapper.cjs
# エントリポイント
├── install.cjs
├── node_modules/
├── package.json
├── sdk-tools.d.ts
└── README.md
バージョンアップは npm update -g @anthropic-ai/claude-code(npm経由の場合)。~/.claude/ 配下は温存されるので、設定・メモリ・スキルは無事。
Claude Codeを「ただのチャットUI」で終わらせない鍵は、~/.claude/ の物理構造を把握して編集できることにある。
最低限押さえるべき5点。
type で分類references/ で詳細を分離~/.claude/ を開く癖をつけてほしい。
Claude Code 知らないと損する40のワザ
⬇️ 1on1で密に教えて欲しい方はこちらがオススメです。
早割は先着10名様まで(5名の方が申込済)
⬇️ 法人研修をご希望の方はこちら
AI活用・キャリア戦略 個別相談
https://www.shoeisha.co.jp/book/detail/9784798193427
#AI #生成AI #AIエージェント #AI時代 #AI活用 #AI人材 #AI研修 #AIツール #Claude #ClaudeCode