ios-android-logs について
iOS と Android の Capacitor アプリ開発者向けログ収集ガイドです。適切なログ経路の選択、アプリ出力のフィルタリング、診断情報の保存を扱い、JavaScript、ネイティブログ、クラッシュレポートの確認方法を区別します。
主な機能
- 01ログ種別ごとの出力先の特定
- 02シミュレーター、端末、アプリログのフィルタリング
- 03ログストリームのファイル保存
- 04iOS クラッシュレポートと Android 診断情報の収集
- 05ログコマンドと端末接続の問題調査
活用シーン
- 01Capacitor や JavaScript のログが見えない問題の調査
- 02端末からクラッシュや ANR 情報を取得
- 03システムログのノイズを抑えてアプリ出力を絞り込む
- 04診断用ログの保存と共有
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ cap-go/ capgo-skills --skill ios-android-logsインストール後、Claude Code で/ios-android-logsを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
metadata.jsonreferences/android-logs.mdios-logs.md詳細
Capacitor アプリの iOS/Android ログ
必要なメッセージが実際に出力されるログチャネルを選び、アプリに絞り込んでファイルに記録し、診断に引き継ぎます。
使用する場面
次の場合に使用します:
- デバイス/シミュレーターのログの表示、ストリーミング、フィルタリング、保存方法について質問された場合。
- iOS/Android で
console.logの出力や⚡️の Capacitor 行が見つからない場合。 - デバイスまたはシミュレーターからクラッシュレポート(
.ips、tombstone、ANR)を取得する必要がある場合。 - Logcat または統合ログのノイズが多く、ユーザーが自分のアプリまたはプラグインだけを表示したい場合。
- ログコマンドが失敗する、または正しく動作しない場合:
--level errorを指定してもすべて表示される、unable to find utility "devicectl"、Error: Unexpected argument 'log'、adb: no devices/emulators found。
使用しないでください:
- エラーを解釈してアプリを修正する場合 →
debugging-capacitor。 - 本番環境のクラッシュ/ANR レポート(Sentry、Crashlytics、Datadog)→
capacitor-native-observability。 - MCP サーバー経由の AI エージェントによるログストリーミング →
capacitor-mcp。 - CPU/メモリのプロファイリング →
capacitor-performance。 - UIScene のライフサイクル移行 →
capacitor-uiscene-migration。
Capacitor の出力先(よくある落とし穴)
| ソース | iOS | Android |
|---|---|---|
Capacitor ブリッジのメッセージ(⚡️ Loading app at ...、⚡️ To Native ->、エラー) | stdout のみ(print) | logcat タグ Capacitor および Capacitor/<Sub> |
ネイティブ側にミラーリングされた JS の console.log/warn/error | stdout に ⚡️ [log] - ... として出力 | logcat タグ Capacitor/Console に File: ... - Line N - Msg: ... として出力 |
| JS コンソールの完全な情報(オブジェクト、スタックトレース) | Safari Web Inspector | chrome://inspect |
os.Logger/NSLog を使用するプラグイン/アプリのコード | 統合ログ(Console.app、log stream) | 該当なし |
android.util.Log/Capacitor の Logger を使用するプラグインのコード | 該当なし | logcat |
| ネイティブクラッシュ | .ips クラッシュレポート | logcat の FATAL EXCEPTION とクラッシュバッファ。ネイティブコードの場合は tombstone |
影響:
- iOS では、Console.app と
log streamに Capacitor の⚡️行やミラーリングされた JS コンソールは表示されません。Xcode のコンソール、xcrun simctl launch --console-pty、またはxcrun devicectl device process launch --consoleを使用してください。 - ミラーリングの動作は
loggingBehavior(none|debug|production、デフォルトはdebug)に従います。productionに設定しない限り、Release ビルドでは Capacitor のログは出力されません。 - iOS のプロセス名は表示名ではなく実行ファイル名です(Capacitor のテンプレートでは
App)。process == "App"でフィルタリングしてください。
クイックコマンド
# iOS Simulator: Capacitor + JS console (stdout), relaunching the app
xcrun simctl launch --console-pty --terminate-running-process booted com.example.app
# iOS Simulator: unified log for the app (os_log / NSLog / system messages)
xcrun simctl spawn booted log stream --level debug --predicate 'process == "App"'
# iPhone: install + launch with stdout attached (Xcode 15+ devicectl)
xcrun devicectl list devices
xcrun devicectl device process launch --console --terminate-existing --device <id> com.example.app
# iPhone: unified log snapshot of the last 10 minutes
sudo log collect --device-udid <udid> --last 10m --output /tmp/iphone.logarchive
log show /tmp/iphone.logarchive --predicate 'process == "App"' --info --debug
# Android: only this app (re-run after each app restart, PID changes)
adb logcat --pid="$(adb shell pidof -s com.example.app)"
# Android: Capacitor + JS console only
adb logcat -s Capacitor:V Capacitor/Console:V
# Android: crashes only
adb logcat -b crash
手順
- 対象を特定する:シミュレーター/エミュレーターか実機か、Debug か Release か、どのレイヤーがメッセージを出力したかを確認します(上の表を参照)。
- 接続を確認する:
xcrun simctl list devices booted、xcrun devicectl list devices(デバイスのロック解除、信頼、Developer Mode の有効化が必要)、adb devices -lを実行します。 - クリアして再現する:Android では
adb logcat -cを実行します。iOS ではアプリを再起動する前にストリームを開始します。 - 早い段階でフィルタリングする:まずプロセス/PID で絞り込み、次にサブシステム/タグ、最後にテキストで絞り込みます。フィルタリングしていないシステムログを会話に貼り付けないでください。
- 保存する:ユーザーがログを共有する必要がある場合は、ファイル(
> app.log、.logarchive、adb bugreport)に保存します。チーム外に共有する前に、トークン、メールアドレス、認証ヘッダーをマスキングしてください。 - 引き継ぐ:関連する行を
debugging-capacitorに渡し、根本原因の調査を依頼します。
エラー処理
| メッセージ | 修正方法 |
|---|---|
--level error を指定してもすべてのメッセージが表示される | log stream --level が認識するのは default、info、debug のみです(上限ではなく、最低レベルを設定します)。--predicate 'messageType == error OR messageType == fault' でエラーを絞り込んでください。 |
xcrun: error: unable to find utility "devicectl" | アクティブな開発者ディレクトリが Command Line Tools になっています。sudo xcode-select -s /Applications/Xcode.app/Contents/Developer を実行してください。 |
Error: Unexpected argument 'log'(devicectl) | devicectl にログをストリーミングするサブコマンドはありません。標準出力には --console を使い、統合ログには Console.app または log collect --device-udid を使ってください。 |
log collect で権限エラーが発生する | sudo を付けて実行してください。デバイスのロックを解除し、信頼する必要があります。 |
No devices are booted.(simctl) | xcrun simctl boot "<device name>" を実行するか、Simulator を開いてください。 |
adb: no devices/emulators found / unauthorized | USB デバッグを有効にし、RSA プロンプトを承認して、adb kill-server && adb start-server を実行してください。 |
adb logcat --pid= ですべてのログまたはエラーが表示される | アプリが実行されておらず、pidof が何も返しませんでした。先にアプリを起動してください。 |
Android に Capacitor/Console の行が表示されない | loggingBehavior: 'none' に設定されているか、デフォルトの debug を使用する Release ビルドです。 |
JS のログは表示されるが、オブジェクトが [object Object] と出力される | ネイティブ側でミラーリングする際に文字列化されます。構造化された出力には WebView インスペクターを使用してください。 |
検証
- iOS シミュレーター:
--console-ptyを付けて起動し、⚡️ Loading app at capacitor://localhostと、テスト用のconsole.log('log-check')が⚡️ [log] - log-checkとして表示されることを確認します。 - iOS デバイス:
devicectl device process launch --consoleで同様に確認します。 - Android:
adb logcat -s Capacitor/Console:VにMsg: log-checkと表示されることを確認します。 - 統合ログ:プラグインの
Logger(subsystem: "com.example.app", category: "test").info("log-check")が、--predicate 'subsystem == "com.example.app"' --level infoを指定すると表示されます。
参考資料
関連するトピックを扱う場合にのみ、参考資料を読み込んでください。
| ファイル | 読み込むタイミング |
|---|---|
references/ios-logs.md | 統合ログの述語、Console.app、log collect/log show、devicectl/Xcode を使った iOS クラッシュレポート、プラグインへの os.Logger の追加 |
references/android-logs.md | logcat のバッファー/フォーマット/フィルター、Android Studio Logcat のクエリ、ANR、tombstone、bugreport、WebView(chromium)のノイズ |
リソース
コメント
Markdown 対応