Claude Codeに"ビルドボタンを押す仕事"も任せたら開発体験が変わった

Claude Codeでコードを書かせているのに、 ビルドだけ手動だった 。その問題をどう解決したか、そしてその先にあった変化について書く。


なぜXcodeを開きたくないのか

自分の開発環境はちょっと変わっている。

自宅にはMac miniとMacBook Airの2台があるが、 開発環境はminiにしかない 。Airは8GBメモリで、Xcodeを動かすには心もとない。だからAirからminiにSSHで接続して、Claude Codeを動かしている。今この記事を書いている瞬間もそうだ。

この構成で困るのがビルドとデバッグだ。コードはClaude Codeが書いてくれる。テストも走らせてくれる。でも アプリをビルドして実機で動かす となると、Xcode上でボタンを押す必要がある。miniにしかXcodeはないから、それをやるにはリモートデスクトップでminiの画面を開かなければならない。

Airが貧弱だからSSHで軽量に繋いでいるのに、リモートデスクトップを開いたら本末転倒だ。

そしてふと思った。 「コードを書くのはClaudeに任せられているのに、なんでビルドするのに自分がボタン押してんだ?」


/xrun — コマンド一発でビルド&実機デバッグ

そこで作ったのが /xrun というClaude Codeのスキルだ。Xcode Run の略だ。

Claude Codeの「スキル」とは、よく使う操作をテンプレート化して /コマンド名 で呼び出せる仕組みだ。Markdownファイルに手順を書いておくと、Claudeがその通りに実行してくれる。シェルスクリプトと違って、曖昧な指示も文脈から判断してくれるのがポイントだ。

やっていることはシンプルで、 コマンドラインからXcodeプロジェクトをビルドして、指定したデバイスにデプロイする 。引数でデバイスを指定できる。

  • /xrun ipad — iPadにデプロイ
  • /xrun iphone — iPhoneにデプロイ
  • /xrun mac — Macアプリとして起動
  • /xrun watch — Apple Watchにデプロイ

SSHのターミナルから /xrun ipad と打てば、手元のiPadでアプリが立ち上がる。リモートデスクトップもXcodeのGUIも不要だ。

作るのに苦労したかというと、していない 。Claudeに「コマンドラインからiPadにビルド&デプロイしたい」と伝えたら作ってくれた。いろんなプロジェクトで汎用的に使いたいからグローバルスキルとして配置している。どのリポジトリからでも呼べる。


ログ監視の自動化が変えた開発体験

/xrun を使い始めて気づいたのが、 ログ監視が思ったより面倒だったということだ。

これまでのデバッグフローはこうだった。

  1. Xcodeでビルド&実行
  2. アプリを操作して不具合を確認
  3. Xcodeのコンソールからログをコピー
  4. Claude Codeに貼り付けて「これ何がおかしい?」と聞く

ログのコピペ。地味だけど毎回やっていた作業だ。

これが面倒だと気づいた。そもそもログを見るためにまたXcodeを立ち上げる必要があるじゃないか、と。そこで /xrun にログ監視機能を追加した。アプリ起動と同時にログの監視も始まる。だからClaude Codeは アプリが吐くログをリアルタイムで見ている 。「画面遷移がおかしい」と伝えると、Claudeは「確かにログを見ると遷移時にこのエラーが出ていて——」と返してくれる。

先回って情報が伝わっている感じがすごくいい。 例えるなら、攻殻機動隊で少佐が「バトー!現場に急げ!」と言ったら「もう向かってる!」と返ってくる、あの感じだ。

よくAIとの開発で「人間がボトルネックになる」と言われるが、まさにログをコピペするという仕事がそうだった。それがひとつ消えた。しかも自分が意識的にコピーした部分だけでなく、 自分が気づかない部分もClaudeが拾ってくれるようになる 。まだ実際に潜在バグを見つけてもらった経験はないが、構造的にそうなるはずだと思っている。


ソファでiPadを見ながら開発する

もうひとつ、地味だけど大きな変化がある。 家族との時間を取りやすくなった

SSHで開発しているから、MacBook Airさえあればどこでも作業できる。/xrun ipad でiPadにデプロイできるから、ソファに座りながらデバッグができる。妻が「ぽこ あ ポケモン」をしている隣で、自分はiPadでアプリの動作確認をしている。そういう開発スタイルが可能になった。

開発環境がリビングに出てこられるようになった、という感覚だ。


おわりに

/xrun を使い始めてまだ1日しか経っていない。だからこの記事は「劇的に生産性が上がりました!」という結論ではなく、 「地味だけどめっちゃよくなったと思ってる」という正直な手応え の話だ。

自分が伝えたいのはひとつ。

面倒だと思ったら、自動化できないかClaudeに気軽に聞いてみてほしい。

「Xcodeのビルドボタンを押す」なんて、手動でやるのが当たり前だと思い込んでいた。でも聞いてみたらあっさり解決した。開発における「当たり前の手間」は、もう当たり前じゃないのかもしれない。


付録: /xrun スキルの全文

以下が実際に使っている /xrun スキルのSKILL.mdだ。Claude Codeの ~/.claude/skills/xrun/SKILL.md に置いている。デバイスIDはマスクしてあるので、自分の環境に合わせて書き換えてほしい。

---
name: xrun
description: Xcodeプロジェクトを実機・シミュレータ・ Macでビルド&起動する汎用スキル。`/xrun ipad`、`/xrun iphone`、`/xrun sim`、`/xrun mac`、`/xrun watch`。引数なしはプロジェクトのプラットフォームから自動判定。
---

# xrun - Xcode汎用ビルド&実行スキル

任意のXcodeプロジェクトをビルド・インストール・起動する。

## 使い方

- `/xrun` → プロジェクトのプラットフォームに応じたデフォルトデバイスで実行
- `/xrun ipad` → iPad実機
- `/xrun iphone` → iPhone実機
- `/xrun watch` → Apple Watch実機
- `/xrun sim` → シミュレータ(プラットフォームに応じて自動選択)
- `/xrun mac` → My Mac

## デバイス情報

| デバイス | xcodebuild ID | devicectl ID |
|---------|---------------|--------------|
| iPad | `{your-xcodebuild-id}` | `{your-devicectl-id}` |
| iPhone | `{your-xcodebuild-id}` | `{your-devicectl-id}` |
| Apple Watch | `{your-xcodebuild-id}` | `{your-devicectl-id}` |

## 実行手順

### Step 0: プロジェクト自動検出

1. xcodeproj / xcworkspace: カレントディレクトリ以下を探す。
   `.xcworkspace` があればそちらを優先(`-workspace`)、
   なければ `.xcodeproj`(`-project`)を使う。

2. スキーム: 検出したプロジェクトからスキーム一覧を取得。1つならそのまま、
   複数ならユーザーに選択を促す。

3. Bundle ID と Product Name: ビルド設定から取得。

### Step 1: デフォルトデバイス判定(引数なしの場合)

`-showdestinations` の最初の `platform:` でプロジェクトの
主要プラットフォームを判定する:

| 検出されたplatform | デフォルトターゲット |
|---|---|
| iOS | ipad(iPad実機) |
| macOS | mac |
| watchOS | watch(Apple Watch実機) |

### Step 2: ビルド

タイムアウト: 300秒(5分)

各プラットフォーム共通で `xcodebuild` を使用。
`-destination` でターゲットを指定し、
`-derivedDataPath build` でビルド成果物をローカルに出力する。

### Step 3: インストール&起動

- iOS/watchOS実機: `xcrun devicectl` でインストール・起動
- シミュレータ: `xcrun simctl` でインストール・起動
- macOS: バイナリを直接実行してstderrをキャプチャ
  (`open` ではなく直接実行するのがポイント——
  NSLogの内容をそのまま取得できる)

### Step 3.5: ログ監視

アプリ起動と同時に `log stream` をバックグラウンドで起動。
Claude Codeがリアルタイムでログを監視し、「ログ見せて」で蓄積されたログを確認できる。

watchOSは `log stream --device` が不安定なためスキップ。

### Step 4: 結果報告

成功時: 「{scheme}を{デバイス名}で起動しました。
ログ監視中 — いつでも『ログ見せて』で確認できます」と報告。
失敗時: エラー内容を表示し、対処法を提案。

デバイス情報の部分は xcrun devicectl list devices で自分の環境のIDを取得して書き換えるか、Claude Codeに埋めてもらうように依頼すればいい。

manulma @manulma

エンジニア/プロダクト開発/組織開発/コーチング。趣味はカメラとドライブと子育て