Xcode 27 の公式スキルを Claude Code から使ってみた
はじめに
Xcode 27 には AI エージェント向けの便利なスキルが色々と同梱されています[1]。
これらは Xcode 内蔵の AI コーディングアシスタントが参照しているもの[2]で、xcrun agent コマンドを使うと Claude Code 用のプラグインとして取り出せます。
本記事では、このプラグインを Claude Code に読み込み、実際に一部のスキルを試していきます。
プラグインとして読み込む
xcrun agent plugin path を実行すると、Claude Code 用のプラグインが生成されます。
xcrun agent plugin path --plugin-format claude
/Users/username/Library/Developer/Xcode/CodingAssistant/ExportedPlugins/27A266a/claude
生成されたディレクトリの構成は以下の通りです。スキルに加えて、Xcode MCP を登録する .mcp.json も含まれています。
claude
├── .claude-plugin/
│ └── plugin.json
├── .mcp.json
└── skills/
このパスを環境変数 CLAUDE_CODE_PLUGIN_DIRS に設定しておくと、Claude Code の起動時にプラグインが自動で読み込まれます。~/.zshrc などに以下を追加します。
export CLAUDE_CODE_PLUGIN_DIRS="$(xcrun agent plugin path --plugin-format claude)"
読み込んだスキルには xcode-integration: という接頭辞が付き、Xcode MCP は plugin:xcode-integration:xcode という名前で接続されます。
同梱されているスキルの一覧
| スキル名 | 内容 |
|---|---|
| audit-xcode-security-settings | セキュリティ関連のビルド設定を監査し、段階的に有効化する |
| app-intents-whats-new-27 | iOS 26 / 27 で追加・変更された App Intents の API |
| device-interaction | 実機やシミュレータを操作し、アプリの動作を確認する |
| adopt-c-bounds-safety | C 言語の境界安全性拡張 -fbounds-safety の導入 |
| swiftui-specialist | SwiftUI のベストプラクティスとパフォーマンス |
| app-intents-specialist | App Intents のベストプラクティス |
| modernize-tests | XCTest から Swift Testing への移行 |
| uikit-app-modernization | UIKit アプリのマルチウィンドウ対応 |
| swiftui-whats-new-27 | iOS 27 で追加・変更された SwiftUI の API |
| building-document-based-swiftui-applications | Document プロトコルを使ったドキュメントベースアプリの構築 |
| accessibility-dynamic-type-specialist | Dynamic Type 対応の監査 |
| accessibility-voiceover-specialist | VoiceOver 対応の監査 |
| accessibility-sufficient-contrast-specialist | コントラスト比の監査 |
| translation | String Catalog の文字列の翻訳 |
| translation-coordinator | プロジェクト全体の翻訳作業の取りまとめ |
ちなみに translation-coordinator は user-invocable: false なので、手動では呼び出せません。エージェントが必要に応じて読み込むスキルのようです。
Claude Code で使ってみる
iOS 27 の新機能を使った実装を比較する
生成されるコードを swiftui-whats-new-27 の有無で比較してみましょう。このスキルには iOS 27 の新機能情報が入っているので、iOS 27 対応の実装をより簡単に行えるはずです。
題材は ScrollView でのスワイプアクションにしました。iOS 27 から、swipeActions は List 以外のスクロールコンテナでもコンテナ側に swipeActionsContainer() を付ければ動作するようになっています。これまでスワイプアクションは List 専用だったため、それ以外でスワイプアクションを使うには自前で実装する必要がありました。
叩き台として ScrollView と LazyVStack で 3 行のリストを表示するだけの StickerListView.swift を用意し、これを元にして Claude Code に以下のプロンプトで実装させます。
claude -p 'StickerListView.swift の ScrollView と LazyVStack で作ったリストの各行にスワイプで削除するアクションを付けてください。デプロイメントターゲットは iOS 27 です。'
結果は以下の通りです。
| 項目 | スキルなし | スキルあり |
|---|---|---|
| 実装内容 | DragGesture や UIGestureRecognizerRepresentable を使った独自の実装 |
swipeActions と swipeActionsContainer() |
| 行数 | 160 行 | 31 行 |
| 所要時間 | 81 秒 | 17 秒 |
スキルを使用した場合はちゃんと iOS 27 の新機能を使って実装できており、行数も少なく済んでいますね。
一方、スキルなしの場合は、以下のようなことを言ってスワイプの操作をゼロから実装していました。まだ iOS 27 の知識が十分にインプットされていないことがわかります。
私が把握している範囲では、SwiftUI 標準の `.swipeActions` は `List` の行でしか動作せず、`ScrollView` と `LazyVStack` の組み合わせではエラーにならないまま何も起きません。iOS 27 でこの制限が変わったかは確認できていないため、どの OS バージョンでも動く独自実装にしました。
ビルド設定レビュー
Hello World を表示するだけの簡単な iOS アプリを作成し、audit-xcode-security-settings でビルド設定をレビューさせてみます。
このスキルと次の device-interaction は Xcode MCP を使うため、Xcode でプロジェクトを開いた状態で実行します。初回は Xcode 側でエージェントの利用を承認する必要があります。
claude -p 'Xcode で開いている SampleApps.xcodeproj の SecApp ターゲットについて、セキュリティ関連のビルド設定をレビューし、推奨される設定を有効化してください。'
すると、以下のような問題が見つかりました。
ENABLE_ENHANCED_SECURITYが既定値のNOのままで、Enhanced Security の保護機能が無効になっている- Pointer Authentication が無効で、
arm64のスライスしかビルドされていない - Entitlements ファイルがなく、実行時の保護機能が設定されていない
そのまま Claude Code に修正を依頼すると、問題をスムーズに解消することができました。
なお、レビューの内容と理由はプロジェクト直下の xcode-security-settings.md に記録されます。次回レビューでは、このファイルを読んで以前の判断を引き継ぐ手順になっています。
シミュレータで動作を確認する
device-interaction はサブエージェント用のスキルで、UI の実装後に画面の表示やジェスチャ操作などを実際に確かめる用途に使えます。対応している端末は iOS、watchOS、tvOS 27.0 以降のシミュレータです。
試しに iOS のカウンターアプリを用意し、スキルが本当に画面を見ているか確認するために意図的な不具合を入れました。値が 2 のときだけ + ボタンで値が 4 になります。
Button("+") { count = count == 2 ? 4 : count + 1 }
それでは、以下のようなプロンプトでチェックを依頼してみます。
claude -p 'CounterApp.xcodeproj を Xcode で開き、iPhone 18 Pro のシミュレータでアプリを起動してください。+ ボタンを 3 回押すと「Count: 3」と表示されることを、実際に画面を操作して確認してください。'
すると実際にシミュレータが立ち上がり、自動で操作されていきます。最終的に以下のような出力が得られました。
確認の結果、期待どおりの動作にはなっていませんでした。+ ボタンを 3 回押した後の表示は「Count: 3」ではなく「Count: 4」でした。
| 操作 | 表示 |
|---|---|
| 起動直後 | `Count: 0` |
| 1 回目のタップ後 | `Count: 1` |
| 2 回目のタップ後 | `Count: 2` |
| 3 回目のタップ後 | `Count: 4` |
## 原因
`CounterApp/CounterApp.swift:19` で、値が 2 のときだけ 3 ではなく 4 を代入しています。
ボタンを押すごとに画面を確認し、不具合と原因のコードまで特定できていました!
まとめ
Xcode 27 に同梱されたスキルをプラグインとして読み込み、Claude Code から使ってみました。
特に Xcode MCP と組み合わせるスキルでは、ビルド設定の変更やシミュレータの操作まで Claude Code から実行でき、スムーズで非常に体験が良かったです。
iOS アプリを AI 駆動で開発している方はぜひ試してみてください。










