huskyを利用してgit hooksを作る
プロジェクトにはESLintやPrettierなどのツールをインストールしていますが、共同作業の相手が、VSCodeやプラグインを使っていなかったらそれらのツールには効果が出ません
なので、git pre-commit hookという「コミットする前に必ずすること」というルールを強制的に追加して、プロジェクトのフォーマットを守りましょう
ESLintをインストール
まずは以下のコマンドを使ってESLintをインストールしましょう
npm i -D eslint
次は、ESLintのコンフィグファイルを作ります、.eslintrc
というファイルを作成します
{
"env": {
"es6": true,
"browser": true
},
"extends": [],
"rules": {
}
}
AirbnbのESLintプラグインをインストールします
npm i -D eslint-config-airbnb-base
プラグインを.eslintrcに追加します
{
"env": {
"es6": true,
"browser": true
},
- "extends": [],
+ "extends": ["airbnb-base"],
"rules": {
}
}
VSCodeのプラグインESLintはインストールされているなら、ここでJSコードのLintが出るようになりました
.eslintignore
というファイルを作成しましょう
node_modules
dist
.github
Prettierをインストール
prettierをインストールします
npm i -D prettier
prettierのコンフィグファイル:.prettierrc
を作成します
{
"singleQuote": true
}
次はVSCodeのセーブフォーマット機能を追加します
.vscode/settings.json
というファイルを作ります
{
"editor.formatOnSave": true,
"editor.defaultFormatter": "esbenp.prettier-vscode"
}
これでファイルをセーブすれば自動的にフォーマットできるようになりました
prettierに無視してほしいファイルを定義します
.prettierignore
というファイルを作成しましょう
dist
.github
lint-stagedをインストール
フォマットのコミット検査の時間を短縮するため、lint-stagedをインストールしましょう
npm i -D lint-staged
コンフィグファイル.lintstagedrc
を作成しましょう
{
"*.js": [
"npx eslint . --fix",
"npx prettier --write ."
]
}
git add .
でファイルをステージに加えてから、npm lint-staged -v
というコマンドを打ったら、ステージ内の全てのJSファイルに対して、"npx eslint . --fix"、"npx prettier --write ."の二つのコマンドを自動的に実行されます
huskyをインストール
npm i -D husky
huksyのコンフィグファイル:.huskyrc
を作成します
{
"hooks": {
"pre-commit": "lint-staged",
"commit-msg": "commitlint -E HUSKY_GIT_PARAMS"
}
}
huksyの初期化コマンドを実行します
npx husky-init && npm install
.husky
フォルダが生成されました、.husky/pre-commit
というファイルを編集します
#!/usr/bin/env sh
. "$(dirname -- "$0")/_/husky.sh"
-npm test
+npm run lint-staged
package.json
のscripts
にlint-staged
コマンドを追加します
{
"scripts": {
...
"lint-staged": "lint-staged"
}
}
これで変なコードを入れて、コミットしてみたら阻止されることができました
Discussion