CrUX API を使用すると、ページ単位とオリジン単位で集計された実際のユーザー エクスペリエンス データに低レイテンシでアクセスできます。
一般的なユースケース
CrUX API を使用すると、「https://example.com オリジンの指標を取得する」など、特定の URI のユーザー エクスペリエンス指標をクエリできます。
CrUX API キー
CrUX API を使用するには、Chrome UX Report API の使用用にプロビジョニングされた Google Cloud API キーが必要です。
API キーの取得と使用
キーの取得または、認証情報ページでキーを作成することもできます。
API キーを作成したら、アプリケーションですべてのリクエスト URL の末尾にクエリ パラメータ key=yourAPIKey を追加できます。
API キーは、安全に URL に埋め込むことができます。エンコーディングの必要はありません。
クエリの例をご覧ください。
データモデル
このセクションでは、リクエストとレスポンスのデータ構造について詳しく説明します。
録画
ページまたはサイトに関する個別の情報。レコードには、識別子に固有のデータと、ディメンションの特定の組み合わせに固有のデータを含めることができます。1 つのレコードに 1 つ以上の指標のデータを含めることができます。
識別子
識別子は、どのレコードを検索するかを指定します。CrUX では、これらの識別子はウェブページとウェブサイトです。
出発地
識別子がオリジンである場合、そのオリジンのすべてのページのすべてのデータがまとめて集計されます。たとえば、http://www.example.com オリジンに次のサイトマップで指定されたページがあるとします。
http://www.example.com/
http://www.example.com/foo.html
http://www.example.com/bar.html
つまり、オリジンを http://www.example.com に設定して Chrome UX レポートをクエリすると、http://www.example.com/、http://www.example.com/foo.html、http://www.example.com/bar.html のデータが返され、集計されます。これらはすべて、そのオリジンの下にあるページであるためです。
URL
識別子が URL の場合、その特定の URL のデータのみが返されます。http://www.example.com オリジンのサイトマップをもう一度見てみましょう。
http://www.example.com/
http://www.example.com/foo.html
http://www.example.com/bar.html
識別子が URL に設定され、値が http://www.example.com/foo.html の場合、そのページのデータのみが返されます。
サイズ
ディメンションは、レコードの集計対象となる特定のデータグループを識別します。たとえば、フォーム ファクタが PHONE の場合、レコードにはモバイル デバイスで発生した読み込みに関する情報が含まれていることを示します。各ディメンションには一定数の値があり、ディメンションを指定しない場合は、そのディメンションがすべての値で集計されることを意味します。たとえば、フォーム ファクタを指定しない場合、レコードには、任意のフォーム ファクタで発生した読み込みに関する情報が含まれます。
フォーム ファクタ
エンドユーザーがページに移動するために使用したデバイスクラス。これは、PHONE、TABLET、DESKTOP に分割されたデバイスの一般的なクラスです。
指標
レポート指標は、ヒストグラム、パーセンタイル、分数で統計的に集計してレポートします。
浮動小数点値は小数点以下 4 桁に丸められます(cumulative_layout_shift 指標は文字列としてエンコードされた倍精度浮動小数点数であるため、浮動小数点数とは見なされず、文字列内で小数点以下 2 桁まで報告されます)。
ヒストグラム
指標がヒストグラムで表される場合、その指標の特定の範囲に該当するページ読み込みの割合が表示されます。
サンプル指標の 3 つのビンのヒストグラムは次のようになります。
{
"histogram": [
{
"start": 0,
"end": 1000,
"density": 0.3818
},
{
"start": 1000,
"end": 3000,
"density": 0.4991
},
{
"start": 3000,
"density": 0.1192
}
]
}
このデータは、ページ読み込みの 38.18% で、指標の測定値が 0 ミリ秒から 1,000 ミリ秒の間であったことを示しています。このヒストグラムには指標の単位が含まれていません。この場合はミリ秒と見なします。
また、ページ読み込みの 49.91% で指標値が 1,000 ~ 3,000 ミリ秒、11.92% で 3,000 ミリ秒を超えています。
パーセンタイル
指標には、追加の分析に役立つパーセンタイルが含まれている場合もあります。特定の指標の値は、その指標の指定されたパーセンタイルで報告されます。これらは、最終的なビン化されたデータではなく、利用可能なデータの完全なセットに基づいているため、最終的なビン化されたヒストグラムに基づく補間されたパーセンタイルと必ずしも一致するとは限りません。
{
"percentiles": {
"p75": 2063
}
}
この例では、ページ読み込みの少なくとも 75% が指標値 <= 2063 で測定されています。
分数
分数は、特定のラベルを付けられるページ読み込みの割合を示します。この場合、指標値はこれらのラベルです。
たとえば、form_factors 指標は、特定のクエリが対象とするフォーム ファクタ(またはデバイス)の内訳を一覧表示する fractions オブジェクトで構成されます。
"form_factors": {
"fractions": {
"desktop": 0.0377,
"tablet": 0.0288,
"phone": 0.9335
}
}
この場合、ページ読み込みの 3.77% がパソコン、2.88% がタブレット、93.35% がスマートフォンで測定され、合計で 100% になります。
指標値の型
| CrUX API の指標名 | データ型 | メートル単位 | 統計集計 | ドキュメント |
|---|---|---|---|---|
cumulative_layout_shift |
文字列としてエンコードされた小数点以下 2 桁の double | 単位なし | 3 つのビンを含むヒストグラム、p75 のパーセンタイル | CLS |
interaction_to_next_paint |
int | ミリ秒 | 3 つのビンを含むヒストグラム、p75 のパーセンタイル | INP |
largest_contentful_paint |
int | ミリ秒 | 3 つのビンを含むヒストグラム、p75 を含むパーセンタイル | LCP |
experimental_cumulative_layout_shift_with_softnavs |
文字列としてエンコードされた小数点以下 2 桁の double | 単位なし | 3 つのビンを含むヒストグラム、p75 を含むパーセンタイル | ブログ |
experimental_interaction_to_next_paint_with_softnavs |
int | ミリ秒 | 3 つのビンを含むヒストグラム、p75 を含むパーセンタイル | ブログ |
experimental_largest_contentful_paint_with_softnavs |
int | ミリ秒 | 3 つのビンを含むヒストグラム、p75 のパーセンタイル | ブログ |
first_contentful_paint |
int | ミリ秒 | 3 つのビンを含むヒストグラム、p75 を含むパーセンタイル | FCP |
experimental_time_to_first_byte |
int | ミリ秒 | 3 つのビンを含むヒストグラム、p75 を含むパーセンタイル | TTFB |
form_factors |
小数点以下 4 桁の double | パーセント | フォーム ファクタから割合へのマッピング | フォーム ファクタ |
navigation_types |
4 桁の 10 進数 | パーセント | ナビゲーション タイプから割合へのマッピング | ナビゲーション タイプ |
round_trip_time |
int | ミリ秒 | 3 つのビンを含むヒストグラム、p75 を含むパーセンタイル | RTT 指標 |
largest_contentful_paint_resource_type |
小数点以下 4 桁の double | パーセント | ナビゲーション タイプから分数へのマッピング | LCP リソースタイプ |
largest_contentful_paint_image_time_to_first_byte |
int | ミリ秒 | p75 のパーセンタイル | LCP のサブパート |
largest_contentful_paint_image_resource_load_delay |
int | ミリ秒 | p75 を含むパーセンタイル | LCP のサブパート |
largest_contentful_paint_image_resource_load_duration |
int | ミリ秒 | p75 のパーセンタイル | LCP のサブパート |
largest_contentful_paint_image_element_render_delay |
int | ミリ秒 | p75 を含むパーセンタイル | LCP のサブパーツ |
experimental_ad_count |
小数点以下 2 桁の double | 単位なし | p75 のみ | 広告数 |
experimental_ad_density |
小数点以下 2 桁の double | 単位なし | p75 のみ | 広告の密度 |
experimental_ad_cpu |
int | ミリ秒 | p75 のみ | 広告のウェイト: CPU |
experimental_ad_kilobytes |
int | KB | p75 のみ | 広告のウェイト: ネットワーク |
BigQuery 指標名のマッピング
| CrUX API の指標名 | BigQuery 指標名 |
|---|---|
cumulative_layout_shift |
layout_instability.cumulative_layout_shift |
first_contentful_paint |
first_contentful_paint |
interaction_to_next_paint |
interaction_to_next_paint |
largest_contentful_paint |
largest_contentful_paint |
experimental_time_to_first_byte |
experimental.time_to_first_byte |
navigation_types |
navigation_types |
form_factors |
なし |
round_trip_time |
round_trip_time |
largest_contentful_paint_resource_type |
× |
largest_contentful_paint_image_time_to_first_byte |
× |
largest_contentful_paint_image_resource_load_delay |
× |
largest_contentful_paint_image_resource_load_duration |
× |
largest_contentful_paint_image_element_render_delay |
× |
experimental_ad_count |
× |
experimental_ad_density |
× |
experimental_ad_cpu |
× |
experimental_ad_kilobytes |
なし |
収集期間
2022 年 10 月より、CrUX API には、集計期間の開始日と終了日を表す firstDate フィールドと endDate フィールドを含む collectionPeriod オブジェクトが含まれています。次に例を示します。
"collectionPeriod": {
"firstDate": {
"year": 2022,
"month": 9,
"day": 12
},
"lastDate": {
"year": 2022,
"month": 10,
"day": 9
}
}
これにより、データをより深く理解し、その日のデータが更新されているか、昨日と同じデータが返されているかを確認できます。
収集期間は PageSpeed Insights でも確認できます。
また、データが 28 日間すべてのものではない場合(ページが 28 日前にリリースされた場合など)でも、collectionPeriod には常に 28 日間が表示されます。collectionPeriod は、CrUX データの集計期間であり、必ずしもデータが表す期間とは限りません。
クエリの例
クエリは、POST リクエストを使用して https://chromeuxreport.googleapis.com/v1/records:queryRecord?key=[YOUR_API_KEY]" に JSON オブジェクトとして送信されます。POST 本文には、クエリデータが JSON オブジェクトとして含まれます。
{
"origin": "https://example.com",
"formFactor": "PHONE",
"metrics": [
"largest_contentful_paint",
"experimental_time_to_first_byte"
]
}
たとえば、次のコマンドラインを使用して curl から呼び出すことができます(API_KEY はキーに置き換えます)。
curl -s --request POST 'https://chromeuxreport.googleapis.com/v1/records:queryRecord?key=API_KEY' \
--header 'Accept: application/json' \
--header 'Content-Type: application/json' \
--data '{"formFactor":"PHONE","origin":"https://www.example.com","metrics":["largest_contentful_paint", "experimental_time_to_first_byte"]}'
ページレベルのデータは、クエリで origin ではなく url プロパティを渡すことで、API を介して取得できます。
{
"url": "https://example.com/page",
"formFactor": "PHONE",
"metrics": [
"largest_contentful_paint",
"experimental_time_to_first_byte"
]
}
metrics プロパティが設定されていない場合は、利用可能なすべての指標が返されます。
cumulative_layout_shiftfirst_contentful_paintinteraction_to_next_paintlargest_contentful_paintexperimental_time_to_first_bytelargest_contentful_paint_resource_typelargest_contentful_paint_image_time_to_first_bytelargest_contentful_paint_image_resource_load_delaylargest_contentful_paint_image_resource_load_durationlargest_contentful_paint_image_element_render_delaynavigation_typesround_trip_timeform_factors(リクエストでformFactorが指定されていない場合にのみ報告されます)experimental_ad_count(広告指標に含まれるページについてのみレポートされます)experimental_ad_density(広告指標に含まれるページのみがレポートされます)experimental_ad_cpu(広告指標に含まれるページについてのみレポートされます)experimental_ad_kilobytes(広告指標に含まれるページのみがレポートされます)
formFactor 値が指定されていない場合、値はすべてのフォーム ファクタで集計されます。
その他のクエリの例については、Chrome UX Report API の使用をご覧ください。
データ パイプライン
CrUX データセットは、API を使用して利用可能になる前に、パイプラインを介して処理され、データの統合、集計、フィルタリングが行われます。
移動平均
Chrome UX レポートのデータは、集計された指標の 28 日間の移動平均です。つまり、Chrome UX レポートに表示されるデータは、過去 28 日間のデータを集計したものです。
これは、BigQuery の CrUX データセットが月次レポートを集計する方法と似ています。
日次更新
データは毎日午前 4 時(UTC)頃に更新されます。更新時間に関するサービスレベル契約はありません。毎日ベスト エフォートで実行されます。
スキーマ
CrUX API には、POST HTTP リクエストを受け入れる単一のエンドポイントがあります。API は、リクエストされたオリジンまたはページのパフォーマンス データに対応する 1 つ以上の metrics を含む record を返します。
HTTP リクエスト
POST https://chromeuxreport.googleapis.com/v1/records:queryRecord
この URL は gRPC Transcoding 構文を使用します。
リクエストの本文
リクエストの本文には、次の構造を持つデータが含まれます。
{
"formFactor": enum (FormFactor),
"metrics": [
string
],
// Union field url_pattern can be only one of the following:
"origin": string,
"url": string
// End of list of possible types for union field url_pattern.
}
| フィールド | |
|---|---|
formFactor |
フォーム ファクタは、レコードのデータが属するデバイスクラスを指定するクエリ ディメンションです。 このフィールドでは、値 注: フォーム ファクタが指定されていない場合は、すべてのフォーム ファクタの集計データを含む特別なレコードが返されます。 |
metrics[] |
レスポンスに含める指標。何も指定しない場合は、見つかった指標が返されます。 使用できる値: |
共用体フィールド url_。url_pattern は、レコード検索のメイン識別子です。次のいずれか 1 つのみを指定できます。 |
|
origin |
例: |
url |
例: |
たとえば、Chrome デベロッパー ドキュメントのホームページのデスクトップの Largest Contentful Paint 値をリクエストするには、次のようにします。
{
"url": "https://developer.chrome.com/docs/",
"formFactor": "DESKTOP",
"metrics": [
"largest_contentful_paint"
]
}
レスポンスの本文
リクエストが成功すると、次の構造の record オブジェクトと urlNormalizationDetails を含むレスポンスが返されます。
{
"record": {
"key": {
object (Key)
},
"metrics": [
string: {
object (Metric)
}
]
},
"urlNormalizationDetails": {
object (UrlNormalization)
}
}
たとえば、前のリクエストのリクエスト本文に対するレスポンスは次のようになります。
{
"record": {
"key": {
"formFactor": "DESKTOP",
"url": "https://developer.chrome.com/docs/"
},
"metrics": {
"largest_contentful_paint": {
"histogram": [
{
"start": 0,
"end": 2500,
"density": 0.9815
},
{
"start": 2500,
"end": 4000,
"density": 0.0108
},
{
"start": 4000,
"density": 0.0077
}
],
"percentiles": {
"p75": 651
}
}
},
"collectionPeriod": {
"firstDate": {
"year": 2022,
"month": 9,
"day": 12
},
"lastDate": {
"year": 2022,
"month": 10,
"day": 9
}
}
}
}
キー
Key は、このレコードを一意として識別するすべてのディメンションを定義します。
{
"formFactor": enum (FormFactor),
// Union field url_pattern can be only one of the following:
"origin": string,
"url": string
// End of list of possible types for union field url_pattern.
}
| フィールド | |
|---|---|
formFactor |
フォーム ファクタは、すべてのユーザーがこのレコードのサイトにアクセスするために使用したデバイスクラスです。 フォーム ファクタが指定されていない場合は、すべてのフォーム ファクタの集計データが返されます。 |
共用体フィールド url_。URL パターンは、レコードが適用される URL です。url_ は次のいずれかになります。 |
|
origin |
注: |
url |
注: |
指標
metric は、1 つのウェブ パフォーマンス指標(First Contentful Paint など)に関するユーザー エクスペリエンス データの集計セットです。これには、一連の bins、特定のパーセンタイル データ(p75 など)として、実際の Chrome の使用状況の概要ヒストグラムが含まれる場合があります。また、ラベル付きの分数が含まれる場合もあります。
{
"histogram": [
{
object (Bin)
}
],
"percentiles": {
object (Percentiles)
}
}
または
{
"fractions": {
object (Fractions)
}
}
| フィールド | |
|---|---|
histogram[] |
指標のユーザー エクスペリエンスのヒストグラム。ヒストグラムには少なくとも 1 つのビンがあり、すべてのビンの密度の合計は約 1 になります。 |
percentiles |
指標の一般的な有用なパーセンタイル。パーセンタイルの値の型は、ヒストグラム ビンに指定された値の型と同じになります。 |
fractions |
このオブジェクトには、合計が 1 に近いラベル付きの割合が含まれています。 分数は小数点以下 4 桁に丸められます。 |
ビン
bin は、開始から終了まで、または終了が指定されていない場合は開始から正の無限大までの、データの個別の部分です。
ビンの開始値と終了値は、それが表す指標の値の型で指定されます。たとえば、First Contentful Paint はミリ秒単位で測定され、int として公開されるため、その指標ビンでは開始タイプと終了タイプに int32 が使用されます。ただし、累積レイアウト シフトは単位のない小数で測定され、文字列としてエンコードされた小数として公開されるため、指標ビンでは値の型に文字列が使用されます。
{
"start": value,
"end": value,
"density": number
}
| フィールド | |
|---|---|
start |
Start はデータビンの開始です。 |
end |
end はデータビンの終了です。end が入力されていない場合、ビンには終了がなく、start から +inf まで有効です。 |
density |
指定された指標でこのビンの値を経験したユーザーの割合。 密度は小数点以下 4 桁に丸められます。 |
パーセンタイル
Percentiles には、特定の統計パーセンタイルにおける指標の合成値が含まれます。これらは、ユーザーの合計数のうち、特定の割合のユーザーが経験した指標の値を推定するために使用されます。
{
"P75": value
}
| フィールド | |
|---|---|
p75 |
ページ読み込みの 75% で、この値以下の指標が観測されました。 |
分数
Fractions には、合計が 1 に近いラベル付きの割合が含まれています。各ラベルはページ読み込みを何らかの方法で説明しているため、このように表される指標は数値ではなく個別の値を生成すると考えることができます。また、分数は特定の個別の値が測定された頻度を表します。
{
"label_1": fraction,
"label_2": fraction,
...
"label_n": fraction
}
ヒストグラム ビンの密度値と同様に、各 fraction は数値 0.0 <= value <= 1.0 であり、合計すると約 1.0 になります。
UrlNormalization
URL を正規化してルックアップの成功率を高めるために実行される正規化アクションを表すオブジェクト。これらは、指定された url_pattern の検索が失敗することがわかっている場合に実行される基本的な自動変更です。リダイレクトの追跡などの複雑なアクションは処理されません。
{
"originalUrl": string,
"normalizedUrl": string
}
| フィールド | |
|---|---|
originalUrl |
正規化アクションの前にリクエストされた元の URL。 |
normalizedUrl |
正規化アクション後の URL。これは、合理的に検索できる有効なユーザー エクスペリエンス URL です。 |
レート上限
CrUX API は、Google Cloud プロジェクトごとに 1 分あたり 150 クエリに制限されており、無料で提供されています。この上限と現在の使用量は、Google Cloud コンソール で確認できます。この割り当ては、ほとんどのユースケースで十分なはずです。割り当てを増やすために料金を支払うことはできません。