GitHub ActionsでLighthouseを実行する(treosh/lighthouse-ci-actions@v2使用)
サイトのリニューアル関連の記事の続きです。
新しいサイトはGitHubで管理しているので、GitHub Actionsを使った色々なテストをやっています。 そのうちの1つが、Lighthouseを使ったSEO対策やWebサイトの速度に関するテストです。
速度に影響すると思ってなかったところで影響が出てたりとか、そういうのが見えて結構面白いです。
Workflowの定義
まずはforkflowの定義ファイルを作ります。
.github/workflows/test.yml
的な名前のやつ。
手軽にテストを実行するために、今回はtreosh/lighthouse-ci-actionsというものを使わせていただきます。 lhciコマンドを使うって手もあるみたいだけれど、面倒臭そうだったので。
name: Lighthouse CI
on: [push]
jobs:
lighthouse-test:
name: Lighthouse CI
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- uses: actions/setup-node@v1
- run: npm ci
- run: npm run build
- uses: treosh/lighthouse-ci-actions@v2
with:
configPath: '.github/workflows/lighthouse.json'
uploadArtifacts: true
npm run build
してnpm start
するタイプのよくあるNode.jsのプロジェクトでの設定です。
このあたりを置き換えれば、Node.js以外のプロジェクトでも使えるはずです。
lighthouserc.jsonの定義
次に、workflowで指定した設定ファイルの中身を作ります。
.github/workflows/lighthouse.json
にしたやつ。
これはディレクトリの指定とか無いので、どこに置いても大丈夫です。 CI関連をまとめたかったのでworkflowsの中に置いてみたけれど、あんまりお行儀は良く無い気もする。
以下はこのサイトで使っている設定を少し簡略化したやつです。
{
"ci": {
"collect": {
"startServerCommand": "npm start",
"url": [
"http://localhost:3000/",
"http://localhost:3000/blog"
]
},
"assert": {
"preset": "lighthouse:no-pwa",
"assertions": {
"canonical": "off",
"uses-http2": "off"
}
}
}
}
.ci.collect.url
にテストしたい対象のURLを、.ci.assert
の中に適用したいルールを指定します。
ここでも.ci.collect.startServerCommand
を書き換えてあげればNode.jsじゃないプロジェクトのテストも出来ます。
上記の例では最小限で、meta canonicalが正しいかのテスト(localhostなのでまずエラーになる)と、http2を使ってるかどうかのテスト(localhostなので常にエラーになる)を無効にしています。 サイトの特性に合せて設定してみてください。閾値とかも決められるようになっているみたいです。
使えるルールの一覧とか探したんですが見当たらなかったので、プリセットの定義ファイルを見ながらなんとかしました。
試してみる
これで、あとはGitHubにpushすればLighthouseが自動で実行されるはずです。
実行結果は以下のような感じで、GitHubのActionsタブから見ることが出来ます。
とても手軽でとても便利。
参考: