EAS サービス(有料版)。公開済みのEAS Updateの状態を確認します。クラッシュレート(不具合による停止の頻度)、インストール・起動数、利用ユーザー数、ペイロードサイズ(データの大きさ)、チャネルごとの組み込み版とOTA(アプリを再インストールせず配信)ユーザーの割合を調べることができます。 次のような場合に使用: - アップデートのパフォーマンスを確認したい - ロールアウト(段階的配信)が健全な状態か確認したい - 組み込み版とOTA版を使用しているユーザー数を知りたい - CI(継続的な統合システム)をアップデートの健全性に基づいて制御したい
EAS service (paid). Check the health of published EAS Update: crash rates, install/launch counts, unique users, payload size, and the split between embedded and OTA users per channel. Use when the user asks how an update is performing, whether a rollout is healthy, how many users are on the embedded build vs OTA, or wants to gate CI on update health.
EAS サービス - 利用料が発生します。 このスキルでカバーされるのは、EAS Update(有料の Expo Application Services 製品で無料利用枠あり)を通じて公開されたアップデートです。アップデートの配信とこれらコマンドに関するデータは、あなたのプランの EAS Update 利用枠を消費します。詳細は https://expo.dev/pricing を確認してください。
CLI から EAS Update の健全性を直接確認できます:起動数、起動失敗数、クラッシュレート、ユニークユーザー数、ペイロードサイズ、チャネルごとの埋め込み版と OTA(オンザエアアップデート/アプリを停止せずに配信されるアップデート)ユーザーの内訳、ランタイムバージョンごとの人気アップデートなど。このデータは expo.dev のアップデート・チャネル詳細ページを動かしているのと同じデータであり、ターミナルで人間が読める形式と JSON 形式の両方で表示されます。
公開済み EAS Update の健全性や普及状況を評価したい場合に使用:クラッシュレート、インストール数、ユニークユーザー数、バンドルサイズ、チャネルの埋め込み版・OTA ユーザーの内訳など。
使用例:
対応できる場面:公開後のロールアウト監視、問題検知。
使わない場面:ユーザー単位でのクラッシュ詳細やデバイスレベルのレポートが必要な場合。このスキルは集計された EAS メトリクスのみを提供します。
eas-cli がインストール済み(npm install -g eas-cli)eas login)channel:insights の場合:Expo プロジェクトディレクトリから実行(app.json からプロジェクト ID を自動取得)。update:insights はログインだけで実行可能。| コマンド | 機能 |
|---|---|
eas update:list |
最近のアップデートグループ、group ID、ブランチ名を表示 |
eas update:insights <groupId> |
プラットフォームごとの起動数、起動失敗数、クラッシュレート、ユニークユーザー数、ペイロードサイズ、日別の内訳 |
eas update:view <groupId> --insights |
アップデートグループの詳細に加え、同じメトリクスを追加表示 |
eas channel:insights --channel <name> --runtime-version <version> |
埋め込み版・OTA ユーザー数、人気アップデート、チャネル+ランタイムの累積メトリクス |
すべてのコマンドは --json --non-interactive でプログラム処理対応の出力が可能です。
アップデートグループのインサイトをクエリする前に、その group ID が必要です。eas update:list を --branch <name>(そのブランチ上のアップデート)または --all(すべてのブランチ)と一緒に使用してください。プログラムで実行する場合は、ブランチ選択プロンプトを避けるため、ブランチ/--all フラグなしで実行する際は常に --json --non-interactive を付けてください:
# すべてのブランチ全体の最新 group id
eas update:list --all --json --non-interactive | jq -r '.currentPage[0].group'
# 特定のブランチの最新 group id
eas update:list --branch production --json --non-interactive | jq -r '.currentPage[0].group'
JSON レスポンスには currentPage 配列があり、アップデートグループごとに 1 つのエントリを含みます(同じ公開の両プラットフォームは 1 つのエントリに集約):
{
"currentPage": [
{
"branch": "production",
"message": "\"Fix checkout crash\" (1 week ago by someone)",
"runtimeVersion": "1.0.6",
"group": "03d5dfcf-736c-475a-8730-af039c3f4d06",
"platforms": "android, ios",
"isRollBackToEmbedded": false
}
]
}
エントリに含まれるのは codeSigningKey と rolloutPercentage も使用されている場合のみ(未設定の値は JSON 出力から除外)です。
--branch <name> で呼び出した場合、レスポンスにはトップレベルに name(ブランチ名)と id(ブランチ ID)も含まれます。
eas update:insights <groupId>単一のアップデートグループについて、起動数、起動失敗数、クラッシュレート、ユニークユーザー数、起動アセット数、平均ペイロードサイズを表示します。プラットフォームごと(iOS、Android)に分類され、さらに起動と失敗の日別内訳を含みます。
eas update:insights 03d5dfcf-736c-475a-8730-af039c3f4d06
| フラグ | 説明 |
|---|---|
--days <N> |
N 日さかのぼって確認。デフォルト:7。--start/--end と同時使用不可。 |
--start <iso-date> / --end <iso-date> |
明示的な期間指定、例 --start 2026-04-01 --end 2026-04-15 |
--platform <ios|android> |
単一プラットフォームにフィルタ。省略するとグループ内のすべてのプラットフォームを表示。 |
--json |
機械可読形式での出力。--non-interactive を含みます。 |
--non-interactive |
スクリプト実行時に必須。 |
トップレベル:groupId、timespan(start、end、daysBack)、グループが公開されたプラットフォームごとに 1 つのエントリを含む platforms[]。各プラットフォームエントリには updateId、totals(uniqueUsers、installs、failedInstalls、crashRatePercent)、payload(launchAssetCount、averageUpdatePayloadBytes)、{ date, installs, failedInstalls } の時系列データ daily[] が含まれます。
完全なスキーマとフィールドリファレンスは references/update-insights-schema.md を参照。
健全性評価に重要なフィールド:
platforms[].totals.crashRatePercent:failedInstalls / (installs + failedInstalls) * 100 で計算。インストール数がゼロの場合はゼロ。platforms[].totals.installs と uniqueUsers:普及状況の指標。platforms[].daily:時系列データで、失敗の急増を検出するのに有用。Could not find any updates with group ID: "<id>" — グループが存在しないか、アクセス権がない。Update group "<id>" has no ios update (available platforms: android) — --platform ios を指定したが、そのグループは iOS 向けに公開されていない。EAS Update insights is not supported by this version of eas-cli. Please upgrade ... — サーバーが CLI が依存するフィールドを廃止した。npm install -g eas-cli@latest を実行してください。eas update:view <groupId> --insights標準の update:view 出力をインラインで同じプラットフォーム別インサイトで拡張します。
# 人間が読める形式
eas update:view 03d5dfcf-... --insights
eas update:view 03d5dfcf-... --insights --days 30
# JSON:{ updates: [...], insights: {...} } でラップ
eas update:view 03d5dfcf-... --json --insights
--insights なしの場合、update:view は以前と同じ動作です — 既存の利用者向けに JSON フォーマットは変更されません。--days / --start / --end フラグは --insights が設定された場合にのみ適用されます。単独で指定するとエラーになります。
eas channel:insights --channel <name> --runtime-version <version>チャネルごとに、埋め込み版ビルドを使用しているユーザー数と OTA アップデートを使用しているユーザー数、およびどのアップデートが最もトラフィックを獲得しているかを表示します。Expo プロジェクトディレクトリから実行する必要があります。
eas channel:insights --channel production --runtime-version 1.0.6
| フラグ | 説明 |
|---|---|
--channel <name> |
必須。 チャネル名(例 production、staging)。 |
--runtime-version <version> |
必須。 公開時の値と完全一致させます。update:list の runtimeVersion 値で確認してください。 |
--days <N> |
N 日さかのぼって確認。デフォルト:7。 |
--start / --end |
明示的な期間指定、update:insights と同様。 |
--json / --non-interactive |
機械可読形式での出力。 |
トップレベル:channel、runtimeVersion、timespan、embeddedUpdateTotalUniqueUsers、otaTotalUniqueUsers、mostPopularUpdates[](各々に rank、groupId、message、platform、totalUniqueUsers を含む)、cumulativeMetricsAtLastTimestamp[]、labels と datasets を含む uniqueUsersOverTime と cumulativeMetricsOverTime。
完全なスキーマとフィールドリファレンスは references/channel-insights-schema.md を参照。
重要なフィールド:
embeddedUpdateTotalUniqueUsers:埋め込み版(バイナリに含まれる)ビルドを実行しているユーザー数。mostPopularUpdates[]:totalUniqueUsers でランク付けされたアップデート。注意:これはサーバーが返す上位 N 件です。otaTotalUniqueUsers はそのリストの合計であり、上位 N 件以上のアップデートが活動している場合、OTA の総利用に達しないことがあります。uniqueUsersOverTime と cumulativeMetricsOverTime:チャート用の日別データ系列。Could not find channel with the name <name> — チャネル名の誤字か、アカウント関連の問題。mostPopularUpdates が空 — そのチャネル+ランタイム組み合わせに対し、OTA アップデートがまだ起動されていない。通常、チャネルが埋め込み版ビルドのみを配信している状態です。# 1. 本番環境上の最新公開の group id を取得
GROUP_ID=$(eas update:list --branch production --json --non-interactive \
| jq -r '.currentPage[0].group')
# 2. 採用時間を待って(数分~数時間)、クラッシュレートを確認
eas update:insights "$GROUP_ID" --json --non-interactive \
| jq '.platforms[] | {platform, installs: .totals.installs, crashRate: .totals.crashRatePercent}'
プラットフォーム間、および以前のリリースと比較して crashRate を確認します。急増や非対称な動作(iOS で急増し Android が平坦、またはその逆)は調査の信号です。
for channel in production staging; do
echo "--- $channel ---"
eas channel:insights --channel "$channel" --runtime-version 1.0.6 --json --non-interactive \
| jq '{
channel,
embedded: .embeddedUpdateTotalUniqueUsers,
ota: .otaTotalUniqueUsers,
topUpdate: .mostPopularUpdates[0]
}'
done
eas update:insights "$GROUP_ID" --days 1 --json --non-interactive \
| jq '.platforms[] | select(.totals.crashRatePercent > 1)'
EAS service - costs apply. Insights cover updates published through EAS Update, a paid Expo Application Services product with free-tier limits. Update delivery and the data behind these commands count against your plan's EAS Update usage. Review https://expo.dev/pricing.
Query the health of published EAS Update directly from the CLI: launches, failed launches, crash rates, unique users, payload size, the embedded-vs-OTA user split per channel, and the most popular updates per runtime version. The data is the same data that powers the update and channel detail pages on expo.dev; these commands expose it in the terminal in human and JSON form.
Use this when the user wants to assess the health or adoption of a published EAS Update: crash rates, install counts, unique users, bundle size, or the split between embedded and OTA users on a channel.
Example prompts:
Also fits: post-publish rollout monitoring and regression detection.
Don't use when the user needs per-user crash detail or device-level reporting; this skill only exposes aggregate EAS metrics.
eas-cli installed (npm install -g eas-cli).eas login.channel:insights: run from an Expo project directory (the command resolves the project ID from app.json). update:insights only needs a login.| Command | Purpose |
|---|---|
eas update:list |
Discover recent update groups, their group IDs, and branch names |
eas update:insights <groupId> |
Per-platform launches, failed launches, crash rate, unique users, payload size, daily breakdown |
eas update:view <groupId> --insights |
Update group details + the same metrics appended |
eas channel:insights --channel <name> --runtime-version <version> |
Embedded/OTA user counts, most popular updates, cumulative metrics for a channel + runtime |
All of these support --json --non-interactive for programmatic parsing.
Before querying insights for an update group, you need its group ID. Use eas update:list with either --branch <name> (updates on that branch) or --all (updates across all branches). Always pass --json --non-interactive when running non-interactively; without a branch/--all flag the command will otherwise prompt for a branch selection:
# Latest group id across all branches
eas update:list --all --json --non-interactive | jq -r '.currentPage[0].group'
# Latest group id on a specific branch
eas update:list --branch production --json --non-interactive | jq -r '.currentPage[0].group'
The JSON response has a currentPage array with one entry per update group (both platforms of the same publish are collapsed into one entry):
{
"currentPage": [
{
"branch": "production",
"message": "\"Fix checkout crash\" (1 week ago by someone)",
"runtimeVersion": "1.0.6",
"group": "03d5dfcf-736c-475a-8730-af039c3f4d06",
"platforms": "android, ios",
"isRollBackToEmbedded": false
}
]
}
Entries also carry codeSigningKey and rolloutPercentage, but only when those features are in use for the group (undefined values are omitted from the JSON output).
When called with --branch <name>, the response also includes name (the branch name) and id (the branch ID) at the top level.
eas update:insights <groupId>Shows launches, failed launches, crash rate, unique users, launch asset count, and average payload size for a single update group, broken down per platform (iOS, Android), plus a daily breakdown of launches and failures.
eas update:insights 03d5dfcf-736c-475a-8730-af039c3f4d06
| Flag | Description |
|---|---|
--days <N> |
Look back N days. Default: 7. Mutually exclusive with --start/--end. |
--start <iso-date> / --end <iso-date> |
Explicit time range, e.g. --start 2026-04-01 --end 2026-04-15. |
--platform <ios|android> |
Filter to a single platform. Omit to see all platforms in the group. |
--json |
Machine-readable output. Implies --non-interactive. |
--non-interactive |
Required when scripting. |
Top level: groupId, timespan (start, end, daysBack), and platforms[] with one entry per platform the group was published to. Each platform entry has updateId, totals (uniqueUsers, installs, failedInstalls, crashRatePercent), payload (launchAssetCount, averageUpdatePayloadBytes), and a daily[] time series of { date, installs, failedInstalls }.
For the complete schema and field reference, see references/update-insights-schema.md.
Fields that matter for health assessment:
platforms[].totals.crashRatePercent, computed as failedInstalls / (installs + failedInstalls) * 100. Zero when there are no installs.platforms[].totals.installs and uniqueUsers give the adoption signal.platforms[].daily is a time series, useful for spotting a sudden spike in failures.Could not find any updates with group ID: "<id>" — group doesn't exist or you lack access.Update group "<id>" has no ios update (available platforms: android) — --platform ios was used but the group wasn't published for iOS.EAS Update insights is not supported by this version of eas-cli. Please upgrade ... — the server deprecated a field the CLI relies on. Run npm install -g eas-cli@latest.eas update:view <groupId> --insightsExtends the standard update:view output with the same per-platform insights, inline.
# Human-readable
eas update:view 03d5dfcf-... --insights
eas update:view 03d5dfcf-... --insights --days 30
# JSON: wrapped as { updates: [...], insights: {...} }
eas update:view 03d5dfcf-... --json --insights
Without --insights, update:view behaves exactly as before — no JSON shape change for existing consumers. The --days / --start / --end flags only apply when --insights is set; passing them alone errors.
eas channel:insights --channel <name> --runtime-version <version>Shows, per channel, how many users are on the embedded build vs over-the-air updates and which updates are pulling the most traffic. Must be run from an Expo project directory.
eas channel:insights --channel production --runtime-version 1.0.6
| Flag | Description |
|---|---|
--channel <name> |
Required. The channel name (e.g. production, staging). |
--runtime-version <version> |
Required. Match exactly what was published. Check runtimeVersion values in update:list. |
--days <N> |
Look back N days. Default: 7. |
--start / --end |
Explicit time range, like update:insights. |
--json / --non-interactive |
Machine-readable output. |
Top level: channel, runtimeVersion, timespan, embeddedUpdateTotalUniqueUsers, otaTotalUniqueUsers, mostPopularUpdates[] (each with rank, groupId, message, platform, totalUniqueUsers), cumulativeMetricsAtLastTimestamp[], plus chart-shaped uniqueUsersOverTime and cumulativeMetricsOverTime objects with labels and datasets.
For the complete schema and field reference, see references/channel-insights-schema.md.
Fields that matter:
embeddedUpdateTotalUniqueUsers is the count of users running the embedded (binary-bundled) build.mostPopularUpdates[] is updates ranked by totalUniqueUsers. Caveat: this is the top-N the server returns; otaTotalUniqueUsers is a sum of that list and may undercount total OTA reach if more than top-N updates are active.uniqueUsersOverTime and cumulativeMetricsOverTime are daily data series for charting.Could not find channel with the name <name> — typo or wrong account.mostPopularUpdates in JSON — no OTA update has been launched for that channel + runtime yet. Usually means the channel is still serving the embedded build only.# 1. Grab the latest publish on production
GROUP_ID=$(eas update:list --branch production --json --non-interactive \
| jq -r '.currentPage[0].group')
# 2. Give it some adoption time (minutes to hours), then check crash rate
eas update:insights "$GROUP_ID" --json --non-interactive \
| jq '.platforms[] | {platform, installs: .totals.installs, crashRate: .totals.crashRatePercent}'
Compare the crashRate across platforms and against previous releases; sudden spikes or asymmetric behaviour (iOS spiking while Android is flat, or vice versa) is the signal to investigate.
for channel in production staging; do
echo "--- $channel ---"
eas channel:insights --channel "$channel" --runtime-version 1.0.6 --json --non-interactive \
| jq '{
channel,
embedded: .embeddedUpdateTotalUniqueUsers,
ota: .otaTotalUniqueUsers,
topUpdate: .mostPopularUpdates[0]
}'
done
eas update:insights "$GROUP_ID" --days 1 --json --non-interactive \
| jq '.platforms[] | select(.totals.crashRatePercent > 1)'
eas update:view "$GROUP_ID" --insights --days 30
Human-readable group details plus 30 days of launches/failures per platform — suitable for pasting into a changelog or incident review.
jq; payloads are structured for easy filtering.--json implies --non-interactive, but passing both is explicit and scripting-friendly.daily[].date are UTC ISO timestamps; the human-readable table renders them as YYYY-MM-DD (UTC).installs / failedInstalls. Same field, different display name.otaTotalUniqueUsers in channel insights, which is a sum over mostPopularUpdates.installs / "Launches" field counts users who downloaded the manifest and launch asset. A confirmed run only registers on the user's next update check (typically up to 24h later, depending on the app's update policy). So metrics lag the real-world state slightly.failedInstalls / "Crashes" counts updates that errored during install/launch and were reported on the next update check. Crashes that don't trigger an update request (e.g. process kill before recovery) won't appear.If you encounter errors, misleading or outdated information in this skill, report it so Expo can improve:
npx --yes submit-expo-feedback@latest --category skills --subject "eas-update-insights" "<actionable feedback>"
Only submit when you have something specific and actionable to report. Include as much relevant context as possible. If an AI agent repeatedly failed or the user had to take over an Expo task, load the expo-skill-feedback skill and follow its eval-candidate flow instead of reusing the command above.
原文・著作権は Anthropic および各プラグイン作者に帰属します。日本語訳は Claude API による自動翻訳です。