ブラウザ・パフォーマンス・テスト
アプリケーションがウェブインターフェースを提供し、GitLab CI/CDを使用している場合、ブラウザで保留中のコード変更のレンダリングパフォーマンスへの影響を素早く判断することができます。
概要
GitLab では、Web サイトのレンダリングパフォーマンスを測定するための無料のオープンソースツールSitespeed.io を使用しています。GitLab が構築したSitespeed プラグインは、分析した各ページのパフォーマンススコアをbrowser-performance.json
と呼ばれるファイルに出力します。
ユースケース
次のようなワークフローを考えてみましょう。
- マーケティングチームのメンバーが、新しいツールを追加してエンゲージメントをトラッキングしようとしています。
- ブラウザのパフォーマンスメトリクスを使用すると、変更がエンドユーザーにとってページのユーザビリティにどのような影響を与えているかを確認できます。
- メトリクスは、変更後にページのパフォーマンススコアが下がっていることを示しています。
- 詳細なレポートを見ると、新しいJavaScriptライブラリが
<head>
、ページの読み込み速度に影響を与えていることがわかります。 - 彼らはフロントエンド開発者に助けを求め、ライブラリを非同期にロードするように設定します。
- フロントエンド開発者はマージリクエストを承認し、本番環境へのデプロイを承認します。
ブラウザのパフォーマンステストの仕組み
まず、ブラウザパフォーマンスレポートのアーティファクトを生成するジョブを.gitlab-ci.yml
ファイルに定義します。GitLab はこのレポートをチェックし、各ページの主要なパフォーマンスメトリクスをソースブランチとターゲットブランチの間で比較し、マージリクエストに情報を表示します。
ブラウザパフォーマンスジョブの例については、ブラウザパフォーマンステストの設定を参照してください。
.gitlab-ci.yml
にブラウザ・パフォーマンス・ジョブを初めて追加した場合など、ブラウザ・パフォーマンス・レポートに比較するデータがない場合、ブラウザ・パフォーマンス・レポート・ウィジェットは表示されません。そのブランチをターゲットとするマージリクエストで表示する前に、ターゲットブランチ (.gitlab-ci.yml
など) で少なくとも 1 回実行する必要があります。ブラウザパフォーマンステストの設定
この例では、GitLab CI/CDとDocker-in-Dockerを使用したsitespeed .ioコンテナをコード上で実行する方法を示します。
- まず、Docker-in-DockerビルドでGitLab Runnerをセットアップします。
-
.gitlab-ci.yml
ファイルで、デフォルトの Browser Performance Testing CI/CD ジョブを以下のように設定します:include: template: Verify/Browser-Performance.gitlab-ci.yml browser_performance: variables: URL: https://example.com
上記の例では
- CI/CDパイプラインに
browser_performance
ジョブを作成し、URL
で定義したウェブページに対して sitespeed.io を実行し、主要メトリクスを収集します。 - Kubernetesクラスタでは動作しないテンプレートを使用しています。Kubernetesクラスタを使用している場合は、代わりに
template: Jobs/Browser-Performance-Testing.gitlab-ci.yml
。
このテンプレートはsitespeed.io の GitLab プラグインを使用し、後でダウンロードして分析できるように、完全な HTML sitespeed.io レポートをブラウザパフォーマンスレポートのアーティファクトとして保存します。この実装では、常に最新のブラウザパフォーマンスのアーティファクトを使用します。GitLab Pagesが有効になっていれば、ブラウザで直接レポートを見ることができます。
CI/CD 変数を使ってジョブをカスタマイズすることもできます:
-
SITESPEED_IMAGE
:ジョブに使用するDockerイメージを設定します(デフォルトsitespeedio/sitespeed.io
)が、イメージのバージョンは設定できません。 -
SITESPEED_VERSION
:ジョブに使用するDockerイメージのバージョンを設定します (デフォルト14.1.0
)。 -
SITESPEED_OPTIONS
:必要に応じて、追加のsitespeed.ioオプションを設定します(デフォルトnil
)。詳細はsitespeed.ioのドキュメントを参照してください。
例えば、指定したURLでsitespeed.ioが実行する回数を上書きしたり、バージョンを変更したりできます:
include:
template: Verify/Browser-Performance.gitlab-ci.yml
browser_performance:
variables:
URL: https://www.sitespeed.io/
SITESPEED_VERSION: 13.2.0
SITESPEED_OPTIONS: -n 5
劣化しきい値の設定
劣化アラートの感度を設定することで、メトリクスのわずかな低下をアラートとして受け取らないようにすることができます。これは、DEGRADATION_THRESHOLD
CI/CD 変数を設定することで行います。以下の例では、Total Score
メトリックが 5 ポイント以上低下した場合にのみアラートが表示されます:
include:
template: Verify/Browser-Performance.gitlab-ci.yml
browser_performance:
variables:
URL: https://example.com
DEGRADATION_THRESHOLD: 5
Total Score
メトリクスは、sitespeed.io のcoach パフォーマンススコアに基づいています。詳細はcoach のドキュメントを参照してください。
レビューアプリのパフォーマンステスト
上記のCIのYAML設定は静的環境に対するテストに最適で、動的環境にも拡張できますが、いくつかの追加ステップが必要です:
-
browser_performance
のジョブは動的環境の開始後に実行されなければなりません。 -
review
のジョブの場合:- 動的URLのURLリストファイルを生成します。
- このファイルをアーティファクトとして保存します。例えば、ジョブの
script
にecho $CI_ENVIRONMENT_URL > environment_url.txt
と記述します。 - このリストをURL環境変数(URLもしくはURLを含むファイル)として
browser_performance
のジョブに渡してください。
- これで、sitespeed.ioコンテナを任意のホスト名とパスに対して実行できるようになります。
.gitlab-ci.yml
ファイルは以下のようになります:
stages:
- deploy
- performance
include:
template: Verify/Browser-Performance.gitlab-ci.yml
review:
stage: deploy
environment:
name: review/$CI_COMMIT_REF_SLUG
url: http://$CI_COMMIT_REF_SLUG.$APPS_DOMAIN
script:
- run_deploy_script
- echo $CI_ENVIRONMENT_URL > environment_url.txt
artifacts:
paths:
- environment_url.txt
rules:
- if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH
when: never
- if: $CI_COMMIT_BRANCH
browser_performance:
dependencies:
- review
variables:
URL: environment_url.txt