Next.jsでLighthouse CIを導入して、PRの時点でLighthouseのスコアを確認できるようにする
Next.jsでのプロジェクトでLighthouse CIを確認できるようにしたので、その時に行ったことになります。
参考にした記事
Lighthouseとは
Webアプリのパフォーマンス、品質、および正確性を向上させるためのオープンソースの自動化ツールです。
Lighthouse is an open-source, automated tool for improving the performance, quality, and correctness of your web apps.
こちらのようなイメージで各種の状態を確認することができます。
今回のゴール
PR作成時点で以下のようになる
ci/circle: lhci
の部分にビルドの結果が表示
Details
の部分をクリックすると以下のようにlighthouseの結果が表示される
実装した方法
1. Github Actionsに「Lighthouse CI 」をインストール
以下のページからインストールを行う
2. CIの記載
以下のページから実行したいものを選択し、コードの記載
対応しているものは以下になります。
circleCIの場合は以下になります。
version: 2.1 jobs: build: docker: - image: circleci/node:15.12-browsers working_directory: ~/your-project steps: - checkout - run: npm install - run: npm run build - run: sudo npm install -g @lhci/cli@0.8.x - run: lhci autorun
3. .lighthouserc
などのlighthouse用の設定ファイルを記載
以下の部分を参考に、.lighthouserc
の設定を行う
4. build
, start
コマンドがない場合、追加
ci上で計測を行うため、build
, start
のコマンドを追加
"scripts": { "build": "next build", "start": "next start" },
startについては以下のタイミングで呼び出されています。
以上でPR作成時にlighthouseが追加されるようになります。
詰まった箇所について
1. Chrome installation not found
のエラーが出る
こちらについては以下のissuesを参考に--collect.settings.chromeFlags=--no-sandbox
を追加
// その他の処理については省略 module.exports = { ci: { collect: { settings: { chromeFlags: '--no-sandbox' }, // これを追加 }, }, }
2. circleci/node:16
などの-browsers
でないとビルドエラーになる
dockerのimageがcircleci/node:16
の場合、以下のエラーがでるため、修正
// NG docker: - image: circleci/node:16 // OK docker: - image: circleci/node:16-browsers