🛠️ Instruments Profiling
macOSやiOSのネイティブアプリの性能
📺 まず動画で見る(YouTube)
▶ 【衝撃】最強のAIエージェント「Claude Code」の最新機能・使い方・プログラミングをAIで効率化する超実践術を解説! ↗
※ jpskill.com 編集部が参考用に選んだ動画です。動画の内容と Skill の挙動は厳密には一致しないことがあります。
📜 元の英語説明(参考)
Use when profiling native macOS or iOS apps with Instruments/xctrace. Covers correct binary selection, CLI arguments, exports, and common gotchas.
🇯🇵 日本人クリエイター向け解説
macOSやiOSのネイティブアプリの性能
※ jpskill.com 編集部が日本のビジネス現場向けに補足した解説です。Skill本体の挙動とは独立した参考情報です。
下記のコマンドをコピーしてターミナル(Mac/Linux)または PowerShell(Windows)に貼り付けてください。 ダウンロード → 解凍 → 配置まで全自動。
mkdir -p ~/.claude/skills && cd ~/.claude/skills && curl -L -o instruments-profiling.zip https://jpskill.com/download/4926.zip && unzip -o instruments-profiling.zip && rm instruments-profiling.zip
$d = "$env:USERPROFILE\.claude\skills"; ni -Force -ItemType Directory $d | Out-Null; iwr https://jpskill.com/download/4926.zip -OutFile "$d\instruments-profiling.zip"; Expand-Archive "$d\instruments-profiling.zip" -DestinationPath $d -Force; ri "$d\instruments-profiling.zip"
完了後、Claude Code を再起動 → 普通に「動画プロンプト作って」のように話しかけるだけで自動発動します。
💾 手動でダウンロードしたい(コマンドが難しい人向け)
- 1. 下の青いボタンを押して
instruments-profiling.zipをダウンロード - 2. ZIPファイルをダブルクリックで解凍 →
instruments-profilingフォルダができる - 3. そのフォルダを
C:\Users\あなたの名前\.claude\skills\(Win)または~/.claude/skills/(Mac)へ移動 - 4. Claude Code を再起動
⚠️ ダウンロード・利用は自己責任でお願いします。当サイトは内容・動作・安全性について責任を負いません。
🎯 このSkillでできること
下記の説明文を読むと、このSkillがあなたに何をしてくれるかが分かります。Claudeにこの分野の依頼をすると、自動で発動します。
📦 インストール方法 (3ステップ)
- 1. 上の「ダウンロード」ボタンを押して .skill ファイルを取得
- 2. ファイル名の拡張子を .skill から .zip に変えて展開(macは自動展開可)
- 3. 展開してできたフォルダを、ホームフォルダの
.claude/skills/に置く- · macOS / Linux:
~/.claude/skills/ - · Windows:
%USERPROFILE%\.claude\skills\
- · macOS / Linux:
Claude Code を再起動すれば完了。「このSkillを使って…」と話しかけなくても、関連する依頼で自動的に呼び出されます。
詳しい使い方ガイドを見る →- 最終更新
- 2026-05-17
- 取得日時
- 2026-05-18
- 同梱ファイル
- 1
💬 こう話しかけるだけ — サンプルプロンプト
- › Instruments Profiling を使って、最小構成のサンプルコードを示して
- › Instruments Profiling の主な使い方と注意点を教えて
- › Instruments Profiling を既存プロジェクトに組み込む方法を教えて
これをClaude Code に貼るだけで、このSkillが自動発動します。
📖 Skill本文(日本語訳)
※ 原文(英語/中国語)を Gemini で日本語化したものです。Claude 自身は原文を読みます。誤訳がある場合は原文をご確認ください。
Instruments プロファイリング (macOS/iOS)
ユーザーがネイティブアプリのパフォーマンスプロファイリングやスタック分析を求めている場合、このスキルを使用してください。
焦点: Time Profiler、xctrace CLI、および正しいバイナリ/アプリインスタンスの選択。
クイックスタート (CLI)
- テンプレートを一覧表示する:
xcrun xctrace list templates - Time Profiler を記録する (起動):
xcrun xctrace record --template 'Time Profiler' --time-limit 60s --output /tmp/App.trace --launch -- /path/To/App.app
- Time Profiler を記録する (アタッチ):
- アプリを自分で起動し、PID を取得してから:
xcrun xctrace record --template 'Time Profiler' --time-limit 60s --output /tmp/App.trace --attach <pid>
- Instruments でトレースを開く:
open -a Instruments /tmp/App.trace
注: xcrun xctrace --help は有効なサブコマンドではありません。xcrun xctrace help record を使用してください。
正しいバイナリの選択 (重要)
注意点: Instruments は間違ったアプリをプロファイリングする可能性があります (例: /Applications 内のアプリ)。LaunchServices が異なるバンドルを解決する場合です。
以下のルールを使用してください:
- 決定論的な起動のために、直接バイナリパスを優先してください:
xcrun xctrace record ... --launch -- /path/App.app/Contents/MacOS/App
.appを起動する場合、それが意図したバンドルであることを確認してください:open -n /path/App.appps -p <pid> -o comm= -o command=で確認してください。
/Applications/App.appとローカルビルドの両方が存在する場合、明示的にローカルビルドパスをターゲットにしてください。- 起動後、トレースを信頼する前にプロセスパスを確認してください。
コマンド引数 (xctrace)
--template 'Time Profiler':xctrace list templatesからのテンプレート名です。--launch -- <cmd>:--の後のすべてがターゲットコマンド (バイナリまたはアプリバンドル) です。--attach <pid|name>: 実行中のプロセスにアタッチします。--output <path>:.trace出力です。省略された場合、ファイルは現在の作業ディレクトリに保存されます。--time-limit 60s|5m: キャプチャ期間を設定します。--device <name|UDID>: iOS デバイスでの実行に必要です。--target-stdout -: 起動したプロセスの標準出力をターミナルにストリームします (CLI ツールに便利です)。
スタックのエクスポート (CLI)
- トレーステーブルを検査する:
xcrun xctrace export --input /tmp/App.trace --toc
- 生のタイムプロファイルサンプルをエクスポートする:
xcrun xctrace export --input /tmp/App.trace --xpath '/trace-toc/run[@number="1"]/data/table[@schema="time-profile"]' --output /tmp/time-profile.xml
- スクリプト (Python/Rust) で後処理してスタックを集計します。
Instruments UI ワークフロー
- テンプレート: Time Profiler
- 「Record」を使用して、遅いパス (起動時 vs 定常状態) をキャプチャします。
- コールツリーのヒント:
- Hide System Libraries (システムライブラリを非表示にする)
- Invert Call Tree (コールツリーを反転する)
- Separate by Thread (スレッドごとに分離する)
- ホットフレームとコールカウントに焦点を当てる
注意点と修正
- 間違ったアプリがプロファイリングされる: LaunchServices がローカルビルドではなくインストールされたアプリを解決します。
- 修正: 直接バイナリパスを使用するか、既知の PID で
--attachを使用してください。
- 修正: 直接バイナリパスを使用するか、既知の PID で
- サンプルがない / 空のトレース: アプリがすぐに終了するか、作業に到達しません。
- 修正: より長いキャプチャを行い、記録中にワークロードをトリガーしてください。
- プライバシープロンプト:
xctraceは Developer Tools の許可が必要な場合があります。- 修正: システム設定 → プライバシーとセキュリティ → デベロッパツール → Terminal/Xcode を許可してください。
- 大きな XML エクスポート:
time-profileのエクスポートは非常に大きいです。- 修正: XPath でフィルタリングし、オフラインで集計してください。ターミナルには出力しないでください。
iOS 固有の注意事項
- デバイス:
xcrun xctrace list devicesと--device <UDID>を使用してください。 - 必要に応じて Xcode 経由で起動し、
xctrace --attachでアタッチしてください。 - 意味のあるスタックのためにデバッグシンボルがあることを確認してください。
検証チェックリスト
- トレースプロセスパスがターゲットビルドと一致することを確認してください。
- スタックが期待されるアプリフレームを表示していることを確認してください。
- キャプチャが遅い操作 (起動/更新) をカバーしていることを確認してください。
- 最適化する場合は、自動差分比較のためにスタックをエクスポートしてください。
📜 原文 SKILL.md(Claudeが読む英語/中国語)を展開
Instruments Profiling (macOS/iOS)
Use this skill when the user wants performance profiling or stack analysis for native apps.
Focus: Time Profiler, xctrace CLI, and picking the correct binary/app instance.
Quick Start (CLI)
- List templates:
xcrun xctrace list templates - Record Time Profiler (launch):
xcrun xctrace record --template 'Time Profiler' --time-limit 60s --output /tmp/App.trace --launch -- /path/To/App.app
- Record Time Profiler (attach):
- Launch app yourself, get PID, then:
xcrun xctrace record --template 'Time Profiler' --time-limit 60s --output /tmp/App.trace --attach <pid>
- Open trace in Instruments:
open -a Instruments /tmp/App.trace
Note: xcrun xctrace --help is not a valid subcommand. Use xcrun xctrace help record.
Picking the Correct Binary (Critical)
Gotcha: Instruments may profile the wrong app (e.g., one in /Applications) if LaunchServices resolves a different bundle.
Use these rules:
- Prefer direct binary path for deterministic launch:
xcrun xctrace record ... --launch -- /path/App.app/Contents/MacOS/App
- If launching
.app, ensure it’s the intended bundle:open -n /path/App.app- Verify with
ps -p <pid> -o comm= -o command=
- If both
/Applications/App.appand a local build exist, explicitly target the local build path. - After launch, confirm the process path before trusting the trace.
Command Arguments (xctrace)
--template 'Time Profiler': template name fromxctrace list templates.--launch -- <cmd>: everything after--is the target command (binary or app bundle).--attach <pid|name>: attach to running process.--output <path>:.traceoutput. If omitted, file saved in CWD.--time-limit 60s|5m: set capture duration.--device <name|UDID>: required for iOS device runs.--target-stdout -: stream launched process stdout to terminal (useful for CLI tools).
Exporting Stacks (CLI)
- Inspect trace tables:
xcrun xctrace export --input /tmp/App.trace --toc
- Export raw time-profile samples:
xcrun xctrace export --input /tmp/App.trace --xpath '/trace-toc/run[@number="1"]/data/table[@schema="time-profile"]' --output /tmp/time-profile.xml
- Post-process in a script (Python/Rust) to aggregate stacks.
Instruments UI Workflow
- Template: Time Profiler
- Use “Record” and capture the slow path (startup vs steady-state)
- Call Tree tips:
- Hide System Libraries
- Invert Call Tree
- Separate by Thread
- Focus on hot frames and call counts
Gotchas & Fixes
- Wrong app profiled: LaunchServices resolves installed app instead of local build.
- Fix: use direct binary path or
--attachwith known PID.
- Fix: use direct binary path or
- No samples / empty trace: App exits quickly or never hits work.
- Fix: longer capture, trigger workload during recording.
- Privacy prompts:
xctracemay need Developer Tools permission.- Fix: System Settings → Privacy & Security → Developer Tools → allow Terminal/Xcode.
- Large XML exports:
time-profileexports are huge.- Fix: filter with XPath and aggregate offline; don’t print to terminal.
iOS Specific Notes
- Device: use
xcrun xctrace list devicesand--device <UDID>. - Launch via Xcode if needed; attach with
xctrace --attach. - Ensure debug symbols for meaningful stacks.
Verification Checklist
- Confirm trace process path matches target build.
- Confirm stacks show expected app frames.
- Capture covers the slow operation (startup/refresh).
- Export stacks for automated diffing if optimizing.