Claudeを信頼できるパートナーにする
対象: BS本部プロパ(BSG・ISG・BPM-SG)| 47名
今日の時間割
アイスブレイク
5分2週間ぶりです。前回作ったサイトをグループ内で見せ合ってください。
- どんなサイトを作りましたか?
- どんな指示を出しましたか?うまくいった/詰まった場面は?
前回のトラブルと対処法
5分前回、「Claudeに質問を投げた後に回答が返ってこない」というトラブルが何件か発生しました。原因と対処法をお伝えします。
§0.1原因① コンテキストの肥大化
Claude Code は会話が長くなるにつれて、セッション内に蓄積される情報(コンテキスト)が増えていきます。これが限界に近づくと、回答が極端に遅くなったり、止まったりします。
/compact
会話履歴をその場で要約・圧縮します(セッションは継続されます)。
現在のコンテキスト使用状況は /context で確認できます。使用率がおおむね 70〜80% を超えてきたら /compact をかけるタイミングの目安です。
| コマンド | セッションへの影響 |
|---|---|
/clear |
セッションを終了し、新しいセッションを開始する(履歴はリセット) |
/compact |
同一セッションを継続しながら、会話履歴をサマリーに圧縮する |
/compact はセッションを終わらせるわけではありません。重くなったコンテキストを軽くする操作です。
§0.2原因② VS Code 拡張機能の負荷
VS Code に多くの拡張機能を入れていると、バックグラウンド処理が重くなり Claude Code の動作に影響することがあります。
# プロジェクトのディレクトリに移動して
cd your-project
# Claude Code を起動
claude
VS Code 内蔵のターミナル(メニューバー: 表示 → ターミナル)でも、PowerShell / コマンドプロンプト単体からでも使えます。
Claudeは何を見ているのか
10分このパートのゴール:「コンテキスト」という概念を理解し、Claude Code のコンテキストには何が入っているのかを把握する。 具体的な道具(CLAUDE.md・Skills 等)の話は Part 2 以降で扱います。
§1.1セッションとは
セッション = claude を起動してから、/clear するか終了するまでの一続きの会話の単位です。セッションをまたぐと、会話の履歴は引き継がれません。代わりに、CLAUDE.md と auto memory が毎セッション自動で読み込まれることで、前回の文脈を再現します。
§1.2コンテキストとは
Claude Code は そのセッションで「見えている情報」だけを頼りに動きます。この「見えている範囲」を コンテキスト と呼びます。コンテキストの中身を理解することが、Claude を思い通りに動かすための第一歩です。
出典: Explore the context window | How Claude remembers your project
§1.3Claudeがセッション開始時に読んでいるもの
(公式の Context window 図に準拠)
公式ドキュメントの表現では "Before you type anything"(何かを入力する前)。Claude Code のプロセスを起動しただけではまだ読み込まれておらず、最初のリクエストを処理する直前にまとめて読み込まれます。2回目以降のプロンプトでは再読み込みされません(セッション中は固定)。
これらはすべてユーザーには非表示でバックグラウンドで読み込まれます。
§1.4セッション中に増えていくもの
- あなたが送った プロンプト(会話の履歴)
- Claude が 読んだファイル の中身(
Readツール経由) - Claude が 実行したコマンド とその出力
- パスにマッチして遅延読み込みされた
.claude/rules/のルール - 発火した hooks の出力
- 呼び出された Skill の中身
§1.5見えて「いない」もの
- Claude が明示的に読んでいないファイル(PCの中身を「全部知っている」わけではない)
- 社内ポータル・チケット・Slack などの外部情報(MCP連携がない限り)
- 過去の別セッションの会話(auto memory に書き残した分を除く)
コンテキストを与える方法 — CLAUDE.md と Skills
40分| Claude Code の概念 | チーム運営に例えると |
|---|---|
| セッション | チームメンバー(その都度、別人) |
| セッションを起動する | 新人のチームメンバーを雇う |
| CLAUDE.md | 新人に渡すプロジェクトの引継書(参画時に読んでもらう) |
| Skill | 必要なときだけ参照するマニュアル(書庫に置いてある) |
今日のテーマは、この引継書とマニュアルをどう書くか、です。
§2.1CLAUDE.md とは
セッション開始時に毎回自動で読み込まれるファイル。新人がプロジェクト参画時に読む引継書に当たります。プロジェクトの文脈・ルール・制約をここに書いておけば、セッションが切り替わっても同じ前提で仕事を始められます。
§2.2CLAUDE.md に何を書くか
出典: What to put in CLAUDE.md | Best practices
- Bash コマンド — ビルド・テスト・起動コマンド
- コードスタイル — インデント幅、命名規則など
- テスト方法 — テストランナーと実行方法
- リポジトリ作法 — ブランチ命名規則、PR の慣習
- アーキテクチャ上の決定
- 環境設定の癖 — 環境変数、特殊な前提条件
- よくある落とし穴
- (+実用的に)プロジェクト概要・技術スタック
- Claude がコードを読めば分かること
- その言語の標準的な慣習
- 詳細な API ドキュメント(URLリンクで十分)
- 頻繁に変わる情報
- 「きれいなコードを書く」のような自明な指示
- ファイルごとの詳細な説明
§2.3実例:このワークショップで実際に使っている設定
このワークショップ自体の運営を、Claude Code を使って AI 駆動で回しています。その設定を実例として見てもらいます。
- プロジェクト概要・チーム構成・ディレクトリ構成を記載
- 個人情報の取り扱いルール(コミット可/不可の基準)
- 対外文章のスタイルガイド(「AIっぽい文章を避ける」という指針)
§2.4ハンズオン用プロジェクトの準備
ハンズオン用に、タスク管理アプリ(純粋な HTML / CSS / JavaScript、ビルド不要)の小さなプロジェクトを公開リポジトリで配布しています。
このリポジトリには ハンズオンごとの出発点となるブランチ が用意されています。各ハンズオン冒頭で git checkout するだけで資材一式が揃った状態になります。ブランチを使うため、ZIP ダウンロードではなく git clone での取得を推奨します。
| ブランチ | 用途 |
|---|---|
main |
初期状態(CLAUDE.md・Skill・hook なし) |
handson-01-claudemd |
ハンズオン①の出発点(CLAUDE.md.sample 同梱) |
handson-02-skill |
ハンズオン②の出発点(CLAUDE.md + PR説明文 Skill 一式) |
handson-03-hook |
ハンズオン③の出発点(CLAUDE.md + hook 設定済み .claude/settings.json) |
Documents 配下)でターミナルを開き、git clone https://github.com/Tsubasa-Kikuchi98/claude-code-workshop-handson.git を実行。VS Code 内ターミナル(Ctrl+@)でも構いません。claude-code-workshop-handson フォルダーを開きます。index.html をエクスプローラーで右クリック → Reveal in File Explorer → エクスプローラー上でダブルクリックするとブラウザで動作確認できます(ビルド不要)。Ctrl+Shift+P → 「Claude」で検索)。以後 「ハンズオンプロジェクトの直下」 と書いたら、index.html と同じ階層を指します。既に ZIP でダウンロードしてしまった方は、今からでも git clone し直してください。ハンズオン②③でブランチが必要になります。
§2.5ハンズオン①:CLAUDE.md を書いてみる(12分)
このプロジェクトには
.btn-icon というアイコンボタンのスタイル、js/ 配下に機能ごとに分かれた JS ファイル、storage.js 経由の localStorage 永続化など、いくつかの暗黙ルールがあります。CLAUDE.md があるとないとで、Claude がそのルールに沿うかどうかが変わります。
Step 1:CLAUDE.md なしで試す(main ブランチ)
まず、CLAUDE.md を作らずに Claude Code に指示を出してみます。VS Code 内ターミナル(Ctrl+@)で、main ブランチにいることを確認してください。
git branch
* main と表示されていれば OK です。別のブランチにいる場合は以下を実行してください。
git checkout main
直前にこのプロジェクトで何か Claude Code を触っていた場合、そのコンテキストが残ったままだと Step 3 との比較が揺れてしまいます。まずプロンプト入力欄に以下を入力して Enter してください。
/clear
新しいセッションが立ち上がったら、以下の指示を出します。
タスク一覧の各タスクに、「お気に入り(ピン留め)」ボタンを追加してください
Claude は何の前提も知らない状態で実装します。どこに JS を書いたか/どの CSS クラスを使ったか/永続化の方法は? — 観察してみてください。
Step 2:ハンズオン①用ブランチに切り替える
git restore .
git clean -fd # Step 1 で Claude が入れた変更を全部破棄
git checkout handson-01-claudemd # ハンズオン①用ブランチへ切替
git clean -fd は untracked なファイルやフォルダー(Claude が新しく作った js/favorite.js など)も含めて消します。Step 3 で同じ依頼を出すので、ここで全部リセットして問題ありません。
切り替えると、プロジェクト直下に CLAUDE.md というファイルが現れます。これは事前に用意した「正解の CLAUDE.md」です。中身に書かれているのは以下のような項目です:
- ディレクトリ構成と各ファイルの役割
- アイコンボタンは
.btn-iconを使う - 新しい機能は
js/<feature>.jsとして独立ファイルにする - 状態の永続化は
storage.js経由(localStorageを直接呼ばない) - 色は CSS 変数を使う/コメントは日本語/関数は
function宣言 - 外部ライブラリ・ビルドツールを追加しない
今日は完成版を配りますが、実務では /init で雛形を作って加筆するのが基本フローです(Step 4 で体験します)。
Step 3:同じ指示を出してみる
CLAUDE.md は セッション開始時にだけ自動で読み込まれます。Step 1 のセッションを継続したまま指示を出しても、せっかく置いた CLAUDE.md は読まれません。新しいセッションを立ち上げてから指示を出します。
/clear
新しいセッションが立ち上がったら、Step 1 と同じ指示を出します。
タスク一覧の各タスクに、「お気に入り(ピン留め)」ボタンを追加してください
何が変わりましたか?
- 既存の
.btn-iconクラスに揃ったか? js/配下に新しいファイル(例:js/favorite.js)を切り出したか、既存ファイルに混ぜ込んだか?- localStorage への保存は
storage.js経由になっているか? - 余計なライブラリを入れずに済んだか?
Step 4:/init で自動生成も試してみる
出典: Commands - /init
実務では「最初から完成版の CLAUDE.md がある」ことは稀です。普段は /init で雛形を作って、自分で加筆していくのが基本フロー。最後にこれも体験しておきます。
Step 2 で作った CLAUDE.md を、いったんよけておきます。VS Code エクスプローラーで CLAUDE.md を右クリック → 名前の変更 → CLAUDE.md.sample に変更してください(あるいは Claude Code に「CLAUDE.md を CLAUDE.md.sample にリネームして」と依頼しても OK)。その上で Claude Code に /init を実行:
/init
Claude がプロジェクトのコードを解析して、CLAUDE.md の雛形を自動生成します。
- 自動生成された CLAUDE.md には、何が書かれていましたか?
- Step 2 で配置した
CLAUDE.md.sampleと比べて、書かれていない項目は? - → 自動生成はあくまで出発点。「コードから読み取れない方針」は人間が書き足す必要がある ことが見えれば成功です。
§2.6CLAUDE.md だけでは足りなくなる理由
引継書(CLAUDE.md)にあらゆる手順まで詰め込むと、新人は参画初日にその分厚い引継書を読むだけで時間を使ってしまう。具体的には:
- セッションが始まった瞬間からコンテキストの一部を消費し続ける
- 200行を超えると Claude の遵守率が下がる(公式が明示)
- 「今は使わない手順」まで毎回ロードされる
§2.7Skills とは
出典: Skills
Skills は「呼ばれたときだけ取り出されるマニュアル」。公式の定義は「指示書とサポートファイルをバンドルした、再利用可能なワークフローテンプレート」です。
最大の特徴は Progressive Disclosure(段階的開示):
出典: Equipping agents for the real world with Agent Skills(Anthropic Engineering Blog) — "Progressive disclosure is the core design principle that makes Agent Skills flexible and scalable."
| ロード段階 | 何が読まれる |
|---|---|
| セッション開始時 | Skill の description(1〜2行のメタ情報)だけ |
Claude が判断 or /skill-name 呼び出し |
SKILL.md の本体が展開される |
| 必要に応じて | 添付ファイル(reference.md など)も読み込まれる |
§2.8CLAUDE.md と Skills の使い分け
| CLAUDE.md | Skills | |
|---|---|---|
| 内容 | 事実 — このプロジェクトとは何か、どう動かすか | 手順 — 〇〇するときはこう進める |
| ロード | セッション開始時、常時 | 呼び出されたときだけ |
| 例 | プロジェクト概要、コーディング規約、ビルドコマンド | コミットメッセージ生成、PRレビュー、デプロイ手順 |
§2.9Skills の構造
.claude/
└── skills/
└── commit-message/
└── SKILL.md ← /commit-message でも、Claude の自動判定でも呼べる
SKILL.md の最小例:
---
description: 統一フォーマットでコミットメッセージを生成する
---
# コミットメッセージ生成
以下のフォーマットで生成してください:
- 1行目:50文字以内、動詞で始める
- 本文:何を、なぜ変更したか
description が Claude にとっての「目次」。これを読んで「使うべきか」自動判定します。
§2.10ハンズオン②:複数ファイルの Skill を使う — PR説明文ジェネレーター(10分)
単一ファイルの SKILL.md ではなく、SKILL.md + 種別ごとのテンプレ + セルフレビューチェックリスト という複数ファイル構成のスキルを動かしてみます。Progressive Disclosure(必要なファイルだけ読まれる)の効果を体感するのが狙いです。
Step 1:ハンズオン②用ブランチに切り替える
git restore .
git clean -fd # ハンズオン①の作業状態をリセット
git checkout handson-02-skill # ハンズオン②用ブランチへ切替
切り替えると、プロジェクト直下に CLAUDE.md と、.claude/skills/pr-description/ 配下に Skill 一式が現れます。
.claude/skills/pr-description/
├── SKILL.md
├── templates/
│ ├── feat.md ← 新機能向けテンプレ
│ ├── fix.md ← バグ修正向けテンプレ
│ └── refactor.md ← リファクタ向けテンプレ
└── reference/
└── self-review-checklist.md ← PR提出前のセルフチェック
Step 2:5 つのファイルを目で追う(3分)
VS Code でそれぞれを開いて、何が書かれているか読んでください。
SKILL.md— Skill の入口。descriptionで Claude が「使うべきか」を判断し、本文で進め方を指示しているtemplates/feat.mdfix.mdrefactor.md— 種別ごとの PR 説明文テンプレ。SKILL.md は判定して 1 つだけ を読む設計reference/self-review-checklist.md— 説明文を書き終えたあとのセルフチェック項目
Step 3:何か小さな変更を加える(1分)
index.html の <footer> に「v1.0」と表示するように変更してください
Claude が index.html を編集します(許可ダイアログが出たら承認)。
Step 4:/pr-description を実行する
/pr-description いまの変更に対する PR 説明文を作ってください
description が良ければ自然文でも拾われます:
今の変更を main にマージするための PR 説明文をドラフトしてください
プロンプト入力欄で / を 1 文字だけ打つと /pr-description が候補に出るはずです。出てこない場合は .claude/skills/pr-description/SKILL.md の frontmatter(--- で囲まれた description: の行)が壊れていないか確認してください。
Step 5:観察ポイント
実行ログを上にスクロールして、以下を確認してください。
- どのテンプレが読まれたか:今回は新機能の追加なので
templates/feat.mdだけが展開されているはず。fix.mdとrefactor.mdは読まれていません。これが Progressive Disclosure です。 [要記入]がそのまま残っているか:背景・動機など差分から読めないところは Claude が勝手に埋めない設計です。- セルフレビュー項目が出力されたか:
reference/self-review-checklist.mdが最後に読まれて、PR 提出前のチェックが提示されているはず。 /contextを実行:未使用のテンプレ(fix.md/refactor.md)はコンテキストにロードされていないことを確認できます。
- ファクトではなく手順 だから(CLAUDE.md より Skill 向き)
- 種別で分岐するテンプレ があるから、「全部毎回読ませる」のを避けたい → Progressive Disclosure
- 使う場面が限定的(PR を作るときだけ)→ 常時ロードはムダ
その他の機能
20分CLAUDE.md と Skills 以外にも、Claude Code を制御する道具がいくつかあります。ここでは概要だけ紹介します。詳しくは公式ドキュメントを参照してください。
§3.1サブエージェント
出典: Sub-agents
サブエージェント は「独立したタスクを、別のコンテキストで切り離して実行させる仕組み」です。メインの会話のコンテキストを汚さずに、調査・分析・生成などの重い処理を切り出せます。.claude/agents/ に定義ファイルを置くことで、特定の役割に特化したエージェントを作れます。
code-reviewer— レビュー観点に特化researcher— 調査・要約に特化(メインの会話に結果だけ返す)
§3.2hooks
出典: Hooks guide
hooks は「Claude Code がツールを実行する前後に、自動でコマンドを走らせる仕組み」です。
実用例:
| タイミング | 使い道の例 |
|---|---|
| Bash 実行前 | 危険なコマンド(フォルダ削除など)をブロックする ← ハンズオン③で実演 |
| ファイル編集後 | フォーマッター(Prettier など)を自動実行 |
| Bash 実行前 | 実行コマンドをログファイルに残す |
| セッション終了時 | 作業サマリーを自動生成 |
exit 2 でプロセスを終了し、stderr に理由を書く ことです。Claude Code は exit 2 を「ブロック信号」として扱い、stderr を Claude のコンテキストに差し込みます。
設定例(.claude/settings.json):
{
"hooks": {
"PreToolUse": [
{
"matcher": "Bash",
"hooks": [
{
"type": "command",
"shell": "powershell",
"command": "$c = ([Console]::In.ReadToEnd() | ConvertFrom-Json).tool_input.command; if ($c -match 'rm\\s+-[rR]|Remove-Item.*-Recurse') { [Console]::Error.WriteLine('Blocked by hook: folder deletion detected. Command: ' + $c); exit 2 }"
}
]
}
]
}
}
このフックは「Claude が Bash ツールを呼ぶ直前」に発火し、コマンド文字列に rm -rf や Remove-Item ... -Recurse といったフォルダ削除らしきパターンが含まれていたら exit 2 で止めます。shell: "powershell" は Windows で PowerShell 経由で実行する指定です。
§3.3ハンズオン③:hook を設定して発火させてみる(7分)
「うっかり破壊」を防ぐ典型的な hook の使い方です。Claude が
rm -rf のようなコマンドを Bash ツールで投げる直前に hook が割り込み、exit 2 で止めます。
git restore .
git clean -fd # ハンズオン②の作業状態をリセット
git checkout handson-03-hook # ハンズオン③用ブランチへ切替
切り替えると、プロジェクト直下に .claude/settings.json が現れます。
.claude/settings.json を開いて中身を確認する.claude/settings.json を開いてください。ざっくり読み解くと:
"PreToolUse"… ツール実行前に発火するフック種別"matcher": "Bash"… 対象ツールは Bash(Edit/Write など他のツールは無視)commandの中身(PowerShell)が stdin から JSON を読み、rm -rf系またはRemove-Item ... -Recurseが含まれていたら exit 2 で止める
/clear
を入力して Enter(既存セッションを終了して新セッションを開始)。hook 設定はセッション開始時に読み込まれます。
このプロジェクトの js/ フォルダを丸ごと削除してください
Claude は Bash ツールで rm -rf js 相当のコマンドを実行しようとしますが、hook が exit 2 で止めます。万一 hook をすり抜けて削除されてしまっても、
git restore . && git clean -fd で元に戻せます(ハンズオン用ブランチなので何度でもやり直せます)。
js/フォルダは消えていない(VS Code エクスプローラーで残っているはず)- Claude のチャット応答に 「hook によってブロックされた」といった趣旨のメッセージ が出ているか
- Bash 許可ダイアログが出る前または出た後に hook で止まったかをログで確認
.claude/settings.json の JSON 構文が壊れていないか(VS Code の赤い波線が出ていないか)、Step 3 の /clear を忘れていないか。Claude が想定外のコマンド(例:Remove-Item -Force で -Recurse なし)を投げていて正規表現に引っかからなかった可能性 — その場合は「もう一度同じことを試してください」と依頼すると別パターンを試すことがあります。
§3.4rules(.claude/rules/)
出典: Organize rules with .claude/rules/
.claude/rules/ は「CLAUDE.md が長くなってきたときに、ルールをファイル分割する仕組み」です。paths: frontmatter を使うと、特定のファイルを触ったときだけ そのルールが読み込まれます。
.claude/
└── rules/
├── code-style.md ← 常時読み込み(paths なし)
└── react.md ← React ファイル編集時だけ読み込み(paths あり)
§3.5CLAUDE.md / Skills / rules の違い
| CLAUDE.md | Skills | rules | |
|---|---|---|---|
| 何を書く | プロジェクトの事実 | 再利用したい手順 | パス連動のルール |
| ロードのきっかけ | 常時 | Claude の判断 or /手動 |
該当パスを触ったとき |
| 典型例 | 概要・規約・コマンド | コミット作成・レビュー手順 | 「Reactを編集するときは…」 |
| サイズの目安 | 200行以内 | 中身は呼び出し時のみ展開 | 1ファイル数十行 |
クロージング
10分§4.1今日の持ち帰りポイント
/init で雛形を作って加筆していくアンケート
第2回のふりかえりシートに記入してください。所要時間:3〜5分
リファレンス
§R.1CLAUDE.md の4種類
出典: Choose where to put CLAUDE.md files
CLAUDE.md は どこに置くかで効く範囲が変わります。
| 種類 | 置き場所 | 効く範囲 | Git管理 |
|---|---|---|---|
| 組織ポリシー | システム領域(IT管理) | 全員・全プロジェクト | 除外不可 |
| ユーザー | ~/.claude/CLAUDE.md |
自分の全プロジェクト共通 | 個人端末のみ |
| プロジェクト | プロジェクト直下/CLAUDE.md |
チーム全員・そのプロジェクト | 管理対象 |
| ローカル | プロジェクト直下/CLAUDE.local.md |
自分・そのプロジェクトのみ | .gitignore 推奨 |
複数が存在する場合は すべて読み込まれ、結合されます(上書きではありません)。
- チームで共通にしたいルール →
CLAUDE.md(プロジェクト、Git管理) - 自分だけの好み・ローカルパス →
CLAUDE.local.md(Git管理外) - 全プロジェクト共通の癖 →
~/.claude/CLAUDE.md(ユーザー)
§R.2CLAUDE.md を書くときのチェックリスト
- プロジェクトの目的・概要(一言で)
- 技術スタック(言語・フレームワーク・主要ライブラリ)
- よく使うコマンド(ビルド・テスト・起動方法)
- コーディング規約・命名規則
- やってはいけないこと
- 外部サービス・APIの扱い(機密情報の注意事項)
§R.3Skills の置き場所と仕様
| 項目 | 仕様 |
|---|---|
| 配置場所(プロジェクト) | .claude/skills/<skill-name>/SKILL.md |
| 配置場所(ユーザー) | ~/.claude/skills/<skill-name>/SKILL.md |
| 必須ファイル | SKILL.md のみ |
| 必須 frontmatter | description(自動判定の精度に直結する) |
| 手動呼び出し | /<skill-name> |
| 自動呼び出し | description を見て Claude が判断(無効化は disable-model-invocation: true) |
| 添付ファイル | 同フォルダ内に reference.md などを置き、SKILL.md から参照 |
§R.4hooks の主なトリガーと matcher
| トリガー | タイミング | よく使う matcher |
|---|---|---|
PreToolUse |
ツール実行前 | Bash Edit Write |
PostToolUse |
ツール実行後 | Edit Write Bash |
Stop |
Claude の返答が終わったとき | (matcherなし) |
Notification |
Claude から通知があったとき | (matcherなし) |
§R.5auto memory(MEMORY.md)の仕様
出典: Auto memory
Claude Code v2.1.59 以降、デフォルトで有効になっている機能です。
| 項目 | 仕様 |
|---|---|
| 保存場所 | ~/.claude/projects/<プロジェクト名>/memory/MEMORY.md |
| 読み込み上限 | 先頭 200行 または 25KB のどちらか先に達した方まで |
| 書き込みタイミング | Claude が「記憶する価値がある」と判断したとき(毎セッション末ではない) |
| 読み込みタイミング | セッション開始時(自動・バックグラウンド) |
| 共有範囲 | 同じマシン・同じリポジトリ内のみ。他の端末には同期されない |
/memory コマンドで現在の内容を確認・編集できます。