AppleのClaude Code向けXcodeプラグイン:何をインストールするのか
Claude Code向けのAppleの xcode プラグインは、Anthropicの公式マーケットプレイスにある15行であり、ファイルは1つもありません。エントリが保存しているのは xcrun agent plugin path --plugin-format claude というコマンド1つで、そのコマンドが実行されたときに、自分のMacにあるXcodeがプラグインを書き出します。12 このエントリは2026年11月6日(UTC)にマージされました。私が確認した場所では、AppleからもAnthropicからも発表は見つかりませんでした。2 Xcode 27.2では、このコマンドは160個のファイルを収めたディレクトリを出力します。中身は16個のskillsと1つのMCPサーバーエントリで、フックもエージェントもありません。Claude Code自身のインベントリは、すべてのセッションに約4,463トークンが加わると見積もっています。また、そのサーバーエントリが指定するブリッジコマンドは、私のあるセッションで54個のツールを一覧表示しました。2 私はこのディレクトリを読み、--plugin-dir を使って使い捨てのセッションに読み込みました。マーケットプレイスからのインストールは承認していません。どの記述がどこから来ているのかは、各セクションに書いてあります。
TL;DR
- マーケットプレイスのエントリが持っているのはコマンドであり、プラグインではありません。カタログの外からコンテンツを取得するほかのエントリは、どれもコミットSHAを持っています。
xcodeには固定する対象がなく、マーケットプレイスのバリデーターにある免除リストに載っている唯一の名前です。13 - インストールとは、人がそのコマンドを承認することです。Claude Codeはコマンドを表示して尋ねます。この質問を省くフラグは、エージェントがセッションの中からインストールを実行する場合には何の効果もありません。6
- すべてを先に読めます。このコマンドはディレクトリを出力し、
claude --plugin-dir <dir> plugin details xcode-integrationは、セッションを開始せずにそのインベントリを取ります。72 - Xcode 27.2でのインベントリは、skillsが16、エージェントが0、フックが0、そして
xcrun mcpbridgeを実行するMCPサーバーが1つです。セッションがユーザーに一覧表示するskillsは15個です。16個目は、ヘッダーでモデル専用とされています。29 - すでに
claude mcp addでブリッジを追加している場合、Claude Codeはプラグイン側のコピーを重複として抑制します。私のMacでは、プラグインが加えたのはskillsだけで、ほかには何もありませんでした。28 - 承認の対象はコマンド文字列です。コマンドが出力するものは選択中のXcodeに従い、その違いがカタログの変更として表れることはありません。45
マーケットプレイスに入ったもの
掲載の全体は、1つのJSONオブジェクトです。以下は、2026年11月11日時点で anthropics/claude-plugins-official にあったもので、マージ以降変わっていません。1
{
"name": "xcode",
"displayName": "Xcode",
"description": "Work with Xcode projects from Claude Code: build, run, and test schemes, render SwiftUI previews, drive simulators and devices, read build logs and diagnostics, and search Apple developer documentation.",
"author": {
"name": "Apple Inc."
},
"category": "development",
"source": {
"source": "command",
"command": "xcrun agent plugin path --plugin-format claude",
"mode": "link"
},
"homepage": "https://developer.apple.com/xcode/"
}
その日、カタログには317個のプラグインがありました。私はそれを、コンテンツの出どころ別に分類しました。1
| ソースタイプ | エントリ数 | コミットSHAに固定されているか |
|---|---|---|
| URLで指定するgitリポジトリ | 163 | 163個すべて |
| gitリポジトリのサブディレクトリ | 99 | 99個すべて |
| マーケットプレイスのリポジトリ内のフォルダ | 54 | 該当なし。フォルダはカタログ自身の履歴の中にあります |
| 手元のマシンで実行されるコマンド | 1(xcode) |
いいえ。固定する対象がありません |
このエントリが入るまでの記録を見ると、それがどれほど異例かがわかります。2026年9月18日、あるコントリビューターが「Add Xcode plugin (xcode)」というタイトルのプルリクエスト #6259 を開きました。ボットが、このリポジトリはAnthropicのチームメンバーからのコントリビューションしか受け付けないと返信し、メンテナーは、プルリクエストが開かれてから19分後にその変更を了承しました。9月30日には、2つ目のプルリクエスト #6338 が、チェックを実行できるように、同じコミットをリポジトリの内側のブランチへ移しました。1
チェックは、そのままでは通りませんでした。3つ目のプルリクエスト #7015 によると、マーケットプレイスのバリデーターは、Xcodeのエントリを3か所で不合格にしていました。SHAがないこと、コマンド内のスペースがシェルのメタ文字として数えられること、クローンするURLがないことです。修正では、ワークフローを、新しい command-exempt 入力を持つバージョンのバリデーターへ移し、その入力に "xcode" を設定しました。その行の上にあるコメントは、リストに載る名前の1つ1つを、マーケットプレイス運用の承諾が必要な「listing decision」と呼んでいます。3 3つのプルリクエストはすべて、11月6日(UTC)に9分のうちに閉じました。#7015 は00:49に開かれて00:53にマージされ、#6338 は00:55にマージされ、#6259 は00:58に重複としてクローズされました。13
私が見つけられた範囲では、どちらの会社もこれについて何も述べていません。11月11日に、Appleの開発者向けニュース、リリース、ニュースルームの各フィード、AppleのXcodeページ、Anthropicのニュースページ、Claudeブログを確認しましたが、このプラグインへの言及は見つかりませんでした。Appleの外部エージェント向けドキュメントは、いまも claude mcp add でブリッジを手作業で追加する方法を説明しており、プラグインには触れていません。210 このプラグインをAppleのものと呼ぶ根拠は、エントリのauthorフィールドと、このコマンドがXcodeの中に同梱されているという事実です。
エントリが保存しているのはコマンドで、プラグインではない
Claude Codeは、2026年8月12日のバージョン2.1.229で command ソースタイプを追加しました。6 ドキュメントはこれを、ユーザーのマシン上のツールがプラグインディレクトリを生成する場合に使うソースと説明しており、例として、ユーザーが選択したツールチェーン向けにプラグインを生成するIDEを挙げています。4 取り決めは小さなものです。
- コマンドは、プラグインディレクトリの絶対パスを1行だけ出力し、0で終了します。デフォルトの制限時間は60秒で、Xcodeのエントリは独自の値を設定していません。41
- Claude Codeは、プラグインをインストールまたは更新するときにこのコマンドを実行し、さらに、有効になっているプラグインについてはセッションごとに1回、セッション開始の直後にバックグラウンドで実行します。
CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFICが設定されている場合、このバックグラウンド実行はスキップします。5 - Xcodeのエントリが使っている
linkモードでは、Claude Codeは何もコピーしません。ディレクトリの最上位のエントリにリンクし、ファイルをその場所から読み込みます。バージョンは、ファイルの内容からではなく、ディレクトリの実パスと最上位のエントリから決まります。4 - Claude Codeが実行するのは、人が承認したコマンドそのものだけです。あとでマーケットプレイスがコマンドやモードを変更すると、各ユーザーが新しいものを承認するまで、バックグラウンドでの実行は止まります。5
- 組織は、管理設定
disableCommandPluginSourcesで、このソースタイプ全体を無効にできます。4
これらのルールは、Xcodeが使うディレクトリ名とかみ合っています。私のMacでは、このコマンドはXcodeのビルド番号を含むパスを出力します(ユーザー名は置き換えてあります)。
$ xcrun agent plugin path --plugin-format claude
/Users/<you>/Library/Developer/Xcode/CodingAssistant/ExportedPlugins/27B52/claude
Xcodeのビルドが新しくなればパスも新しくなり、Claude Codeは、パスが新しくなったことでプラグインが変わったと知ります。ディレクトリがすでにビルド済みで、Xcodeアプリが動いていない状態では、時間を計った3回の実行で、コマンドは約0.2秒で戻りました。私のMacでは、XcodeのヘッドレスMCPモードがオンになっています。sudo xcrun mcp-server enable で開始するプレビューで、あとのセクションで取り上げます。このMacでは、各Xcodeビルドでの最初の呼び出しは、Xcodeアプリではなく、Xcodeバンドル内のバックグラウンドヘルパーである Xcode Service を通してディレクトリを書き出しました。時間を計ったのは、すでに存在するディレクトリに対する呼び出しだけで、このモードをオフにした状態ではコマンドを実行していません。2
同じルールによって、レビューが対象にできる範囲も変わります。Claude Codeのセキュリティドキュメントは、インストールの前にプラグインのソースを読むよう求めています。ホームページかマーケットプレイスのリポジトリを開き、そこでプラグインのディレクトリを見つける、という手順です。7 xcode の場合、ホームページはAppleのXcode製品ページで、リポジトリにあるのは上の15行です。プラグインの中身は、自分のXcodeが書き出して初めて存在するので、レビューは自分のMacの上で、自分のXcodeビルドに対して行うことになります。
Claude Codeが承認を求めるもの
インストールはプログラムを実行するものなので、Claude Codeは実行の前にコマンドを表示して尋ねます。ターミナルでは、その質問は Run this command now? [y/N] です。6 私はClaude Code 2.1.322で、ターミナルが接続されていないシェルからインストールを実行しました。すると、Claude Codeは尋ねる代わりに拒否しました。出力の最初の4行は次のとおりです。2
$ claude plugin install xcode@claude-plugins-official --scope local
"xcode" is installed by running a command from marketplace "claude-plugins-official" on this machine:
xcrun agent plugin path --plugin-format claude
(mode "link": its output directory is used in place (linked, not copied))
Not an interactive terminal, so the command was only displayed, not accepted. Run this in your own terminal (outside the Claude Code session) to confirm the command shown above.
この手順には、重要な点が3つあります。
エージェントが代わりに承認することはできません。 -y は、自分のターミナルから、表示されたコマンドを承認します。CLIリファレンスによると、インストールがセッションの中で、Bashツールやフックから実行される場合、Claude Codeはこのフラグを無視します。6 Claude Codeにプラグインのインストールを頼んだ場合は、コマンドがこちらに差し戻されるものと考えてください。
スクリプトは、特定の1つのコマンドだけを承認できます。 --json を付けると、拒否されたインストールは shownCommand オブジェクトを報告します。そして、2.1.271で加わった --accept-command <sha256> は、そのコマンドだけを承認し、ほかのコマンドは承認しません。リファレンスは、これを自分のターミナルから渡すよう述べています。このフラグはClaude Codeのセッションの中では効果がないからで、つまりエージェントは、ハッシュによる承認もできません。ドキュメントは、このハッシュをコマンド、プラグイン、マーケットプレイスのカタログに結びつけており、3つのどれかが変わっていれば、Claude Codeはコマンドをもう一度表示するとしています。6 以下は私の環境のもので、1行の結果から抜き出して整形し直してあります。2
"shownCommand": {
"kind": "command_source",
"pluginId": "xcode@claude-plugins-official",
"command": "xcrun agent plugin path --plugin-format claude",
"mode": "link",
"catalogRevision": "gcs:43fd1f9db0941b2b83cb62268e35970d4a67c202",
"sha256": "b6a49a80f0917b25ceb38fa52e95dacca7ad78893aeb9f0463c62b3d73ca1a48"
}
値は、自分で --json を付けて実行した結果から取ってください。上の値は、比較のために私が計算した、コマンド文字列の単純なSHA-256とは異なります。またドキュメントは、カタログが変わるとハッシュは無効になるとしています。この記事からコピーした値は、Claude Codeに拒否されるかもしれません。26
セッションには、セッション自身の経路があります。 拒否メッセージの残りの部分は、承認できる2つ目の場所を挙げています。/plugin の下にある、プラグインの詳細ペインです。xcode について、私はそのペインを開いていません。2
承認する前にプラグインを読む
マーケットプレイスが実行しようとしているコマンドは、自分で実行できるものです。次の3行で、インストールがリンクすることになるものを確認できます。
# 1. Ask Xcode for the directory. The first call for an Xcode build writes it.
DIR="$(xcrun agent plugin path --plugin-format claude)"
# 2. Inventory it without starting a session.
claude --plugin-dir "$DIR" plugin details xcode-integration
# 3. Read the one file that starts a process.
cat "$DIR/.mcp.json"
2行目は、Claude Codeがプラグインディレクトリの中に何を見つけるかを一覧にする、ドキュメントに記載された方法です。セッションを開始せずにファイルを読みます。7 渡す名前は、プラグインのマニフェストにある xcode-integration です。カタログ上の名前である xcode を渡すと、同じコマンドは Plugin "xcode" not found. と答えます。2 Xcode 27.2(27B52)とClaude Code 2.1.322では、インベントリの最初の部分は次のとおりでした。2
xcode-integration 1.0.0
Description: Xcode-managed plugin for skills and services that integrate with the IDE.
Source: xcode-integration@inline
Component inventory
Skills (16) accessibility-dynamic-type-specialist, accessibility-sufficient-contrast-specialist, accessibility-voiceover-specialist, adopt-c-bounds-safety, app-intents-specialist, app-intents-whats-new-27, app-resizability, audit-xcode-security-settings, building-document-based-swiftui-applications, device-interaction, modernize-tests, swiftui-specialist, swiftui-whats-new-27, translation, translation-coordinator, xctrace
Agents (0)
Hooks (0)
MCP servers (1) xcode (tool schemas resolved at runtime; not counted)
LSP servers (0)
Projected token cost
Always-on: ~4,463 tok added to every session
Claude Codeのセキュリティページは、プラグインの構成要素のうち、Claudeのツール呼び出しを律する権限ルールの外で、自らコードを実行するものを挙げています。フック、モニター、mod、そしてMCPとLSPのサーバープロセスです。7 Appleのディレクトリにあるのは、そのうちの1つ、MCPサーバーです。最上位には3つのエントリがあります。マニフェストのフォルダ、.mcp.json、skills/ です。160個のファイルの内訳は、Markdownファイルが157個、JSONファイルが2個、Pythonスクリプトが1個です。このスクリプトは audit-xcode-security-settings skillの中にある69行で、インポートするのは argparse、json、re、pathlib だけです。スクリプト自身の説明によれば、保存されたビルド設定の出力を、セキュリティに関係する項目だけに絞り込むものです。エージェントが実行した場合にだけ動きます。2
claude plugin validate は、警告1つでこのディレクトリを合格にします。マニフェストにauthorの記載がない、という警告です。同じ実行は、Anthropicのclaude.aiディレクトリ向けの提出チェックの一部も適用します。claude.aiディレクトリは、公式マーケットプレイスとは別の掲載先です。それらのチェックは、claude.aiディレクトリであれば提出が拒否される問題を2つ(READMEがないこと、LICENSEがないこと)と、警告を1つ(アイコンがないこと)報告します。これらは今回の掲載には関係しません。公開ガイドによれば、公式マーケットプレイスは、claude.aiディレクトリのポータルを通じた提出を受け付けていないからです。212 このフォルダは、独自のライセンス条件を示していません。私はこれをXcodeの一部として扱っています。
セッションが受け取るもの:16個のskills、一覧に出るのは15個
私は、空のプロジェクトで claude -p --plugin-dir "$DIR" を使い、このディレクトリを単一プロンプトのセッションに読み込みました。--plugin-dir で読み込んだプラグインは、そのセッションの間だけ有効で、何もインストールしません。2
セッションの開始イベントは、このプラグインを xcode-integration@inline、バージョン1.0.0として挙げており、デバッグログには、そこから16個のskillsが読み込まれたと記録されていました。セッション自身のskillsとスラッシュコマンドの一覧には、そのうち15個が入っていました。欠けていた translation-coordinator は、ヘッダーで user-invocable: false を設定しています。skillを / メニューから隠しつつ、Claudeからは呼び出せるままにする設定です。9 同じセッションで、持っているskillsを出力するようモデルに頼むと、モデルは16個の名前を出力し、コーディネーターもその中に含まれていました。この最後の確認は、モデル自身の報告です。2
どの名前にも、/xcode-integration:swiftui-specialist のように、xcode-integration: という接頭辞が付きます。カタログはこのプラグインを xcode と呼び、マニフェストは xcode-integration と呼んでいます。Claude Codeの読み込みリファレンスによれば、この2つの名前は役割が違います。カタログ上の名前はインストールのキーで、マニフェストの名前はプラグインのコンポーネントの名前空間です。5 私がこの接頭辞を観察したのは、--plugin-dir で読み込んだセッションでのことです。マーケットプレイスからのインストールについては、このページに頼っています。
以下は、同じ出力の残りの部分にある、各skillのコストについてのClaude Codeの見積もりです。そのskillのファイルがブリッジのツールの名前を挙げているかどうかを、横に並べました。2
| Skill | 常にコンテキストに入る量 | 呼び出し時 | 名前を挙げているブリッジのツール |
|---|---|---|---|
app-intents-specialist |
~930 | ~2.2k | なし |
app-intents-whats-new-27 |
~780 | ~3.3k | なし |
swiftui-specialist |
~340 | ~1.5k | なし |
swiftui-whats-new-27 |
~340 | ~1.6k | なし |
adopt-c-bounds-safety |
~320 | ~740 | なし |
building-document-based-swiftui-applications |
~310 | ~900 | なし |
app-resizability |
~230 | ~6.9k | なし |
audit-xcode-security-settings |
~210 | ~21.7k | 11 |
accessibility-voiceover-specialist |
~180 | ~6.9k | 1 |
xctrace |
~170 | ~380 | なし |
translation |
~160 | ~9k | 4 |
translation-coordinator(モデル専用) |
~150 | ~4.2k | 4 |
accessibility-dynamic-type-specialist |
~140 | ~3.6k | 1 |
accessibility-sufficient-contrast-specialist |
~120 | ~4.9k | 1 |
device-interaction |
~50 | ~4.6k | 4 |
modernize-tests |
~40 | ~3.5k | なし |
数値はトークン数で、ツールによる見積もりです。各行は丸められており、合計すると約4,470になります。Claude Code自身の合計は、上の ~4,463 です。そのうち約1,710を、2つのApp Intents skillsが占めています。説明文が長いためです。この見積もりには、MCPサーバーのツールスキーマが含まれていません。インベントリは、それを実行時に解決するとしています。各skillが何を教えるのかは、Xcode 27が搭載するskillsと、それを外へ出す2つの経路を扱った、私のより長い記事に書いてあります。
MCPの側:サーバーエントリは1つ、ここではツールが54個
.mcp.json は、xcode という名前のstdioサーバーを1つ宣言しており、そのコマンドは xcrun mcpbridge です。Appleのドキュメントは、ブリッジを手作業で接続するためのコマンドとして、同じものを示しています。claude mcp add --transport stdio xcode -- xcrun mcpbridge です。10 私のClaude Codeセッションには、すでにそのエントリがありました。手作業で追加したエントリがあり、プラグインがないセッションでは、ブリッジは339ミリ秒で接続し、自らを xcode-tools のバージョン 25464 と名乗り、54個のツールを一覧表示しました。2 私の以前の記事は、Xcode 26.3のブリッジについて20個のツールという数を挙げていました。その記事はこの数を、当時の私のテストと、記事がリンクしているサードパーティの解説にもとづかせています。
54個を名前で分類しました。2
| 領域 | ツール数 | 例 |
|---|---|---|
| プロジェクトのファイルと構造 | 15 | XcodeRead, XcodeWrite, XcodeUpdate, XcodeRM, XcodeNewTarget |
| ビルド、実行、診断 | 11 | BuildProject, RunProject, GetBuildLog, XcodeRefreshCodeIssuesInFile |
| ビルド設定、フラグ、エンタイトルメント、Info.plist | 6 | GetTargetBuildSettings, UpdateTargetBuildSetting, AddEntitlement |
| テスト | 5 | GetTestList, RunSomeTests, RunAllTests |
| デバイスとシミュレータの操作 | 5 | DeviceInteractionStartSession, DeviceInteractionSynthesize |
| String Catalogsとローカライズ | 4 | LocalizationPlanner, StringCatalogEdit |
| クラッシュとフィールドパフォーマンスのレポート | 4 | GetTopCrashIssues, GetFieldPerformanceIssueLogs |
| プレビュー、スニペット、デバッガー | 3 | RenderPreview, RunCodeSnippet, InvokeDebuggerCommand |
| ドキュメント | 1 | DocumentationSearch |
この一覧は、マーケットプレイスの説明文から想像されるよりも遠くまで届きます。XcodeRM はプロジェクトからファイルを削除し、デフォルトでは、元のファイルをゴミ箱に移します。InvokeDebuggerCommand は、Xcodeのアクティブなデバッグセッションにlldbコマンドを送ります。GetTopCrashIssues は自らを、Appleのクラッシュレポートサービスからアプリのクラッシュシグネチャを取得するものと説明しています。2 これらはどれもツール呼び出しなので、Claude Codeの権限ルールが適用されます。サーバープロセスそのものは、どのプラグインのMCPサーバーもそうであるように、サンドボックスの外で動きます。7
skillsとツールは、互いに参照し合っています。16個のskillsのうち7個が、ブリッジのツールを接頭辞なしの名前で挙げています。その7個のうちの1つ audit-xcode-security-settings は、接頭辞付きの汎用的な形式 mcp__<server>__XcodeGlob も示したうえで、サーバーの名前は環境によって変わると述べ、名前をハードコードしないようエージェントに指示しています。依存は逆方向にも走っています。String Catalogとローカライズの4つのツールは、すべて説明文で、ツールを呼び出す前にプラグインのskillを有効にするようエージェントに指示しています。LocalizationPlanner と StringCatalogRead は xcode-integration:translation-coordinator の名前を挙げ、StringCatalogContext と StringCatalogEdit は xcode-integration:translation の名前を挙げています。残りの50個の説明文は、skillの名前を1つも挙げていません。2 手作業で追加したブリッジがあり、プラグインがないセッションには、4つのツールがすべてあり、2つのskillはどちらもありません。マージされたプルリクエストでは、あるコメント投稿者が、Xcode MCPサーバーはすでに動いていたのに、この掲載は何を加えるのかと尋ねました。1 私のMacでは、その答えはskillsです。そしてブリッジ自身のツールのうち4つが、そのうちの2つを名指しで求めています。
すでにブリッジを手作業で追加している場合
Claude Codeは、MCPサーバーの定義に順位を付けます。まずローカル、プロジェクト、ユーザーの各スコープ、次にプラグインが提供するサーバー、その次にclaude.aiのコネクタです。組織が管理設定を通じて提供するサーバーは、そのすべてより上位になります。プラグインのサーバーは、エンドポイントによってほかのサーバーと照合されます。そのため、ユーザーが設定したものと同じコマンドを持つプラグインのサーバーは重複と見なされ、Claude Codeは、ユーザーの定義を使って1回だけ接続します。8
私のセッションは、まさにそのとおりの結果を示しました。ユーザースコープの xcode エントリと並べてプラグインを読み込むと、セッションのサーバー一覧には、ソースが user の xcode があり、プラグインのサーバーのエントリはありませんでした。その理由は、デバッグログに出ていました(タイムスタンプとログレベルは省いてあります)。2
Suppressing plugin MCP server "plugin:xcode-integration:xcode": duplicates manually-configured "xcode"
実際上の影響は、名前に表れます。手作業で追加したエントリが残っている間、ツールの名前は mcp__xcode__BuildProject、mcp__xcode__XcodeRead などのままです。ドキュメントは、プラグインのサーバーには plugin:<plugin>:<server> という名前を、そのツールには mcp__plugin_<plugin>_<server>__<tool> という形式を与えており、権限ルールとフックのマッチャーで使うのはツールの形式のほうだとしています。8 このルールに従えば、プラグインがあり、手作業で追加したエントリがないセッションでは、同じツールが mcp__plugin_xcode-integration_xcode__BuildProject という名前になるはずです。私の構成には手作業で追加したエントリがあるので、その構成は測定していません。mcp__xcode__ の名前に対して書いた許可ルールやフックがある場合、プラグインのインストール後に手作業で追加したエントリを削除することは、ドキュメントの命名ルールに従えば、名前の変更にあたります。
権限の層は2つ、インストールが触れるのは1つ
コマンドを承認すると、Claude Code側の話は片づきます。Xcodeは独自の関門を持っており、プラグインディレクトリの中にあるものでは、それを開けられません。このディレクトリには、フックもインストール手順もないからです。
Appleは、実行中のXcodeについて、この関門をドキュメントに記載しています。XcodeのIntelligence設定のModel Context Protocolの下に、「Allow External Agents to Use Xcode Tools」という名前のポップアップメニューがあり、Always、「While Xcode is Open」、Neverを選べます。そして外部エージェントが接続すると、Xcodeはアラートを表示します。10 Xcode 27のリリースノートは、2つ目の構成を説明しています。開いているワークスペースなしで動作するMCPサーバーのプレビューです。これは sudo xcrun mcp-server enable を実行するまではオフのままで、コード署名されたエージェントに、あるディレクトリツリー内のプロジェクトを使う権限を与えられます。11
私のMacは、2つ目の構成で動いています。xcrun mcp-server status は、権限が有効であること、許可されたエージェントが1つ、許可されたフォルダが11個あることを報告します。2 許可されたエージェントは、コード署名で識別されるClaude Codeそのものです。そのため、プラグインが起動するブリッジも同じ許可の対象になると予想しています。これはテストしていません。また、エージェントを1つも許可しておらず、プラグインがブリッジを起動する最初のものであるMacで、Xcodeが何を尋ねるのかも見ていません。
Xcodeが変わると何が変わるのか
固定されたマーケットプレイスのエントリは、カタログが変わったときに変わります。Xcodeのエントリは、Xcodeが変わったときに変わります。私のMacにある3つのXcodeビルド、27.1のリリース候補版(27A9275)、27.2ベータ版(27B5019j)、27.2(27B52)は、3つのディレクトリを生成し、skillsの数はそれぞれ15、15、16でした。27.2ベータ版では、ほかの2つのビルドが app-resizability と呼んでいるskillの名前が uikit-app-modernization になっており、xctrace は27B52にしかありません。2
その仕組みは、セッションごとに1回の実行です。Xcodeを更新するか、別のコピーを選択すると、コマンドは次に実行されたときに別のパスを出力します。プラグインがインストールされ、有効になっていれば、それは通常、次のセッションのバックグラウンド実行です。読み込みリファレンスによると、そのときClaude Codeは、結果を新しいバージョンとしてインストールし、実行中の対話型セッションで、通知とともに再読み込みします。その場での再読み込みがセッションのプロンプトキャッシュを無効にしてしまう場合は、/reload-plugins を実行するよう促します。5 コマンド文字列は同じなので、以前の承認はそのまま有効です。私はプラグインをインストールしていないので、この再読み込みが起きるところは見ていません。
ここから、2つの習慣が導かれます。Xcodeを更新したら、changelogを読むのと同じように、レビュー用の3行をもう一度実行してください。パスはビルドとともに変わるので、1行目から始めます。そして、Xcodeの更新後にエージェント系のコマンドが何も出力しない場合は、まず、自分で開いた覚えのないXcodeを探してください(pgrep -lx Xcode)。私のMacでは、ほかの xcrun agent コマンドがハングしました。そのとき非表示のXcodeが初回起動画面で待っており、これが、より長い記事で私がたどった、可能性の高い原因です。xcrun agent plugin path は、私のどの実行でもハングしませんでした。もし60秒の制限を超えて実行が続いた場合、ドキュメントによれば、インストールや更新は失敗します。4
XcodeをClaude Codeに接続する3つの方法
| 手作業で追加したブリッジ | --plugin-dir、1セッション |
マーケットプレイスからのインストール | |
|---|---|---|---|
| コマンド | claude mcp add --transport stdio xcode -- xcrun mcpbridge |
claude --plugin-dir "$(xcrun agent plugin path --plugin-format claude)" |
claude plugin install xcode@claude-plugins-official |
| Appleのskills | なし | Xcode 27.2では16個 | ディレクトリに従えば、Xcode 27.2では16個 |
| ブリッジのツール | ここでは54個。名前は mcp__xcode__<tool> |
手作業で追加したエントリがあれば、そのエントリのもの。なければプラグイン自身のサーバーのもので、こちらは測定していません | ドキュメントに従えば、同じ |
| 続く期間 | 自分で削除するまで | 1セッション | アンインストールするまで。プラグインが有効な間、コマンドは通常、セッションごとに再び実行されます |
| 自分が了承するもの | 自分で入力したコマンド | 自分で入力したコマンド | カタログが表示するコマンド |
| この記事のために測定したか | はい | はい | 拒否メッセージのみ |
要点
Claude Codeを使うiOS開発者へ:
- まずレビュー用の3行を実行してください。Xcode 27.2では、16個のskillsと1つのMCPサーバーが表示され、フックはありません。2
- インストールは、自分のターミナルから claude plugin install xcode@claude-plugins-official で行い、表示されるコマンドを、カタログにあるコマンド xcrun agent plugin path --plugin-format claude と比べてください。16
- Claude Codeの見積もりでは、セッションがskillを1つも呼び出さないうちから、すべてのセッションに約4,463トークンのskillの説明文が入るものと考えてください。2
すでに手作業で追加したブリッジを使っている開発者へ: - プラグインはAppleのskillsを加えます。Claude Codeはプラグインのサーバーを重複として抑制し、手作業で追加したエントリが残っている間、ツールの名前は今のままです。28 - 翻訳ツールはプラグインを前提としています。String Catalogとローカライズの4つのツールはすべて、プラグインだけが提供する2つのskillsのどちらかを有効にするよう、エージェントに指示します。2
使う前にツールをレビューするチームへ:
- コンテンツを固定するコミットはありません。ディレクトリはXcodeのビルドごとにレビューし、Xcodeの更新はプラグインの更新として扱ってください。14
- --accept-command <sha256> は、スクリプトによるインストールを、レビュー済みの1つのコマンドとカタログに結びつけます。disableCommandPluginSources は、組織全体でこのソースタイプを無効にします。46
マーケットプレイスとプラグインの作者へ:
- command ソースでは、ユーザーのマシン上のツールが発行元になります。Anthropicの公式マーケットプレイスは、そうしたソースを1つずつ名前で受け入れており、固定ルールに対する、リストに記載された免除として扱っています。3
FAQ
Claude Code向けのAppleのXcodeプラグインとは何ですか?
Anthropicの公式Claude Codeマーケットプレイスにある xcode という名前のエントリで、authorは「Apple Inc.」です。このエントリには、プラグインのファイルは入っていません。保存されているのは xcrun agent plugin path --plugin-format claude というコマンドで、私が試した3つのXcode 27ビルドでは、このコマンドが実行されたときに、Xcodeが私のMacにプラグインディレクトリを書き出しました。12
Claude CodeにXcodeプラグインをインストールするにはどうすればよいですか?
自分のターミナルで claude plugin install xcode@claude-plugins-official を実行し、表示されるコマンドを承認します。セッションの中で承認する場所は、拒否されたインストールが出力したメッセージに従えば、/plugin の下にあるプラグインの詳細ペインです。2 エージェントが代わりにコマンドを承認することはできません。Claude Codeは、セッションの中では -y を無視します。6 私自身は、インストールを完了していません。デフォルトのユーザースコープでは、プラグインと、常時読み込まれるそのskillの説明文が、そのマシン上のすべてのプロジェクトに入ります。--scope local は、1つのリポジトリの中で自分だけに限定し、--scope project は、コミット対象の .claude/settings.json にプラグインを記録します。これにより、そのリポジトリで作業する全員に対してプラグインが有効になりますが、各自のマシンには何もダウンロードされないので、共同作業者はそれぞれ、やはりクローンごとに1回インストールを実行することになります。承認はユーザーごとです。各自が、Claude Codeから自分に表示されたコマンドを承認します。私自身の試行では --scope local を使いました。26 あとでプラグインを削除する方法として、同じリファレンスは claude plugin uninstall xcode@claude-plugins-official を示しています。デフォルトのユーザースコープ以外にインストールした場合は、--scope を付けます。6
プラグインには何が入っていますか?
Xcode 27.2(27B52)では、16個のskills、xcrun mcpbridge を実行するサーバーを1つ宣言する .mcp.json、そして3つのフィールドからなるマニフェストです。Claude Codeのインベントリは、エージェントが0、フックが0、LSPサーバーが0と報告しています。2
すでに xcrun mcpbridge 用に claude mcp add を実行している場合、プラグインは必要ですか?
skillsのために必要です。Claude Codeは、プラグインのサーバーを、手作業で追加したサーバーの重複として扱って抑制するので、ツールは変わりません。新しく加わるのはskillsです。そして、ブリッジの4つのツール、つまりString Catalogとローカライズの一式が、まずプラグインのskillを有効にするようエージェントに指示します。28
フォルダには16個あるのに、Claude Codeが一覧表示するskillsが15個なのはなぜですか?
translation-coordinator が user-invocable: false を設定しているからです。Claude Codeは、そうしたskillを / メニューから隠しますが、モデルが呼び出すことは引き続き許しています。9 セッションのskill一覧に出たのは15個で、モデルが報告したのは16個でした。2
プラグインはコンテキストをどれくらい使いますか?
Claude Codeの plugin details は、16個のskillの説明文について、すべてのセッションで約4,463トークンと見積もっています。skillを呼び出すと、さらにかかります。xctrace の約380トークンから、audit-xcode-security-settings の約21,700トークンまでです。この見積もりには、MCPサーバーのツールスキーマは含まれていません。2
インストール後、自分のMacでは何が実行されますか?
ドキュメントとディレクトリに従えば、次の2つです。1つは承認したコマンドで、インストール時と、プラグインが有効な間は通常セッションごとに1回、バックグラウンドで実行されます。もう1つは xcrun mcpbridge のサーバープロセスで、セッションがそれに接続したときに実行されます。このディレクトリにフックはありません。25 それ以外はすべて、ブリッジのツールへの呼び出しか、skillのテキストです。ツールへの呼び出しは、権限ルールの対象です。skillのテキストについて、セキュリティページは、指示としてClaudeのコンテキストに入り、Claudeがすでに持っているツールで何をするかを方向づけると述べています。7 1つだけあるPythonスクリプトは audit-xcode-security-settings の中にあり、エージェントが実行した場合にだけ動きます。それもまた、権限ルールの対象となるツール呼び出しです。
どのXcodeが必要ですか?
xcrun agent plugin は、私のMacにある3つのビルドすべてで応答しました。27.1のリリース候補版(27A9275)、27.2のベータ版(27B5019j)、27.2(27B52)です。それより前のXcodeは試しておらず、AppleのXcode 27のリリースノートは、どれもこのコマンドに触れていません。211
私が測定したこと
1台のMacで、2026年11月10日と11日に測定しました。数値は、AppleやAnthropicのドキュメントとしてではなく、1人の開発者の観察として扱ってください。2
- Macとツール: macOS 27.0(26A428)、選択中のXcodeは27.2(27B52)、Claude Code 2.1.322。XcodeのヘッドレスMCPモードはオンでした。
- カタログ:
anthropics/claude-plugins-officialのコミット43fd1f9。両日ともheadでした。 - セッションなしで読んだもの:
xcrun agent plugin path --plugin-format claudeが出力するディレクトリ、claude --plugin-dir <dir> plugin details、claude plugin validate、そして種類別のファイル数。 - セッション: 空のプロジェクトでの、単一プロンプトの
claude -pセッション4つ。どれも保存していません。3つは--plugin-dirでプラグインを読み込みました。1つは手作業で追加したブリッジだけを持ち、Claude Codeのツール検索にブリッジのツールを問い合わせました。ブリッジのツールを呼び出したセッションはありません。 - インストール: ターミナルのないシェルで、設計どおりに拒否されました。私はこのコマンドを一度も承認していません。
- ツールの説明文: 対話型のClaude Codeセッションが、手作業で追加したブリッジからツール検索を通じて読み込んだ、54個のツールスキーマ。このセッションはツールを呼び出していません。
- 不在の確認: Appleの開発者向けニュース、リリース、ニュースルームの各フィード、AppleのXcodeページ、Anthropicのニュースページ、Claudeブログ。11月11日に取得し、このプラグインについて検索しました。
- 未検証: 対話型のプロンプトと詳細ペイン。マーケットプレイスからのインストール後のすべて(バックグラウンド実行、Xcode更新後の再読み込み、バージョン文字列を含む)。手作業で追加したエントリがない状態で動く、プラグイン自身のサーバー。プラグインのブリッジが、Xcodeの見る最初のエージェントである場合に、Xcodeが何を尋ねるか。セッションの測定については、27B52以外のXcode。ヘッドレスモードがオフのMac。
skillsそのもの、Xcodeから外へ出る2つ目の経路(xcrun agent skills export)、そしてXcode 27.2で私が遭遇したハングについては、Xcode 27、どこへでもエクスポートできるagent skillsを搭載にあります。2つのMCPサーバーがClaude CodeをiOSビルドシステムに変えたは手作業で追加したブリッジを扱い、MCPサーバーは新たな攻撃対象領域は、サーバーのツール一覧に目を通す価値がある理由を扱っています。セットアップの全体は、iOSエージェント開発ガイドにあります。
参考文献
-
Anthropic,
anthropics/claude-plugins-official,.claude-plugin/marketplace.jsonat commit 43fd1f9(2026年11月10日に閲覧し、11月11日に再び閲覧。その時点でも、このコミットがheadでした)。xcodeエントリと、各種の数の出典です。317個のプラグインのうち、163個がurlソース、99個がgit-subdirソースで、そのすべてにshaフィールドがあります。54個はリポジトリ内のパスで、1個がcommandソースです。このエントリを追加したのはプルリクエスト #6338です。2026年9月30日に開かれ、2026年11月6日00:55 UTCにマージされた、1つのファイルへの15行です。その説明文には、チェックを実行できるように、#6259 の変更をリポジトリの内側のブランチへ移すとあります。11月9日のコメントは、既存のXcode MCPサーバーに対して、この掲載が何を加えるのかを尋ねています。プルリクエスト #6259「Add Xcode plugin (xcode)」は、2026年9月18日23:12 UTCに開かれました。このリポジトリはAnthropicのチームメンバーからのコントリビューションだけを受け付けるという自動返信があり、23:31 UTCに変更を了承するレビューが付き、2026年11月6日00:58 UTCに重複としてクローズされています。 ↩↩↩↩↩↩↩↩↩↩↩ -
筆者による測定と確認(2026年11月10日と11日、「私が測定したこと」に挙げたマシンとバージョンで実施)。出典は次のとおりです。
xcrun agent plugin path、claude plugin install(--jsonありとなし)、claude --plugin-dir <dir> plugin details、claude plugin validate、claude --help、xcrun mcp-server statusの出力。プラグインディレクトリの内容(各skillのヘッダーと、ブリッジの54個のツール名についての全skillファイルの検索を含む)。4つの単一プロンプトのClaude Codeセッションの開始イベントとデバッグログ。対話型セッションが受け取った、ブリッジの54個のツールの説明文。コマンド文字列のSHA-256。そして、「不在の確認」に挙げたページの保存済みコピー。数は、これらの出典から得たファイル数、フォルダ数、ツール名の数です。トークンの数値は、Claude Codeの見積もりです。 ↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩ -
Anthropic,
anthropics/claude-plugins-official, プルリクエスト #7015「ci(validate-plugins): re-pin validator and allow the xcode command source」(2026年11月6日に開かれてマージ。00:49 UTCと00:53 UTC)。Xcodeのエントリに対するバリデーターの3つの不合格、command-exempt: "xcode"の設定、そして免除される名前の1つ1つを、マーケットプレイス運用の承諾が必要な「listing decision」と呼ぶワークフローのコメントの出典です。 ↩↩↩↩ -
Anthropic, Claude Code documentation, Marketplace referenceの「command plugin source」と「Copy mode and link mode」のセクション(2026年11月11日に取得)。
commandソースを使う場面とそのIDEの例、1行出力の取り決め、デフォルトで60秒のtimeout、インストールや更新が失敗する条件、linkモードがディレクトリをその場で読み込み、バージョンをパスと最上位のエントリから導くこと、そしてdisableCommandPluginSources設定の出典です。 ↩↩↩↩↩↩↩↩ -
Anthropic, Claude Code documentation, Plugin loading referenceとHost and maintain a marketplace(2026年11月11日に取得)。commandソースが再び実行されるタイミング(インストールまたは更新のたび、およびセッションごとに1回バックグラウンドで)、出力が変わったときの再読み込み、プラグインのエントリ名とマニフェスト名の違い、そしてClaude Codeはユーザーが承認したコマンドそのものだけを実行するというルールの出典です。 ↩↩↩↩↩↩
-
Anthropic, Claude Code documentation, Plugin commands reference(2026年11月11日に取得)。
Run this command now? [y/N]というプロンプト、Claude Codeのセッションの中では-yが無視されること、ターミナルが接続されていないときの拒否、そして--accept-command <sha256>とshownCommandオブジェクトの出典です。バージョンと日付はClaude Code changelogによります。commandソースは2.1.229(2026年8月12日)、--accept-commandは2.1.271(2026年9月14日)です。各インストールスコープの範囲は、同じ日に取得したInstall and manage pluginsによります。 ↩↩↩↩↩↩↩↩↩↩↩ -
Anthropic, Claude Code documentation, Plugin security and trust(2026年11月11日に取得)。プラグインが自ら実行できるもの、権限ルールがClaudeのツール呼び出しを対象とし、プラグイン自身のプロセスは対象としないこと、MCPサーバーがサンドボックスの外で動くこと、そして
claude --plugin-dir <plugin directory> plugin details <plugin name>を含むレビュー手順の出典です。 ↩↩↩↩↩↩ -
Anthropic, Claude Code documentation, Connect Claude Code to tools via MCPの「Scope hierarchy and precedence」のセクション、およびAdd components to a plugin(2026年11月11日に取得)。優先順位、プラグインがエンドポイントによって重複として照合されること、そしてプラグインのサーバーとツールの名前の出典です。 ↩↩↩↩↩
-
Anthropic, Claude Code documentation, Extend Claude with skills(2026年11月11日に取得)。
user-invocable: falseがskillを/メニューから隠し、それでもClaudeからは呼び出せること、そしてプラグインのskillsが/plugin-name:skill-nameという名前空間付きの名前になることの出典です。 ↩↩↩ -
Apple, Giving external agents access to Xcode(2026年11月11日に取得。11月10日の私のコピーから変わっていません)。「Allow External Agents to Use Xcode Tools」設定とその3つの選択肢、外部エージェントが接続したときのアラート、そしてドキュメントに記載されたセットアップとしての
claude mcp add --transport stdio xcode -- xcrun mcpbridgeの出典です。その日の時点で、このページはプラグインに触れていませんでした。 ↩↩↩ -
Apple, Xcode 27 Release Notes(2026年11月11日に取得)。開いているXcodeワークスペースなしで動作するMCPサーバーのプレビュー、
sudo xcrun mcp-server enable、そしてコード署名されたエージェントへの、ディレクトリツリー内での権限付与の出典です。このページと、Xcode 27.1、27.2、27.3ベータ版のリリースノートをxcrun agentで検索しましたが、一致するものはありませんでした。 ↩↩ -
Anthropic, Claude Code documentation, Publish and distribute a plugin(2026年11月11日に取得)。公式マーケットプレイスが、プラグインディレクトリのポータルを通じた提出を受け付けていないことの出典です。 ↩