AI導入ガイド

生成AIを安全かつ効果的に業務へ組み込むための原理・判断基準・運用原則
第一編

原理と思想 — 本質理解

LLMの動作原理を理解し、業務で安全に活用するための判断軸を身につける

S1. 生成AIの正体 — 流暢なる無知

LLMは「それっぽいことを言う装置」である。流暢さと正確さは別物だ

結論:LLMは確率的なテキスト生成器であり、「理解して答える」のではなく「もっともらしい続きを生成する」システムである。
実務での意味:流暢な出力は信頼の根拠にならない。特に数値・固有名詞・法的事実は必ず一次ソースで検証すること。
今日から何を変えるべきか:AIの出力を「叩き台」として扱い、SSOT照合・ボトムアップ検証・レビュー・承認のフローに組み込む。

素のLLMは確率的生成器である

LLMは「次に来る可能性が最も高いトークンを連続して選ぶ」という操作の繰り返しで動いている。入力テキストを数値ベクトルに変換し、学習済みの重みを通じて確率分布を計算し、そこからサンプリングする。検索でも計算でも記憶の呼び出しでもない。

LLM生成フロー — 確率的なトークン選択の繰り返し

入力テキスト トークン化 単語→ID変換 確率計算 次トークン確率 サンプリング &選択 確率的に選択 出力テキスト (繰り返し) 次トークン を追加

タイピングアニメーション — 生成のしくみを体感する

LLMはこのように、一度に1トークンずつ生成する。全体を「考えて」から出力するのではなく、前のトークンを受け取って次を選ぶ操作を繰り返している。

実務では外部資料・SSOT・ツール・人間レビューが加わる

現実のAI活用では、素のLLMに加えて複数の補強機構が動作する。検索拡張(RAG)によって一次ソースの文書を文脈に注入したり、ツール呼び出しでリアルタイムのデータを取得したりする。それでも最終的な品質は人間のレビューと承認に依存する。

層1

SSOT照合

数値・定義・固有名詞は必ずシステム・オブ・レコードと突き合わせる。AIの出力値をそのまま使わない。

層2

ボトムアップ検証

合計と内訳が一致するか確認する。上から見て「それっぽい」ではなく、下から積み上げて正しいかを問う。

層3

レビューと承認

生成物は必ずドメイン知識を持つ人間が確認する。流暢さを信頼の根拠にしない。

もっともらしさと正しさは別である

ハルシネーションは異常ではなく構造的現象だ 自信を持って間違える「ハルシネーション」は、バグではない。「次に来る確率が高いトークンを選ぶ」という仕組みの必然的な帰結である。正確な情報を返すよう最適化されているわけではなく、もっともらしいテキストを生成するよう最適化されている。流暢な文章が出力されることは、その内容が正しいことの根拠にならない。

失敗例

失敗 — AIの出力をそのまま使用
AIに「我が社の昨年の売上を教えて」と尋ね、
返ってきた数値をそのまま報告資料に記載した。

実際は学習データにその情報が含まれておらず、
もっともらしい数値が生成されていた。
正解 — SSOT照合を前提とする
AIには「このCSV(実績データ添付)を
分析して傾向を要約して」と依頼する。

AIが使う数値は自分で提供したもの。
要約の論理はレビューで確認する。

良い運用

1

叩き台として使う

AIの出力を「完成品」ではなく「叩き台」として扱う。修正する前提で受け取る。

2

一次ソースで検証する

数値・固有名詞・法的事実は必ず一次ソース(SSOT)と突き合わせる。

3

ドメイン知識でレビューする

出力の論理・前提・結論を専門知識で評価する。「流暢かどうか」ではなく「正しいかどうか」を問う。

4

承認フローに組み込む

AI生成物は必ず人間の承認を経てから使用する。自動承認はしない。

判断基準

問いAIに任せてよい人間が必ず確認する
数値の正確性傾向・パターンの指摘具体的な数値そのもの
事実の正確性一般的な知識の整理固有名詞・日付・法律
論理の整合性構造の提案・要約前提の正しさ・結論の妥当性
最新情報学習カットオフ以前の知識リアルタイム・組織内情報
参考文献:
Stochastic Parrot問題 — "the underlying mechanism is still probabilistic pattern matching, not genuine reasoning or semantic grounding"
The Stochastic Parrot Problem and Why It Still Matters in AI System Design

S2. 文脈という有限資源

文脈は盛るものではなく設計するもの — 何を入れるかより何を残すか

結論:コンテキストウィンドウは有限であり、無関係な情報を詰め込むほど重要な文脈が押し出されてAIの精度が落ちる。
実務での意味:「とにかく全部渡す」は逆効果になる。関連するものだけを精選し、必要な情報だけを提供することが品質を上げる。
今日から何を変えるべきか:プロンプトに情報を「盛る」発想をやめ、「何を残すか」を設計する発想に切り替える。

文脈は有限である

LLMが一度に処理できるテキストの量には上限(コンテキストウィンドウ)がある。Anthropicの表現を借りれば「LLMにはアテンションバジェットがある」。会話履歴・指示・参照ファイル・システムプロンプト、すべてがこの有限な空間を共有している。

コンテキストウィンドウの構成イメージ

System
指示
会話履歴
参照資料
空き
システムプロンプト(8%)
ユーザー指示(7%)
会話履歴(35%)
参照資料(25%)
空き(25%)
空き(バッファ)がなくなると、AIは古い会話や重要な指示を「見えない」状態で動作し始める。精度低下の原因になる。

長すぎるとノイズが増える

コンテキストが長くなるほど、AIは全体に均等に注目できなくなる傾向がある。重要な指示が文脈の途中に埋もれると、それが参照されにくくなる現象(context rot)が実務上問題になる。これは機構の詳細より「長い文脈では精度が落ちやすい」という現象として理解しておけば十分である。

悪い例 — 全部渡す
添付します:
- 過去3年分のすべての会議議事録
- 全部門の予算データ(未整理)
- 関係するかもしれないメール200通
- 過去の類似案件資料

これを参考に提案書を書いてください。
良い例 — 必要なものだけ渡す
目的:Q3の営業提案書(A4・2枚)
参照:今期の製品仕様書(添付)
制約:競合他社の名指し禁止
対象:製造業・中規模企業の調達担当

上記だけを根拠に構成案を出してください。

重要なのは「何を足すか」より「何を残すか」

Anthropicが「文脈エンジニアリング」と呼ぶ考え方の核心は、「LLM推論中に最適なトークンの集合をキュレーションし維持するための戦略」にある。「追加する」ではなく「最適化する」という発想の転換が必要だ。

補足: Transformerのアテンション機構とコンテキスト長の関係

Transformerモデルはアテンション機構により、入力全体の任意の位置に注目できる設計になっている。計算量はトークン数の二乗(n²)に比例するため、長い入力ほど計算負荷が増大する。

実装上、この計算量を抑えるための様々な近似手法が導入されているが、「長くなるほどすべての位置に均等に注目できなくなる」という傾向は残る。これがcontext rotとして知られる精度低下現象の背景にある。

断言できるのは「現象として精度が落ちやすい」こと。機構の内部動作の詳細は実装ごとに異なる。

補足: 文脈エンジニアリングとプロンプトエンジニアリングの違い

プロンプトエンジニアリングが「入力テキストの書き方」を最適化するのに対し、文脈エンジニアリングはより広い概念だ。何をシステムプロンプトに入れるか、どの資料を参照させるか、会話履歴をどの時点で切り捨てるか、といった設計全体を対象にする。

「良いプロンプトを書く」だけでなく、「AIが正しく動くために必要な情報の全体をどう設計するか」が問われている。

失敗例

ある担当者がドキュメント整理をAIに依頼した。「参考になるかもしれない」と判断した100ファイルを一括で貼り付けた結果、AIは重要な制約条件(ファイル末尾に記載)を参照できず、不適切な分類を大量に出力した。確認に要した時間は生成時間の10倍になった。

良い運用

原則1

目的を先に宣言する

最初に「何のための文脈か」を明示する。AIも人間も、目的が明確なほど不要な情報を除外しやすい。

原則2

資料は抜粋で渡す

全文でなく、関連する箇所のみを切り出して渡す。「ここに答えがある」という部分だけを提供する。

原則3

会話は適度に切る

長い会話セッションは途中でリセットする。蓄積された古い文脈が精度を下げる前に、新しいセッションで始める。

判断基準

状況対処法
「念のため全部渡したい」と思ったとき一歩止まって、本当に必要な情報だけに絞る
AIの回答が途中からズレ始めたときセッションをリセットして指示を再設計する
重要な制約を必ず守らせたいとき文脈の冒頭・末尾どちらかに明記する
長い資料を参照させたいとき該当箇所を抜粋し、「この部分を参照してください」と明示する
参考文献:
Anthropic文脈エンジニアリング — "the set of strategies for curating and maintaining the optimal set of tokens during LLM inference" / "LLMs have an attention budget"
Effective Context Engineering for AI Agents — Anthropic Engineering

S3. AIへの指示は「依頼」ではなく「設計」

指示の質が出力の質を決める — 6要素で設計する

結論:AIへの指示は人間への依頼とは異なる。文脈のない指示ではAIが確率的補完で空白を埋めるため、意図しない出力が生成される。
実務での意味:「わかってくれるはず」が通じない。目的・条件・制約・入力・出力形式・評価観点の6要素を明示することで再現性が上がる。
今日から何を変えるべきか:指示を書いたら「この6要素のうち何が欠けているか」をチェックリストで確認してから送る。

指示の6要素

1

目的 — なぜやるのか

何のためのタスクかを最初に述べる。「営業提案書を書く」ではなく「製造業の調達担当を説得するための提案書を書く」と目的まで伝える。

2

条件 — どんな状況か

読者・業界・前提知識・役割などの文脈情報。「あなたはFP&Aアナリストです」という役割設定も条件の一部。

3

制約 — やってはいけないこと

「競合名を出さない」「専門用語は使わない」「3点以内に絞る」など。制約がないとAIは何でも足す方向に動く。

4

入力 — 参照する素材

AIに使わせたいデータ・文書・定義を具体的に提供する。「なんとなく知っているはず」は通用しない。

5

出力形式 — どんな形で返すか

箇条書き/散文、文字数、単位、言語、構成要素を指定する。Anthropicが「例は千の言葉に値する」と言うように、具体例を1つ示すと格段に精度が上がる。

6

評価観点 — 何をもって「良い」とするか

「簡潔さ・論理的整合性・実行可能性の順で優先」など、評価基準を示す。AIは明示されない基準は勝手に補完する。

Good/Bad比較 — なぜBadが失敗するのか

Badな指示では、AIが「空白」を確率的に補完する。学習データの中の「似た文脈でよく来るパターン」で埋めるため、意図と外れた出力が生成される。

Bad — 目的なし
売上データを分析して
Good — 目的明示
Q3の月次売上(添付CSV)を分析し、
経営会議向けに3点の改善提案を
箇条書きで出してください。
金額は百万円単位、小数点1桁。
Bad — 制約なし
競合との違いをまとめて
Good — 制約明示
競合製品Xとの機能比較表を作成してください。
制約:競合名は「他社製品A」と匿名化。
自社優位点は3点以内。根拠のない主張は禁止。
Bad — 出力形式なし
このメールに返信して
Good — 出力形式明示
以下のメール(引用)に返信文を書いてください。
形式:ビジネス敬語、200字以内、
件名含む。謝罪は入れない。
---
(メール本文)
Bad — 評価観点なし
この企画書を改善して
Good — 評価観点明示
添付の企画書を改善してください。
優先順位:1)論理構成の明確さ
2)実行可能性の具体性
3)読みやすさ
現在の文章は保持し、追記で改善点を示す形式で。
Bad — 入力なし
うちの商品の特徴を説明して
Good — 入力明示
以下の製品仕様(添付)をもとに、
初めての顧客向けの特徴説明を書いてください。
専門用語は使わず、利用シーン3例を含む。
(製品仕様書の抜粋)

失敗例

ある担当者が「契約書のリスクを洗い出して」とだけ指示した。AIは「よくある契約書レビューのパターン」で確率的補完を行い、その会社特有の業法規制リスクを見落とした汎用的なチェックリストを返した。依頼者はそれをそのまま使い、後から弁護士に指摘を受けた。

判断基準

指示を送る前に次の問いを確認する。「AIがこの指示の空白部分を何で埋めるか」を想像できるなら、その空白は明示すべき箇所だ。

要素欠けていると何が起こるか対処
目的汎用的・当たり障りない出力になる「なぜやるか」を1文で先頭に書く
条件想定と異なる読者・立場で書かれる役割・業界・専門レベルを明示
制約不要な情報が大量に足される「〜しない」を明記する
入力学習データの一般論で補完される参照させる資料を直接貼る
出力形式形式が毎回変わり再利用できない例を1つ示すか構造を明記する
評価観点AIの評価基準で最適化される何を優先するかを順序立てて伝える
参考文献:
Anthropic — "For an LLM, examples are the 'pictures' worth a thousand words"
Effective Context Engineering for AI Agents — Anthropic Engineering

S4. 実務での適用判断 — 加速装置の使いどころ

AIは万能ではない。向き・不向きを見極めて使う

結論:AIは「加速装置」であり「代替装置」ではない。人間の判断を速めるために使うものであって、人間の判断を省くためのものではない。
実務での意味:タスクの特性(確定性・影響範囲・検証しやすさ)を3軸で評価し、AIを使うかどうかを判断する。
今日から何を変えるべきか:「AIで何でもできる」という発想を捨て、「このタスクの3軸はどうか」を毎回考える習慣をつける。

AIは加速装置である

AIはドラフト作成・構造化・パターン認識・要約といった反復的作業を劇的に速くする。しかし速さは正確さを保証しない。「速く間違える」リスクを理解した上で使う必要がある。特に、確定した正解が必要な場面・間違いの影響が大きい場面・一次ソースで検証しにくい場面では、人間の判断をAIに置き換えてはならない。

ユースケース分類

高適合

叩き台・ドラフト作成

企画書・メール・報告書の初稿。人間が内容を確認・修正することが前提であれば速度向上効果が高い。

高適合

要約・構造化

長い会議議事録の要点整理、散逸した情報の構造化。AIが出した構造を人間がレビューする前提で使う。

高適合

コードの叩き台

ルーティン処理・テンプレート的なコードの初稿生成。動作確認・テストは人間が行う。

中適合

データ分析の補助

パターン指摘・仮説生成には使える。数値の正確性は必ずSSOTと突き合わせる。AIが示した数値を直接使わない。

要注意

法律・会計の判断

ドラフトや論点整理には使えるが、最終判断は必ず専門家が行う。AIの出力を根拠に意思決定しない。

要注意

最新情報の取得

学習カットオフ以降の情報はない。最新の市場動向・法改正・競合情報はAIに依存せず一次ソースを確認する。

3軸判断表

以下の3軸でタスクを評価する。「高・高・低」の組み合わせは人間が主体で対応すべき領域だ。

判断軸AIが向いている(低)人間が必要(高)
確定性が必要か
正解が一つに決まるか
幅のある回答でよい(方針案、構成案)正確な数値・法的判断・固有の事実
間違いの影響が大きいか
誤りのコストはどうか
影響小(内部メモ、叩き台)影響大(顧客提出物・法的文書・財務数値)
一次ソースで検証しやすいか
出力を後から確認できるか
検証しやすい(数値はCSVで確認可能等)検証しにくい(専門知識が必要・SSOTが存在しない)

失敗例

ある担当者がAIに「競合調査をして」と依頼し、返ってきた競合情報をそのまま営業資料に使った。AIが生成した「競合の製品価格」はカットオフ以前の情報であり、現在の実際の価格と乖離していた。顧客提案の場で指摘を受け、信頼を損ねた。

良い運用

原則1

スピードと精度を分離する

「速く叩き台を作る」フェーズと「正確性を確認する」フェーズを意識的に分ける。両方を同時にAIに任せない。

原則2

失敗コストを先に見積もる

このタスクでAIが間違えたら何が起こるかを先に考える。コストが高い場面では検証コストも予算に入れる。

原則3

「加速」と「代替」を区別する

「AIが書いたから確認しなくてよい」ではなく「AIが書いたから速く確認できる」という使い方が正しい。

判断基準

タスクを前にして次の問いを立てる。「このタスクでAIが間違えた場合、どのフローで検出できるか」が答えられないなら、AIを主体で使うべきではない。

関連資料:
S1「生成AIの正体」で解説したハルシネーションの構造的原因、S5「なぜレビューと検証は省略できないか」の検証フロー設計と合わせて読むこと。
判断軸の詳細設計については Anthropic Engineering — Effective Context Engineering も参照。

S5. なぜレビューと検証は省略できないか

流暢な出力ほど危険である — 検証は生成コストより本質だ

結論:AIの出力は流暢であるほど批判的に読む必要がある。流暢さは正確さの根拠ではなく、むしろ見落としを誘発するリスクだ。
実務での意味:検証コストを生成後に削減しようとすると失敗する。検証の手順と責任を先に設計することが品質の源泉である。
今日から何を変えるべきか:AI活用のフローに「誰が何を検証するか」を明示的に設計し、省略不可の工程として組み込む。

流暢な出力ほど危険である理由

人間は流暢で自信に満ちた文章を読むと、批判的思考が緩む傾向がある。AIの出力は構造的に流暢になるよう最適化されているため、誤った内容であっても自信を持って語られる。これは「ハルシネーション」が「明らかな間違い」として出てくるのではなく、「もっともらしい誤り」として出てくる理由でもある。

「自信を持って間違える」を常に念頭に置く Stochastic Parrot問題の核心は「流暢さに基づいてアウトプットを信頼するな」ということだ。流暢さは統計的最適化の結果であり、事実性とは無関係だ。「Validate outputs rather than trusting fluency. Add controls when stakes are high.」

生成コストより検証コストの方が本質

AIを使えば生成コストは劇的に下がる。しかし検証コストは下がらない。むしろ「大量に・速く・流暢に」生成できるようになったことで、検証しきれずに誤りが通過するリスクが上がる。AI活用のROIは「生成が速くなった」ではなく「検証が追いついているか」で測るべきだ。

失敗パターン
生成: 10分 → AIで2分(80%削減)
検証: 省略(「AIだから大丈夫」)
結果: エラーが本番環境に流入
コスト: 修正に元の10倍の時間
正しい設計
生成: 10分 → AIで2分(80%削減)
検証: 3分(定型チェックリスト)
合計: 5分(従来比50%削減)
品質: 保持または向上

数値・ロジック・コードで何をどう確認するか

数値の検証

ボトムアップで積み上げる

合計と内訳が一致するか。単位は正しいか。オーダーが合っているか(百万と億の混同など)。SSOTの対応する値と突き合わせる。

ロジックの検証

前提と結論を分離する

AIが使っている前提が正しいか。結論は前提から論理的に導けるか。「もっともらしい言い方」で繋いでいないか。

コードの検証

テストを先に書く

AIが生成したコードは「動くように見える」ことが多い。エッジケース・境界値・異常系を意識したテストを人間が書き、通過を確認する。

責任3層モデル

AI活用における責任は次の3層に分かれる。最終的な品質責任は必ず人間が負う。

AI

層1 — AIの出力(生成)

確率的補完の結果。流暢さは保証されるが正確さは保証されない。ここで品質を担保しようとしてはいけない。

確認

層2 — 担当者のレビュー(検証)

ドメイン知識を持つ担当者が数値・ロジック・事実を確認する。SSOT照合・ボトムアップ検証・チェックリストを使う。

承認

層3 — 責任者の承認(品質保証)

業務上の影響を理解した責任者が最終承認する。AIが生成したからという理由で承認フローを短縮しない。

失敗例

ある担当者がAIに財務サマリーを作成させ、「AIが出したから正しいはず」という認識でそのまま経営会議に提出した。数値の単位(百万円と億円)が混在していたが、流暢な文体のため読み飛ばされた。会議の途中で指摘を受け、再集計に一週間かかった。

良い運用

1

検証手順を先に設計する

AIを使う前に「何を、誰が、どう確認するか」を決める。後から「なんとなく確認する」では漏れが出る。

2

チェックリストを定型化する

数値確認・ロジック確認・事実確認のチェックリストを作り、毎回同じ手順で確認する。判断を属人化しない。

3

「流暢さ」を信頼の根拠にしない

読みやすい・論理的に見える・自信がある、はいずれも確認を省略する理由にならない。むしろ流暢なほど注意深く読む。

4

リスクに応じて承認レベルを変える

影響が小さいものは担当者確認で十分。影響が大きいものは責任者承認を必須とする。一律の判断をしない。

判断基準

確認対象確認方法省略できない条件
数値SSOTと突き合わせ、ボトムアップ積み上げ確認外部提出・意思決定に使う場合は常に必須
ロジック前提の明示・前提→結論の論理確認相手を説得する目的で使う場合は必須
コードテスト実行・エッジケース確認本番環境に適用する場合は必須
事実一次ソース(公式文書・データベース)確認固有名詞・日付・法令は常に必須
引用・出典原文の直接確認引用として使う場合は常に必須
補足: なぜ「ハルシネーションを防ぐ」より「検証フローを設計する」の方が有効か

ハルシネーションは確率的生成の構造的な帰結であり、プロンプトの工夫で完全に防ぐことはできない。発生頻度を下げることはできるが、ゼロにはならない。

そのため「ハルシネーションを防ぐ」という問いの立て方より、「ハルシネーションが発生しても検出できるフローを設計する」という問いの方が実務的に有効だ。誤りが通過しないシステムを作ることが目標であり、誤りが発生しないシステムを作ることは現時点では不可能だ。

参考文献:
Stochastic Parrot問題 — "Validate outputs rather than trusting fluency. Add controls when stakes are high."
The Stochastic Parrot Problem and Why It Still Matters in AI System Design
第二編

Claude Code 運用設計 — 5つの制御レバー

ハーネスとは、AIを自律的な問題解決者としてではなく、アーキテクチャの制約が成果を形作る構成要素として扱う設計思想。

S6. CLAUDE.md — プロジェクトの憲法

何を書くか・何を書かないかを設計する

結論: CLAUDE.mdは「常設原則」のみを置く。手順・検査ロジックは別ファイルへ分離する。
実務での意味: 書きすぎたCLAUDE.mdはノイズになり、AIが本当に守るべき制約を見失う。
今日から: 既存のCLAUDE.mdを「常設 / 必要時 / 実行時」の三列で仕分けし、不要な行を他へ移す。

結論

CLAUDE.mdはプロジェクトの憲法であり、セッションをまたいで常に有効な原則だけを記述する。コマンド一覧、制約、言語設定はここに置く。一方、チャートパターンやデプロイ手順のような「必要なときに参照する手順」はskillsへ、セキュリティチェックやログ出力のような「実行のたびに動く検査」はhooksへ分離する。この三分割が機能することで、CLAUDE.mdは軽量かつ確実に読まれる文書になる。

失敗例

悪い運用 — 何でも書く
# CLAUDE.md(肥大化版)
コマンド: uv run pytest -x
デプロイ手順: wrangler pages deploy ...
チャート実装: floating bars [[start,end]]...
セキュリティ: rm -rf を検知したらブロック
ログ: tool_logger.py を呼べ
言語: 日本語出力
良い運用 — 常設原則のみ
# CLAUDE.md(憲法版)
## コマンド
uv run pytest -x   # テスト
uv run ruff check  # Lint

## 制約
- Bash: > /dev/null 2>&1
- Cloudflare: 25MB制限

## 言語
日本語出力。変数名は英語。

良い運用 — 三分表

置き場所内容の性質具体例
CLAUDE.md常設原則 — 常に有効コマンド、言語設定、外部API制約
skills/必要時手順 — 参照型chart-patterns.md、deploy-rules.md
hooks/実行時検査 — 自動起動security.py、tool_logger.py

スコープは三階層で管理する。グローバル設定(~/.claude/)はモデル選択・認証のみ。プロジェクト設定(project/.claude/)はhooks・permissions・skills。サブプロジェクト(projects/X/)はそのプロジェクト固有の制約を上書きする。完全分離ではなく、共通文脈と局所文脈の階層化が目的だ。

  • ~/.claude/ # グローバル: model, credentials
    • settings.json
    • .credentials.json
  • project/.claude/ # プロジェクト: CLAUDE.md, hooks, skills
    • CLAUDE.md # 常設原則
    • hooks/
      • security.py
      • tool_logger.py
    • skills/
      • chart-patterns.md
      • deploy-rules.md
  • projects/X/ # サブプロジェクト: 局所上書き
    • CLAUDE.md

判断基準

「これはセッションをまたいで常に守るべきか?」と問え。YESならCLAUDE.md。「必要なときだけ参照するか?」ならskills。「コード実行のたびに自動で走らせるか?」ならhooks。この問いを省略すると、肥大化したCLAUDE.mdが生まれ、AIは大量のノイズの中から本当の制約を見つけられなくなる。ハーネスなしにはAIは暴走する。

S7. 文脈衛生 — /clear, /compact, /context

文脈の蓄積をコントロールする3つのコマンド

結論: 別件に移るなら /clear、同じ作業を続けるが冗長なら /compact、現状把握には /context。
実務での意味: 古い文脈が蓄積すると「文脈腐敗」が起き、AIの出力品質が低下する。
今日から: タスク完了後は反射的に /clear を打ち、新しいタスクを汚染なしで始める習慣をつける。

結論

Anthropicはコンテキストウィンドウが拡張するにつれてAIの性能が劣化する現象を「文脈腐敗(context rot)」と呼ぶ。長いセッションには過去の失敗、撤回された指示、関係のない情報が蓄積し、AIは新しい指示よりも古いノイズに引きずられる。これを防ぐのが文脈衛生だ。

セッションフローとコマンドの使いどころ

Task A /compact 冗長削減 完了 /clear リセット Task B 汚染なし /context 現状確認

失敗例

A機能の実装が終わったあと、/clearを打たずにB機能の指示を出した。AIはAの実装で採用したアーキテクチャをBにも適用しようとし、要件が異なるにもかかわらず同じパターンで実装した。古い文脈が新しい判断を汚染した典型例だ。

良い運用 — 判断テーブル

状況使うコマンド理由
別件・別タスクに移る/clear文脈を完全リセット。汚染を断つ
同じ作業を続けるが冗長になった/compact重要部分を保ちつつトークン削減
今どの文脈にいるか確認したい/contextAIが何を「覚えているか」を把握
長時間のセッション中に迷走を感じる/compact → /context圧縮後に現状を確認して再整理

LangChainのコンテキストエンジニアリングでは、文脈操作をWrite(追加)・Select(選択)・Compress(圧縮)・Isolate(分離)の4操作として整理している。/compactはCompressに、/clearはIsolateに対応する操作として理解できる。これは「理解のレンズ」として有効だが、Claude Codeの3コマンドと直接1対1で対応するわけではない点に注意する。

判断基準

「前のタスクの情報は今のタスクに役立つか?」と問え。役立たないなら /clear。役立つが量が多いなら /compact。セッションを続けながらAIの現在地を知りたいなら /context。この判断を怠ることがAIの迷走の主因になる。文脈は設計するものだ。

S8. Plan Mode — 思考の整流器

いきなり書かせないための、実行前の構造化ステップ

結論: 3ステップ以上の実装は必ずPlan Modeから始める。コードより先に計画を出力させる。
実務での意味: 計画なしで書き始めると、後半で矛盾が露呈して全面書き直しになる。
今日から: 複数ファイルにまたがる変更や新機能追加には、最初の指示に「まず計画だけ出力して」を付ける。

結論

Plan Modeとはコードを書く前にAIに計画を出力させる運用パターンだ。Anthropicはエージェントの長期実行において「一度に一機能ずつ作業する」ことを推奨している。Plan Modeはこの原則を実践するための整流器として機能する。計画段階で矛盾・見落とし・依存関係の問題を発見することで、実装後の大規模な手戻りを防ぐ。

当チームの運用規律として、3ステップ以上にわたる実装は必ずPlan Modeを経由する。この「3ステップ以上」はチームが決めた閾値であり、一般的な正解ではない。ただし実際には、1ファイルの小修正を除くほぼすべての実装がこの基準に該当する。

失敗例

悪い依頼 — いきなり書かせる
「ダッシュボードにYTD累積チャートを追加して」

→ AIが即座にコードを書き始める
→ データ構造の前提が違った
→ 既存チャートのレイアウトを壊した
→ 全面書き直し
良い依頼 — Plan Modeを先に
「ダッシュボードにYTD累積チャートを追加する。
まず実装計画だけ出力して。コードはまだ書かない」

→ AIが計画を出力
→ データ構造・影響範囲を確認
→ 合意後に実装開始
→ 一発で通る

良い運用 — Plan → Implement → Verify

ワークフロー: Plan Mode の3フェーズ

Plan 計画・受入基準の合意 Implement 合意した計画通りに実装 Verify テスト・Lint・動作確認

Planフェーズでは計画と受入基準の両方を合意する。「何を作るか」だけでなく「何をもって完了とするか」を先に決めることで、Verifyフェーズの判断が機械的になる。Anthropicの推奨する増分実行(incremental execution)とも整合する。

判断基準

「この実装は1ファイルの単純な修正か?」という問いから始める。NOであればPlan Modeを使う。当チームでは3ステップ以上を基準としているが、本質は「実装後の手戻りコストが計画のコストを上回る可能性があるか」だ。複数ファイル・データ構造変更・UI変更が重なるときは必ずPlanを先に出力させる。

S9. Hooks — 実行タイミングで機械的に差し込む

自然言語のお願いは抜ける。だから機械的に差し込む。

結論: 「危険なコマンドは実行しないで」という指示は守られないことがある。PreToolUseで機械的にブロックする。
実務での意味: AIへの自然言語の制約は常に有効ではない。コード実行で強制する仕組みが必要だ。
今日から: 絶対に避けたいコマンドパターンを1つ特定し、PreToolUseのDangerousリストに追加する。

結論

hooksはClaude Codeがツールを呼び出す前後に自動実行されるスクリプトだ。自然言語で「危険なコマンドは実行しないで」と書いても、長いセッションの中でその制約が無視されることがある。hooksはその問題を解決する。実行タイミングで機械的に検査・記録することで、AIの挙動を構造的に制御する。ハーネスなしにはAIは暴走する — これがhooksの存在理由だ。

失敗例

CLAUDE.mdに「rm -rfは使わないこと」と書いていたが、AIが生成したクリーンアップスクリプトにそのコマンドが含まれていた。自然言語の制約はAIのトークン予測から「忘れられる」。PreToolUseがあればその瞬間にブロックされていた。

良い運用 — Hook ライフサイクル

Hook 実行フロー

User Request 指示入力 PreToolUse 事前チェック・ブロック Tool Execution 実際のツール呼び出し PostToolUse 後処理・ログ記録 応答

コード例 — PreToolUse(危険コマンド検知)

security.py(抜粋)
# PreToolUse: 危険パターン検知
import json, sys

DANGEROUS = ["rm -rf", "DROP TABLE", "force push"]
data = json.load(sys.stdin)
command = data.get("tool_input", {}).get("command", "")

if any(p in command for p in DANGEROUS):
    print(json.dumps({"decision": "block", "reason": "危険コマンド検知"}))
security.py — 全コード
security.py(完全版)
import json, sys

DANGEROUS_PATTERNS = [
    "rm -rf",
    "DROP TABLE",
    "DROP DATABASE",
    "force push",
    "--force",
    "git push -f",
]

def main():
    data = json.load(sys.stdin)
    tool_name = data.get("tool_name", "")
    tool_input = data.get("tool_input", {})
    command = tool_input.get("command", "")

    if tool_name == "Bash":
        for pattern in DANGEROUS_PATTERNS:
            if pattern in command:
                result = {
                    "decision": "block",
                    "reason": f"危険コマンド検知: {pattern}"
                }
                print(json.dumps(result))
                return

if __name__ == "__main__":
    main()

コード例 — PostToolUse(ツール使用ログ)

tool_logger.py(抜粋)
# PostToolUse: ツール使用をJSONLログに記録
from datetime import datetime
LOG_PATH = ".claude/logs/tool-usage.jsonl"

data = json.load(sys.stdin)
tool_name = data.get("tool_name", "")
file_path = data.get("tool_input", {}).get("file_path", "")

entry = {"ts": datetime.now().isoformat(), "tool": tool_name, "file": file_path}
with open(LOG_PATH, "a") as f:
    f.write(json.dumps(entry) + "\n")
settings.json — Hook 登録設定
.claude/settings.json
{
  "hooks": {
    "PreToolUse": [
      {"command": "python .claude/hooks/security.py"}
    ],
    "PostToolUse": [
      {"command": "python .claude/hooks/tool_logger.py"}
    ]
  }
}

判断基準

「これをCLAUDE.mdに書いても守られなかったことがあるか?」と問え。YESならhooksに移す。安全制約・強制ログ・外部APIへの二重呼び出し防止など、人間の監視なしに毎回確実に実行されなければならないものはすべてhooksの候補だ。hookは軽量なPythonスクリプトで足り、複雑なロジックは不要だ。

$ cat .claude/logs/tool-usage.jsonl | tail -3 {"ts":"2026-03-17T10:23:01","tool":"Edit","file":"src/chart_builder/waterfall.py"} {"ts":"2026-03-17T10:23:05","tool":"Bash","file":""} {"ts":"2026-03-17T10:23:09","tool":"Read","file":"projects/full-funnel/src/dashboard.html"}

S10. Skills・Agents・パイプライン — 全体設計

5つの制御レバーを統合して安定した自律実行を設計する

結論: Claude を安定して働かせるには、常設原則・必要時手順・事前整理・実行時検査・役割分担を分ける必要がある。
実務での意味: どれか一つが欠けると、残りの仕組みがその穴を補おうとして肥大化し、全体が崩れる。
今日から: 現在のプロジェクト構成を5レイヤーに照らし合わせ、「どのレイヤーが空白か」を確認する。

結論 — 5レイヤーの分業

レイヤー担当
CLAUDE.md常設原則コマンド、制約、言語設定S6
skills必要時手順chart-patterns、deploy-rules
Plan Mode事前整理実装計画、受入基準S8
hooks実行時検査security.py、tool_logger.pyS9
agents役割分担impl-agent、reviewer、tester

skillsはmarkdownファイルであり、AIが「必要なときに」参照する手順書だ。チャートの実装パターン、デプロイ規則、KPI定義など、常時メモリに置く必要はないが確実に正確であるべき知識を置く。agentsはサブエージェントとして特定の役割を持つ。Anthropicが推奨するtwo-agent pattern(例: impl-agentとreviewer)はお互いの盲点を補完する。

失敗例

skillsを作らずにすべての手順をCLAUDE.mdに書いたプロジェクトでは、CLAUDE.mdが6000トークンを超えた。AIはその冒頭にある「言語設定」すら参照できなくなり、英語で出力し始めた。必要時手順を常設ファイルに置いたことが、本来守るべき原則を見えなくした。

良い運用 — FP&Aダッシュボード生成パイプライン

FP&Aダッシュボード生成のデータフロー。各ステップは独立したPythonモジュールが担当する。

1

データ取得 — fetcher群

Fabric / BQ → Python fetcher → parquet/jsonl キャッシュ

2

データ整形 — preparers

KPI計算・セグメント集計・YTD累積処理

3

HTML生成 — html_generator

Chart.js テンプレートへのデータ注入・セクション結合

4

デプロイ — Cloudflare Pages

wrangler pages deploy → funnel-dashboard.pages.dev/

$ python src/data/fetcher.py --month 2026-03 Fetching Fabric BizLakehouse... done (1.2s) Fetching BQ dm_sign_002... done (0.8s) $ python src/dashboard/html_generator.py Generated: dist/dashboard.html (2.1MB)

Anthropicが推奨するtwo-agent patternを拡張した5エージェント構成。

エージェント役割主な責務
impl-agent実装担当機能コード・ユニットテスト
reviewerコードレビュー設計・セキュリティ・可読性
testerテスト設計統合テスト・E2E・カバレッジ
debuggerデバッグエラー原因特定・修正提案
verifier検証数値整合・KPI検証・不変条件

各エージェントは .claude/agents/ 配下のmarkdownで定義される。役割の境界を明確にすることで、impl-agentがテスト設計の責務まで負わないよう制約する。これもハーネスの一形態だ。

デプロイはskills/deploy-rules.mdに手順を置き、AIが参照して実行する。

$ wrangler pages deploy dist/ --project-name funnel-dashboard Uploading... 1 file (2.1MB) Deployment complete: https://funnel-dashboard.pages.dev/ $ # アーカイブ: 月別パスにもデプロイ $ wrangler pages deploy dist/ --project-name funnel-dashboard --branch 2603 Deployment complete: https://funnel-dashboard.pages.dev/2603/
注意: Cloudflare Pages は25MB制限。index.htmlが必須。プロジェクト名は固定 — 月ごとに新プロジェクトを作らない。

判断基準

5レイヤーのうちどれが欠けているかを確認する。CLAUDE.mdだけあってhooksがないなら、制約は自然言語のお願いに依存している。skillsがなくてCLAUDE.mdが肥大化しているなら、必要時手順を移す。agentsがなくて1つのプロンプトに実装・レビュー・テストを混在させているなら、役割分担を設計する。ハーネスなしにはAIは暴走する — この原則は5レイヤーすべてを貫く核心だ。