最近、WordPressをヘッドレスCMS化してNext.jsでWebサイトを構築しました。ホスティングにはNetlifyを使っています。
実際に構築したサイトがこちらです。
青年海外協力隊でアフリカに行ったときからの友達で彼が個人事業主→法人になるタイミングでサイトリニューアルの依頼を受けて構築させていただきました。
(写真・映像の事業を行なっていて、彼の作品は大好きです)
話がそれちゃいましたが、サイト構築時に、悩んでいたことがあります。
それは、Netlifyでデプロイするときコケることがありました。
12:11:26 AM: Failed to compile.
12:11:26 AM: ./app/layout.tsx
12:11:26 AM: 1:1 Error: Run autofix to sort these imports! simple-import-sort/imports
原因としては、ローカル環境でlintのエラーを解消し忘れていたのです。
エンジニアは怠惰であるべきなのに、僕はなぜ毎回こんなことを手動でやっていたのだろう...。
この問題を解消してくれたのがhusky
、lint-staged
になります。
huskyができること
commit
やpush
のタイミングで自動でスクリプトを走らせることができます。今回の僕の問題でいうと、lint
が通っていないにも関わらずpush
してしまい、Netlify
でデプロイされる状態になっていました。
lint
が通っていないcommit
することができなくなります。
Next.jsの開発環境にhuskyを導入してみる
導入の前に基本の理解をしておきます。
💡Husky
Gitフックで任意のプログラムを実行するライブラリ
💡Gitフック
Gitの特定のコマンドの実行前後にスクリプトを実行する仕組み
💡lint-staged
Gitで変更されたファイルにのみlint
やformat
をするためのライブラリ
それでは導入方法についてです。
husky&lint-stagedの導入
パッケージをインストールします。
$ npm install --save-dev husky lint-staged // huskyとlint-stagedの導入
ドキュメントに沿って下記のコマンドを実行します。
$ npx husky init
.husky/
ディレクトリにpre-commit
スクリプトが作成され、package.json
のprepare
スクリプトが更新されます。
package.json
に追加されます。
"scripts": {
"dev": "next dev",
"build": "next build",
"start": "next start",
"lint": "next lint",
+ "prepare": "husky"
},
またルート直下に.huskyファイルが生成されているかと思います。
.husky
├ _
│ ├ pre-commit
│ ├ pre-push
│ └ etc...
└ pre-commit
.husky/pre-commit
ファイルを編集します。
- npm test
+ npx lint-staged
これでインストールは完了しました。
lint-stagedの設定
{
"scripts": {
"dev": "next dev",
"build": "next build",
"start": "next start",
"lint": "next lint",
+ "fix:lint": "eslint --fix",
"prepare": "husky"
},
+ "lint-staged": {
+ "*.{ts,tsx}": "npm run fix:lint"
+ }
}
あとは、プロジェクトの.eslintrc.json
やeslint.config.js
のルールに沿って自動で修正されるようになります。
まとめ
これで品質を保ったコードのみ(lint
を通ったコード)がPRできるようになりました。
開発を始める前にこのあたりを整えておくべきだったなと勉強になりました。