はじめに
- 計測したいページごとにPageSpeed Insightsの結果を確認するのは面倒くさいし記録を残したいってなると尚更なので何か解決策ないかなと思い調べたところAPIが公開されてるようなので備忘録的にまとめようかなと思います。
- 今回は、ウェブサイトの方の結果とCurlで叩いた結果を比較しながら、レスポンスの中身を見ていこうと思います。(実装はまた今度。)
PageSpeed Insightsとは
- Webサイトのページ速度を計測する際に用いるツールです。
- Lighthouseとの大きな違いとしてLighthouseは手元のPCで動作するのに対して、PageSpeed InsightsはGoogleが用意したサーバ上で動作するようです。
- パッとみたところによるとフィールドデータ(とOrigin Summary)とラボデータというものがあります。(下画像参照)
- フィールドデータは、過去28日間に特定条件でアクセスしたユーザーのデータに基づく結果
- ラボデータは、今時点のシミュレーション結果
- ということはフィールドデータを確認したいならばLighthouseでもPageSpeed Insightsでもどちらでも良さそうですね。
- また、ラボデータを取るならば、Googleが用意したサーバ上で動作するPageSpeed Insightsの方が結果が安定しそうだなといった印象です。
指標 | 表している結果 |
---|---|
フィールドデータ | 過去28日間に特定条件でアクセスしたユーザーのデータに基づく結果 |
Origin Summary | ドメイン全体におけるフィールドデータ |
ラボデータ | 今時点のシミュレーション結果 |
PageSpeed Insights APIを試す
- ご丁寧に使い方は公式がしっかりと書いてくれています。
- 今回は結果のJsonが欲しいだけなのでAPIキーの取得はせずterminalから以下のようにCurlコマンドを実行し、結果をファイルに出力します。
$ curl "https://www.googleapis.com/pagespeedonline/v5/runPagespeed?url=https://developers.google.com" > result.json
出力されたJson
- 第一階層はこんな感じになってます。
- リファレンス見たところ、以下の3つが「フィールドデータ」「Original Summary」「ラボデータ」に該当しそうですね。
{
"captchaResult": "CAPTCHA_NOT_NEEDED",
"kind": "pagespeedonline#result",
"id": "https://developers.google.com/",
"loadingExperience": {...},
"originLoadingExperience": {...},
"lighthouseResult": {...},
"analysisUTCTimestamp": "2021-11-03T05:48:54.232Z"
}
プロパティ名 | 説明 |
---|---|
loadingExperience | エンドユーザーのページ読み込みエクスペリエンスの指標。 |
originLoadingExperience | オリジンの集約されたページ読み込みエクスペリエンスのメトリック |
lighthouseResult | オブジェクトとしての監査URLに対する灯台の応答。 |
灯台?(笑)
結果の突合
フィールドデータとloadingExperience
ラボデータとlighthouseResult
- ラボデータは上述のとおり、シミュレーション値なのでちょっと値ずれました。リクエストごとにちゃんとシミュレーションしてるんですね。(でも、大体結果としては一致)
最後に
- なんかJsonの結果とサイト画面上の結果が合わないなと思ってたのですが、サイト画面上はデフォルトでモバイルの結果を表示しており、APIはデフォルトでデスクトップの結果を返すみたいです。クエリパラメータに
strategy=mobile
を付加してあげればモバイル版の結果を取得することができました。
$ curl "https://www.googleapis.com/pagespeedonline/v5/runPagespeed?url=https://developers.google.com&strategy=mobile" > result_mobile.json
- フィールドデータは定期的にラボデータはページの更新を行った際に計測すると良さそうですね。
- 次回はAPIキーを発行して、プログラム上から実行してみたいと思います。