Xcode26.3 でMCPが追加されClaude CodeからSwiftUIのレンダリングができるようになった
はじめに
Xcode 26.3(RC)からMCP(Model Context Protocol)に対応しました。
これによりClaude CodeからXcodeを直接操作できるようになり、SwiftUIのプレビューレンダリングやビルド、テスト実行などがターミナルから可能になりました。
今回はSwiftUIのプレビューレンダリングを試してみたので、使い方とフックを使った自動化についてまとめます。
前提
MCPの追加方法
1. XcodeでMCPを有効化
Xcodeの設定でMCPサーバーを有効にします。
- Xcode > Settings を開く
- サイドバーから「Intelligence」を選択
- 「Model Context Protocol」の「Xcode Tools」をオンにする

2. エージェントにMCPを追加
ターミナルで以下のコマンドを実行します。
Claude Codeの場合
claude mcp add --transport stdio xcode -- xcrun mcpbridge
Codexの場合
codex mcp add xcode -- xcrun mcpbridge
追加できたか確認します。
claude mcp list # または codex mcp list
詳細は公式ドキュメントを参照してください。
動作環境の注意
いくつかハマったポイントがあるので共有します。
-
Xcodeを起動しておく必要がある
- MCPはXcodeと通信するため、Xcode26.3が起動していないとツールが使えません
-
macOSのバージョン制限がありそう
- 公式の記載は見つけられなかったのですが、macOS 26.0ではClaude Code起動時に表示されるはずのXcodeの認証ダイアログが表示されませんでした
- macOS 26.2にアップデートしたところ、ダイアログが表示されて正常に動作するようになりました
やったこと
Xcode MCPで何ができるか
Claude Codeから以下の操作ができます。
| 操作 | ツール名 |
|---|---|
| プレビューレンダリング | RenderPreview |
| ビルド | BuildProject |
| テスト実行 |
RunAllTests / RunSomeTests
|
| ビルドログ取得 | GetBuildLog |
| エラー確認 | XcodeListNavigatorIssues |
| ファイル操作 |
XcodeRead / XcodeWrite / XcodeLS など |
| ドキュメント検索 | DocumentationSearch |
SwiftUIのプレビューをレンダリングする
試しにログイン画面をレンダリングしてみます。
ログイン画面をレンダリングして
Claude Codeが RenderPreview を呼び出して、プレビューのスナップショットが生成されます。
{
"previewSnapshotPath": "/var/folders/.../RenderPreview_result_2026-02-04T093024Z@3x.png"
}
スナップショットは一時ディレクトリに保存されるので、必要に応じて open コマンドで確認できます。
フックでスナップショットを自動保存する
毎回一時ディレクトリから画像を探すのは面倒なので、RenderPreview 実行後に自動でプロジェクト内に保存されるようにしました。
Claude Codeのフック機能を使います。
~/.claude/settings.json
{
"hooks": {
"PostToolUse": [
{
"matcher": "mcp__xcode__RenderPreview",
"hooks": [
{
"type": "command",
"command": "~/.claude/hooks/save-preview-snapshot.sh"
}
]
}
]
}
}
~/.claude/hooks/save-preview-snapshot.sh
#!/bin/bash
INPUT=$(cat)
# ソースファイルパスを取得
SOURCE_FILE=$(echo "$INPUT" | jq -r '.tool_input.sourceFilePath // empty')
# スナップショットパスを取得
# tool_response[0].text にJSONが文字列として入っている
RESPONSE_TEXT=$(echo "$INPUT" | jq -r '.tool_response[0].text // empty')
SNAPSHOT_PATH=$(echo "$RESPONSE_TEXT" | jq -r '.previewSnapshotPath // empty')
CWD=$(echo "$INPUT" | jq -r '.cwd // empty')
if [ -z "$SOURCE_FILE" ] || [ -z "$SNAPSHOT_PATH" ]; then
exit 0
fi
if [ ! -f "$SNAPSHOT_PATH" ]; then
exit 0
fi
# View名を抽出
VIEW_NAME=$(basename "$SOURCE_FILE" .swift)
# Snapshotsディレクトリに保存
SNAPSHOT_DIR="${CWD}/Snapshots"
mkdir -p "$SNAPSHOT_DIR"
OUTPUT_PATH="${SNAPSHOT_DIR}/${VIEW_NAME}.png"
cp "$SNAPSHOT_PATH" "$OUTPUT_PATH"
echo "Snapshot saved: ${OUTPUT_PATH}" >&2
exit 0
動作確認
フック設定後、Claude Codeを再起動して RenderPreview を実行すると、自動的に Snapshots/ ディレクトリにView名でスナップショットが保存されます。
Snapshots/
└── LoginView.png
活用できそうな場面
-
UI実装のフィードバックループ高速化
- 「ログイン画面作って」→ 実装 → レンダリング → 「ボタンをもう少し大きく」→ 修正 → レンダリング
- Xcodeを見に行かなくてもターミナル上で完結する
-
スナップショットテストの素材生成
- フックでView名ごとに画像を保存しておけば、VRT(Visual Regression Testing)の比較元として使える
- PR作成時に自動でスナップショットを更新する運用もできそう
-
デザインレビュー用の画像生成
- 実装したViewのスナップショットをまとめて出力してデザイナーに共有
- Figmaとの差分確認に使える
-
ドキュメント用のスクリーンショット
- READMEやWikiに載せる画像を自動生成
- UIが変わったら再レンダリングして更新
-
PR作成時にUIのスクリーンショットを添付
- Claude CodeにPRを作らせる際、変更したViewのスナップショットをPRの説明に貼れる
- レビュアーがXcodeを開かなくてもUIの変更内容がわかる
おわり
AppleはかなりAI関連に遅れている印象がありましたが、今回のMCPの追加は開発フローがまた変わるようなインパクトがある気がしました。
今回紹介したSwiftUIのレンダリング以外にも便利そうなツールがあるので正式リリースされた際にはすぐに開発環境のアップデートをしたいと思いました。
Discussion