◉CLAUDE LABEN
●2.1.301 — vim の % モーション、VS Code パネルでの LaTeX 数式表示、使用量上限待ちのリトライ監視の上限が入りました(10/15)●2.1.299 — 200K トークン超で約54分放置した会話はアイドル圧縮。MCP の許可ルールは名指ししたサーバーだけに一致します●SONNET 4.5 — Claude API での提供終了は 11/30、残り45日。移行先は Sonnet 5.5●WINDOWS — 日本語の環境でだけフックが黙って壊れる報告があり、文字コードの確認が呼びかけられています●FAST MODE — Opus 5.5 の Fast mode がリサーチプレビューを終え、ベータヘッダーが不要になりました(10/15)●NEW — Cowork に渡したフォルダの先頭に、十行の約束ファイルを置いてみました●2.1.301 — vim の % モーション、VS Code パネルでの LaTeX 数式表示、使用量上限待ちのリトライ監視の上限が入りました(10/15)●2.1.299 — 200K トークン超で約54分放置した会話はアイドル圧縮。MCP の許可ルールは名指ししたサーバーだけに一致します●SONNET 4.5 — Claude API での提供終了は 11/30、残り45日。移行先は Sonnet 5.5●WINDOWS — 日本語の環境でだけフックが黙って壊れる報告があり、文字コードの確認が呼びかけられています●FAST MODE — Opus 5.5 の Fast mode がリサーチプレビューを終え、ベータヘッダーが不要になりました(10/15)●NEW — Cowork に渡したフォルダの先頭に、十行の約束ファイルを置いてみました
記事一覧/Claude Code
⟐ Claude Code/2026-06-03上級

Claude Code で .xcresult を解析し、iOS テスト失敗を最短で特定する実装メモ

Xcode 16 で xcresulttool のレガシー JSON が廃止され、.xcresult からテスト失敗を機械的に取り出す手順が変わりました。新しい test-results フォーマットを jq で整形し、Claude Code に渡して失敗原因と該当コードまで一気に絞り込む実装を、6アプリ並行運用の実体験とともにまとめます。

claude-code132ios14xcresultxcodebuildxctestci-cd8テスト自動化4swift

✦ プレミアム記事

iOS のテストが CI で落ちたとき、いちばん時間を溶かすのは「なぜ落ちたか」ではなく「どこを見れば落ちた理由が書いてあるか」を探す数分だと感じています。Xcode の GUI でテストナビゲータを開けば失敗箇所は分かりますが、CI のログには大量の行が流れ、手元には .xcresult というバンドルだけが残ります。このバンドルは中身が見えず、ダブルクリックで Xcode が開くのを待つしかありません。

私は壁紙系や癒し系の iOS / Android アプリを 2014 年から個人で開発していて、App Store と Google Play を合わせた累計ダウンロードは 5,000 万を超えました。2026 年 5 月からは 6 アプリを並行で StoreKit 2 へ移行しています。移行のたびに課金まわりのテストがまとめて落ち、.xcresult を一つずつ Xcode で開いて確認する作業に半日近く奪われたことがありました。この「失敗の中身を取り出す」工程こそ、Claude Code に任せて一気に短縮できる部分です。

ところが厄介なことに、Xcode 16 で xcresulttool のレガシー JSON 出力が非推奨になり、これまで多くの記事やスクリプトが前提にしていた xcresulttool get --format json がそのままでは使えなくなりました。ここでは新しい test-results 系のサブコマンドを起点に、失敗テストだけを抜き出して Claude Code に渡し、原因の仮説と修正候補までを返させる実装を組み立てていきます。

.xcresult の中に何が入っているのか

.xcresult は単なるログファイルではなく、テスト結果・コードカバレッジ・スクリーンショットなどの添付ファイル・ビルド診断をまとめた SQLite ベースのバンドルです。Finder では一つのファイルに見えますが、実体はディレクトリで、中を直接読むことは想定されていません。読み出しには xcrun xcresulttool を使うのが公式の方法です。

ここで最初の落とし穴があります。Xcode 15 までは次のコマンドでルートオブジェクトを取得し、そこから ID を辿ってテスト結果を掘っていく方式が一般的でした。

# Xcode 15 までの旧方式(Xcode 16 で非推奨の警告が出る)
xcrun xcresulttool get --path Result.xcresult --format json

このコマンドは Xcode 16 でも当面動きますが、--legacy を付けないと非推奨の警告が出るようになり、出力構造も将来的に保証されません。何より、このルート JSON は階層が深く、テスト一覧にたどり着くまでに actions → actionResult → testsRef の id を取り出して再度 get を呼ぶ、という多段の参照が必要でした。スクリプトが壊れやすく、Claude Code に渡すにも前処理が重すぎます。

旧方式と新方式の違いを Before / After で見る

Xcode 16 では、テスト結果に特化した test-results サブコマンドが追加されました。これが今回の主役です。多段参照なしに、テストの集計と個別結果をフラットな JSON で直接取得できます。

# Before: ルートを取得して id を辿る(参照を2〜3回繰り返す)
ROOT=$(xcrun xcresulttool get --legacy --path Result.xcresult --format json)
TESTS_REF=$(echo "$ROOT" | jq -r '.actions._values[0].actionResult.testsRef.id._value')
xcrun xcresulttool get --legacy --path Result.xcresult --id "$TESTS_REF" --format json
# → さらにネストを辿らないと個別テストのアサーション文に届かない
# After: テスト結果を直接フラットに取得(Xcode 16+)
# サマリ(全体の合否・件数・実行時間)
xcrun xcresulttool get test-results summary --path Result.xcresult
# 個別テストの一覧(失敗メッセージ・ファイル行番号まで含む)
xcrun xcresulttool get test-results tests --path Result.xcresult

test-results tests の出力は、テストプラン → テストバンドル → テストスイート → 個別テストという木構造を持ち、各ノードに result(Passed / Failed など)が入っています。失敗したテストのノードには、アサーションの失敗メッセージとソースの参照(ファイルと行)が含まれます。旧方式で何度も get を呼んでいた部分が、実質 1 コマンドで済むようになったのが大きな違いです。

✦

ここまでお読みいただきありがとうございます。

この記事の続きを読む

この先には、実装コードやベンチマーク結果など、実務でお役に立てる内容をご用意しています。このサイトは広告を掲載しておらず、サーバーや開発にかかる費用はメンバーの皆様のご支援で成り立っています。もしお役に立てていましたら、ご支援いただけますと大変ありがたいです。

この記事で得られること
✦Xcode 16 で挙動が変わった xcresulttool の新フォーマット(test-results summary/tests)を jq で失敗テストだけに絞り込み、Claude Code が読みやすい最小の JSON に整形する具体的なコマンドが手に入ります
✦失敗したテスト名・アサーション文・ファイル行番号を構造化して渡し、原因の仮説と該当コードの修正候補までを 1 つのスラッシュコマンドで返させる運用パターンを、そのまま流用できる形で提供します
✦CI で .xcresult だけが残る状況を前提に、Stop フックで自動トリアージを走らせ、フレークか実バグかを切り分けるまでの設計を、個人開発で 6 アプリを並行更新した実体験ベースで解説します
Stripe による安全な決済 · いつでもキャンセル可能
✦

この記事を購入する

この先の内容をすべてお読みいただけます。一度のご購入で、いつでも何度でもアクセスできます。このサイトは広告を掲載しておらず、皆さまのご支援がサーバー費用などの運営を支えています。

または
メンバーシップなら全記事が読み放題 →
シェア

お読みいただきありがとうございます

Claude Lab は広告なしで運営しており、サーバー費用などの運営コストはメンバーシップのご支援で賄っています。実装コード・ベンチマーク・本番設計パターンなど、実務でお役立ていただける記事を毎日更新しています。もし読んでよかったと感じていただけましたら、ぜひご覧ください。

  • ✦コピー&ペーストで使える実装コード付き
  • ✦毎日新しい上級ガイドを追加
  • ✦¥580/月 または ¥1,480 の永久アクセス
メンバーシップを見る →

関連記事

⟐ Claude Code2026-04-08
Claude Code で iOS テスト基盤を組み直す — XCTest・Swift Testing・XCUITest の役割分担
Claude Code で iOS アプリのテスト基盤を組み直した手順です。XCTest・Swift Testing・XCUITest の役割分担、CI でテスト失敗が緑に化ける pipefail の罠、失敗だけを Claude に返す Hooks の組み方を書き残します。
⟐ Claude Code2026-08-28
名前に混ざった見えない文字を、プラグインを入れる前に洗い出す小さなスクリプト
プラグインやスキルの名前に不可視文字や制御文字が混ざっていても、ターミナルの一覧では見分けがつきません。実際に6つの紛らわしい名前を並べて ls の出力を比べ、導入前に走らせる点検スクリプトと、その点検が拾えない範囲までを整理しました。
⟐ Claude Code2026-08-26
キャッシュのTTLを1時間に延ばすかは、離席の長さではなく戻る場所で決めています
Claude Code v2.1.242 で promptCacheTtl と subagentPromptCacheTtl が追加されました。1時間キャッシュが効く条件は離席時間ではなく、同じ作業ディレクトリと同じ git 状態へ戻るかどうかです。判断の順番と、効いているかを確かめる手順を書き残します。