分析Claude Code源码:なぜ他のAIプログラミングツールより使いやすいのか?

原文タイトル:《Anthropic の Claude Code のソースコードを一文で理解:なぜそれは他より使いやすいのか?》

原文作者:Yuker,AI 分析アナリスト

2026 年 3 月 31 日、安全研究者 Chaofan Shou は、Anthropic が npm に公開した Claude Code パッケージにおいて、ソースマップファイルが剥離されていないことを発見しました。

つまり:Claude Code の完全な TypeScript ソースコード、51.2 万行、1903 個のファイルが、そのまま公開ネット上に露出しているということです。

もちろん、私は数時間足らずでこれだけ大量のコードを読み切れるはずがないため、私は 3 つの疑問を持ってこのソースを読みました:

  1. Claude Code と他の AI プログラミングツールの間には、いったいどんな本質的な違いがあるのか?

  2. なぜそれは「コードを書く手触り」が他よりも良いのか?

  3. 51 万行ものコードの中に、いったい何が隠されているのか?

読み終えた後の私の最初の反応は:これは AI のプログラミング・アシスタントではなく、OS だ。

一、まずは一つの物語:もしあなたがリモートのプログラマーを雇うなら

あなたがリモートのプログラマーを雇い、彼にあなたのコンピューターへのリモートアクセス権限を与えたとします。

あなたならどうしますか?

もしあなたが Cursor のやり方なら:彼をあなたの隣に座らせて、毎回彼がコマンドを打つ前にあなたが一度見て、「許可」を押します。乱暴だけど、ずっと見張っていなければなりません。

もしあなたが GitHub Copilot Agent のやり方なら:彼にまったく新しい仮想マシンを渡し、そこで好きにいじらせます。終わったらコードを提出し、あなたがレビューしてから統合します。安全ですが、彼はあなたのローカル環境を見られません。

もしあなたが Claude Code のやり方なら:

あなたのコンピューターをそのまま使わせる——ただし、あなたは非常に精密な検査システムを彼に組み込みます。彼ができること/できないこと、どんな操作があなたのクリックを必要とするか、どれは自分でできるか、さらには彼が rm -rf を使いたがっても、それを実行するには 9 層の審査を通らないといけません。

これが、3 つのまったく異なる安全哲学です:

なぜ Anthropic は一番難しい道を選んだのか?

それは、そうでなければ AI はあなたの端末、あなたの環境、あなたの設定を使って働けないからです——これが「本当にあなたの代わりにコードを書く」ことであって、「きれいな部屋でコードの一部を書いて、それをコピーして渡す」ことではありません。

しかし、その代償は何でしょう?彼らはそのために 51 万行のコードを書きました。

二、あなたが思っている Claude Code vs 実際の Claude Code

多くの人は、AI のプログラミングツールはこうだと思っています:

ユーザー入力 → LLM API を呼び出す → 結果を返す → ユーザーに表示する

Claude Code は実際にはこうです:

ユーザー入力
→ 7 層のシステムプロンプトを動的に組み立てる
→ Git の状態、プロジェクトの取り決め、履歴の記憶を注入
→ 42 個のツール、それぞれに個別の使用マニュアルが付く
→ LLM がどのツールを使うかを決める
→ 9 層の安全審査(AST パース、ML 分類器、サンドボックス検査…)
→ 権限競合の解析(ローカルキーボード / IDE / Hook / AI 分類器が同時に競合)
→ 200ms の誤操作防止ディレイ
→ ツールを実行
→ 結果をストリーミングで返す
→ コンテキストが極限に近い?→ 3 層圧縮(ミクロ圧縮 → 自動圧縮 → 完全圧縮)
→ 並列が必要?→ サブ Agent のハチの群れ(蜂群)生成
→ タスクが完了するまで繰り返す

もちろん皆さんも上の内容が気になっているはずです。でも急がなくて大丈夫。順番に一つずつ分解して見ていきましょう。

三、最初の秘密:プロンプトは書き起こしたものではなく、「組み立て」られたもの

src/constants/prompts.ts を開くと、この関数が見つかります:

SYSTEM_PROMPT_DYNAMIC_BOUNDARY を見つけましたか?

これはキャッシュの境界線です。境界線より上の内容は静的で、Claude API はそれらをキャッシュできます。token コストを節約できるからです。境界線より下の内容は動的です——現在の Git ブランチ、あなたの CLAUDE.md のプロジェクト設定、あなたがこれまでに伝えた好みの記憶… すべてが毎回違います。

これは何を意味しますか?

Anthropic はプロンプトを、コンパイラの出力を最適化するものとして扱っています。静的部分は「コンパイル後のバイナリ」、動的部分は「実行時パラメータ」です。こうすることで得られる利点は:

  1. 節約:静的部分はキャッシュを通って、再課金されない

  2. 速い:キャッシュヒットなら、その token の処理をそのままスキップできる

  3. 柔軟:動的部分によって、毎回の会話が今の環境を感知できる

それぞれのツールには独立した「使用マニュアル」

さらに私を驚かせたのは、各ツールのディレクトリの下に prompt.ts があることです——これは LLM 向けに書かれた使用マニュアルです。

BashTool の(src/tools/BashTool/prompt.ts,約 370 行)を見てみましょう:

これは人間向けのドキュメントではありません。AI 向けの振る舞いルールです。 Claude Code が起動するたびに、これらのルールがシステムプロンプトに注入されます。

これが、Claude Code が勝手に git push --force をしない理由です。そして一部のツールがするのは——モデルが賢いからではなく、プロンプトの中で規則がすでにはっきり説明されているからです。

さらに、Anthropic 内部のバージョンとあなたが使うものは違う

コード内に大量に出てくるこのような分岐:

ant は Anthropic の社内社員です。彼らのバージョンには、より詳細なコードスタイルの指針(「WHY が明確でない限り、コメントを書かない」)、より攻撃的な出力戦略(「ピラミッド型ライティング」)、そしてまだ A/B テスト中の実験機能(Verification Agent、Explore & Plan Agent)などがあります。

これは何を示しているのか?

Anthropic 自身が、Claude Code の最大の利用者だということです。彼らは自分たちのプロダクトを使って、自分たちのプロダクトを開発しているのです。

四、第二の秘密:42 個のツールがあるが、あなたが見たのは氷山の一角だけ

src/tools.ts を開くと、ツール登録センターが見えます:

42 個のツールですが、その大部分はあなたが直接目にすることはありません。多くのツールは遅延ロードされているからです——LLM が必要なときだけ、ToolSearchTool によって必要に応じて注入されます。

なぜこうしているのですか?

ツールを 1 つ増やすたびに、システムプロンプトにもその分の説明が増え、token をさらに支払う必要があるからです。たとえば、Claude Code にコードを 1 行だけ直させたいなら、「定時タスクのスケジューラ」や「チーム協業管理者」を読み込む必要はありません。

もう一つ、より賢い設計:

CLAUDE_CODE_SIMPLE=true を設定すると、Claude Code はツールが 3 つだけになります:Bash、ファイルの読み取り、ファイルの変更。これはミニマリスト向けの裏口です。

すべてのツールは同じ工場から出てくる

デフォルト値に注目してください:isConcurrencySafe のデフォルトは false、isReadOnly のデフォルトは false です。

これは fail-closed の設計です——あるツールの作者が安全属性を宣言し忘れた場合、システムはそれを「安全ではない、書き込みを行う」と仮定します。過度に慎重であることを選び、リスクを一つも見落とさない。

「まず読む、その後に直す」という鉄則

FileEditTool は、あなたがこのファイルを FileReadTool で既に読んだかどうかをチェックします。読んでいなければ、直ちにエラーを返し、編集を許しません。

これが、Claude Code が一部のツールのように「あなたのファイルを無から作ったコードで上書きする」ことができない理由です——理解してから修正するよう強制されているからです。

五、第三の秘密:記憶システム——なぜ「あなたを覚えていられる」のか

Claude Code を使ったことがある人には、共通の感覚があります:まるで本当にあなたを理解しているかのようだ。

あなたが「テストではデータベースをモックしないで」と伝えると、次の会話ではモックしません。あなたが「私はバックエンドエンジニアで、React は初心者」と伝えると、フロントエンドのコードを説明するときにバックエンドの類比を使います。

その背後には、完全な記憶システムがあります。

AI を使って記憶を検索する

Claude Code は、**別の AI(Claude Sonnet)**を使って「どの記憶が現在の会話と関連しているか」を判断します。

キーワード一致でも、ベクター検索でもありません——すべての記憶ファイルのタイトルと説明を、ある小さなモデルが素早くスキャンして、最大 5 件の最も関連性の高いものを選び、その完全な内容を現在の会話のコンテキストに注入します。

方針は「想起率より精度優先」——役に立つ可能性がある記憶を取り逃がすことはあっても、無関係な記憶を突っ込んでコンテキストを汚さないようにします。

KAIROS モード:夜間の「夢」

ここが、私が一番「SF だ」と感じる部分です。

コードには KAIROS という特性フラグがあります。このモードでは、長い会話の記憶は構造化ファイルに保存されるのではなく、日付ごとの追記ログに保存されます。そして /dream という機能が「夜間」(稼働が落ちる時間帯)に動き、これらの生のログを蒸留して構造化されたテーマファイルにします。

AI が「寝ている間」に記憶を整理する。これはもう工学ではなく、仿生学(バイオミメティクス)です。

六、第 5 の秘密:これは 1 つの Agent ではなく「一群」

Claude Code に複雑なタスクをやらせると、こっそりこういうことをしている可能性があります:

それはサブ Agent を生成しています。

しかも、サブ Agent には厳密な「自己認識」を注入し、再帰的にさらにサブ Agent を生成してしまうのを防ぎます:

このコードはこう言っています:「あなたは作業員であって、マネージャーではない。人を雇おうなんて考えず、自分でやれ。」

Coordinator モード:マネージャー方式

コーディネーターモードでは、Claude Code は純粋なタスクのオーケストレーターになります。自分では働かず、割り当てるだけです:

中核となる原則はコードコメントに書かれています:

「Parallelism is your superpower」は、読み取り専用の研究タスク:並列で回す。ファイルを書き換えるタスク:ファイルごとにグループ化して逐次で回す(競合を避ける)。

Prompt Cache の極限までの最適化

サブ Agent のキャッシュヒット率を最大化するために、すべての fork されたサブ代理のツール結果は同じプレースホルダーテキストを使います:

「Fork started—processing in background」

なぜ?Claude API の prompt cache は バイト単位の前方一致に基づいているからです。もし 10 個のサブ Agent の前方バイト列が完全に一致していれば、最初の 1 つだけが「コールドスタート」を必要とし、残り 9 つはすぐキャッシュにヒットします。

これは、1 回の呼び出しで数セントを節約するような最適化ですが、大規模利用では大量のコスト削減につながります。

七、第 6 の秘密:3 層圧縮で、会話が「決して上限を超えない」

すべての LLM にはコンテキストウィンドウの制限があります。会話が長くなればなるほど、履歴メッセージは増え、最終的には必ず制限を超えます。

Claude Code はこれに対して 3 層の圧縮を設計しています:

第一層:ミクロ圧縮——最小コスト

ミクロ圧縮では、古いツール呼び出し結果だけを動かします——「10 分前に読んだ 500 行のファイル内容」を [Old tool result content cleared] に置き換えます。

プロンプトと会話の主線は完全に保たれます。

第二層:自動圧縮——積極的に縮める

トークン消費がコンテキストウィンドウの 87% に近づくと(ウィンドウサイズ - 13,000 buffer)、自動的にトリガーされます。ブレーカーがあり、連続 3 回圧縮に失敗したら試みを停止して、無限ループを防ぎます。

第三層:完全圧縮——AI による要約

AI に会話全体を要約させ、その要約で履歴メッセージをすべて置き換えます。要約を生成するときの前置指示は厳しいものがあります:

なぜここまで厳しいのですか? 要約の過程で AI がまたツールを呼び出してしまうと、さらに多くの token を消費してしまい、本末転倒だからです。このプロンプトはこう言っています:「あなたのタスクは要約だ。他のことはするな。」

圧縮後の token 予算:

· ファイル復元:50,000 tokens

· 各ファイルの上限:5,000 tokens

· スキル内容:25,000 tokens

これらの数字は当てずっぽうで決めたものではありません——「十分なコンテキストを残して作業を継続すること」と「新しいメッセージを受けるために十分なスペースを空けること」のバランス点です。

八、このソースコードを読み終えて私が学んだこと

AI Agent の 90% の仕事量は「AI」以外にある

51 万行のコードのうち、本当に LLM API を呼び出している部分はおそらく 5% 未満です。残り 95% は何でしょう?

· 安全チェック(BashTool のために 18 個のファイル)

· 権限システム(allow/deny/ask/passthrough の 4 状態の意思決定)

· コンテキスト管理(三層圧縮 + AI 記憶検索)

· エラー復旧(ブレーカー、指数バックオフ、Transcript の永続化)

· 複数 Agent の協調(蜂群オーケストレーション + メール通信)

· UI インタラクション(140 個の React コンポーネント + IDE Bridge)

· パフォーマンス最適化(prompt cache の安定性 + 起動時の並列プリフェッチ)

もしあなたが AI Agent のプロダクトを作っているなら、こここそが本当に解決すべき問題です。モデルがどれほど賢いかではなく、あなたの足場(スキャフォールド)がどれほど頑丈かが重要なのです。

良いプロンプトエンジニアリングはシステム工学

きれいな prompt を 1 つ書いて終わり、ではありません。Claude Code のプロンプトは:

· 7 層の動的組み立て

· 各ツールに独立した使用マニュアルが付く

· キャッシュ境界が正確に分割されている

· 内部バージョンと外部バージョンで指示セットが異なる

· キャッシュ安定性を保つためツールの順序が固定されている

これは手作りの職人芸ではなく、エンジニアリングされたプロンプト管理です。

失敗を前提に設計する

すべての外部依存には、それぞれ失敗時の戦略があります:

Anthropic は Claude Code を OS として扱っている

42 個のツール = システムコール 権限システム = ユーザー権限管理 技能システム = アプリストア MCP プロトコル = デバイスドライバ Agent 蜂群 = プロセス管理 コンテキスト圧縮 = メモリ管理 Transcript の永続化 = ファイルシステム

これは「チャットボットにいくつかツールを足したもの」ではありません。LLM を核にした OS です。

まとめ

51 万行コード。1903 個のファイル。18 個の安全ファイルが 1 つの Bash ツールのためにある。

9 層の審査は、AI が安全にあなたの代わりに 1 行のコマンドを打つためだけにある。

これが Anthropic の答えです:AI を本当に役に立たせるには、檻に閉じ込めてもだめだし、丸裸にして放り出してもだめ。完全な信頼体系を作って与えないといけない。

そして、その信頼体系の代償は 51 万行のコードです。

原文リンク

Click 了解律动BlockBeats が募集しているポジションを確認してください

律動 BlockBeats 公式コミュニティに参加してください:

Telegram 認証購読グループ:https://t.me/theblockbeats

Telegram 交流グループ:https://t.me/BlockBeats_App

Twitter 公式アカウント:https://twitter.com/BlockBeatsAsia

原文表示
このページには第三者のコンテンツが含まれている場合があり、情報提供のみを目的としております(表明・保証をするものではありません)。Gateによる見解の支持や、金融・専門的な助言とみなされるべきものではありません。詳細については免責事項をご覧ください。
  • 報酬
  • コメント
  • リポスト
  • 共有
コメント
コメントを追加
コメントを追加
コメントなし
  • ピン