claude コマンドは何でできているのでしょうか。実体をたどると、ひとつの巨大な実行ファイルに行き着きます。バージョン 2.1.97 を題材に、中身を静的に観察しました。

実体は Bun 製の単一バイナリ

which claude で出るのはラッパーで、その先に本体があります。

~/.local/bin/claude → ~/.local/share/claude/versions/2.1.97

本体は Mach-O 64-bit arm64 の単一実行ファイルで、サイズは約 200MBBun(v1.3.11)でコンパイルされており、Node ランタイム・JS バンドル・依存ライブラリがまるごと 1 ファイルに同梱されています。巨大なのはそのためで、逆に言えば stringsgrep で内部の文字列が読めてしまいます。バージョンは versions/ に複数保持され、差し替え式で更新されます。

組み込みツールとコマンド

バイナリには、エージェントが使うツールの名前と説明文が素の英文で埋め込まれています。中核は Read / Bash / Write / Edit、加えて Glob・Grep・WebFetch・Task(Agent)・Skill・TodoWrite など。サブコマンドも auth / mcp / plugin / agents / doctor / update と一通り揃います。

注目は --bare オプションで、フック・LSP・プラグイン同期・自動メモリ・CLAUDE.md 自動探索をすべて省く最小モードです。何が「標準で効いているか」を裏返しに教えてくれます。

マルチクラウド対応

意外だったのは、API バックエンドが Anthropic 直結だけではないことです。バイナリ内の出現回数からも、複数プロバイダ対応が見て取れます。

プロバイダ 制御フラグ
AWS Bedrock CLAUDE_CODE_USE_BEDROCK
GCP Vertex CLAUDE_CODE_USE_VERTEX
Azure Foundry CLAUDE_CODE_USE_FOUNDRY
Mantle CLAUDE_CODE_USE_MANTLE

依存にも @aws-sdk/*@smithy/*@azure/msal-* が大量に同梱され、各クラウドの認証フローを内包しています。企業が自社のクラウド契約の上で動かせるよう作られている、ということです。

ローカルに残るもの

状態はすべて ~/.claude に集約されます。settings.json(設定)・mcp.json(MCP サーバ定義)・plugins/(拡張)・projects/(履歴とメモリ)・各種キャッシュが、役割ごとに分かれて置かれます。

ひとつ注意点があります。mcp.json には MCP サーバの環境変数がそのまま書かれるため、OAuth のクライアントシークレットのような資格情報が平文で残りうることです。誤って共有・コミットしないよう気をつけたい場所です。

まとめ

  • claude は Bun でコンパイルされた約 200MB の単一バイナリ。Node とクラウド SDK を丸ごと内包する。
  • 中核ツールは Read/Bash/Write/Edit。--bare が標準の自動挙動を裏側から見せてくれる。
  • API は Anthropic 直のほか Bedrock/Vertex/Foundry/Mantle に対応。
  • ローカル状態は ~/.claude に集約。設定ファイルの平文クレデンシャルには注意。