Git Hooks
Gitでは、Git Hooks を使うことでgitコマンドの実行中にスクリプトを実行することができます。 例えば、コミットやプッシュの前にステージングされたファイルに対してフォーマットやリントを実行できます。 Git Hooksの管理を簡単にするツールがいくつかあります。 以下のセクションでは、それらのツールでBiomeを使う方法を紹介します。
Lefthook
Section titled LefthookLefthookは高速で依存性のない、クロスプラットフォーム対応のフックマネージャです。 NPM経由でインストールできます。
Gitリポジトリのルートにlefthook.yml
というファイルを追加します。
以下は Lefthook の設定例です:
-
コミット前にフォーマットとリントのチェックを行う
lefthook.yml pre-commit:commands:check:glob: "*.{js,ts,cjs,mjs,d.cts,d.mts,jsx,tsx,json,jsonc}"run: npx @biomejs/biome check --no-errors-on-unmatched --files-ignore-unknown=true --colors=off {staged_files} -
コミット前にフォーマットチェックやリントを行い、安全な修正を行う
lefthook.yml pre-commit:commands:check:glob: "*.{js,ts,cjs,mjs,d.cts,d.mts,jsx,tsx,json,jsonc}"run: npx @biomejs/biome check --write --no-errors-on-unmatched --files-ignore-unknown=true --colors=off {staged_files}stage_fixed: truestage_fixed: true
は、ステージングされたファイルを再度ステージングします。 -
プッシュ前にフォーマットとリントのチェックを行う
lefthook.yml pre-push:commands:check:glob: "*.{js,ts,cjs,mjs,d.cts,d.mts,jsx,tsx,json,jsonc}"run: npx @biomejs/biome check --no-errors-on-unmatched --files-ignore-unknown=true --colors=off {push_files}
glob
と--files-ignore-unknown=true
を併用する必要はありません。
--files-ignore-unknown=true
を指定するだけで、Biomeが現在サポートしている(もしくは将来サポートするかもしれない)ファイルのみを対象にできます。
対象ファイルをさらにコントロールしたい場合は、glob
を使ってください。
--no-errors-on-unmatched
は、どのファイルも処理されなかった場合に発生するエラーを抑制します。
設定後、lefthook install
を実行してフックのセットアップを完了させましょう。
Husky
Section titled HuskyHuskyは、JavaScriptエコシステムで広く使われているフックマネージャーです。 Huskyはステージングされていない変更を無視したり、ステージングされているファイルのみを対象としたりすることができません。 そのため、 lint-staged や git-format-staged といった別のツールと組み合わせて使われることが多いです。
プロジェクトに package.json
が含まれている場合、scripts.prepare
を使ってパッケージのインストール時に自動的に husky のフックを設定することができます:
{ "scripts": { "prepare": "husky" }}
lint-staged
Section titled lint-stagedlint-stagedは、JavaScriptのエコシステムで最も使われているツールのひとつです。
huskyの設定に以下の項目を追加します:
lint-staged
lint-stagedの設定は package.json
に直接埋め込まれます。
Git Hooksを実行するときに便利なコマンドの例です:
{ "lint-staged": { // Run Biome on staged files that have the following extensions: js, ts, jsx, tsx, json and jsonc // 次の拡張子を持つステージングファイルに対してBiomeを実行する: js, ts, jsx, tsx, json and jsonc "**.{js|ts|cjs|mjs|d.cts|d.mts|jsx|tsx|json|jsonc}": [ "biome check --files-ignore-unknown=true", // フォーマットのチェックとリント "biome check --write --no-errors-on-unmatched", // フォーマット、インポート文のソート、リント、安全な修正の適用 "biome check --write --organize-imports-enabled=false --no-errors-on-unmatched", // フォーマットと安全な修正の適用 "biome check --write --unsafe --no-errors-on-unmatched", // フォーマット、インポート文のソート、リント、安全及び安全ではない修正の適用 "biome format --write --no-errors-on-unmatched", // フォーマット "biome lint --write --no-errors-on-unmatched", // リントと安全な修正の適用 ], // あるいは、すべてのファイルを渡し、不明な拡張子を無視することもできます "*": [ "biome check --no-errors-on-unmatched --files-ignore-unknown=true", // フォーマットのチェックとリント ] }}
処理されなかったファイルがない 場合を示すエラーを非表示にするため、コマンド実行時に--no-errors-on-unmatched
を使用することを忘れないでください。
git-フォーマット-staged
Section titled git-フォーマット-stagedlefthook、pre-commit、lint-staged などの他のツールとは対照的に、git-format-staged は内部的に git stash
を使用しません。
これにより、ステージングされていない変更とステージングされた変更の間で衝突が発生した場合に、手動で介入する必要がなくなります。
詳しくは git-format-staged と他のツールの比較 を参照してください。
設定例:
-
コミット前にフォーマットとリントのチェックを行う
.husky/pre-commit git-format-staged --formatter 'biome check --files-ignore-unknown=true --no-errors-on-unmatched \"{}\"' . -
コミット前にフォーマットやリントのチェック・安全な修正を行う
.husky/pre-commit git-format-staged --formatter 'biome check --write --files-ignore-unknown=true --no-errors-on-unmatched \"{}\"' .
pre-commit
Section titled pre-commitpre-commitは、多言語フックマネージャーです。 Biomeは biomejs/pre-commit リポジトリ経由で4つの pre-commit のフックを提供します。
hook id | description |
---|---|
biome-ci | フォーマットのチェック、インポート文が正しく並んでいるかのチェック、リント |
biome-check | フォーマット、インポート文の整理、リント、コミットされたファイルへ安全な修正の適用 |
biome-format | コミットされたファイルのフォーマット |
biome-lint | リント、コミットされたファイルへ安全な修正の適用 |
以下の例では、リポジトリに pre-commit をインストールして pre-commit install
を実行したと仮定します。
biome-check
フックを使いたい場合は、プロジェクトのルートにある .pre-commit-config.yaml
というファイルに次の設定を追加してください:
repos:- repo: https://github.com/biomejs/pre-commit rev: "v0.1.0" # タグやハッシュ値を指定してください hooks: - id: biome-check additional_dependencies: ["@biomejs/biome@1.4.1"]
これでgit commit
を実行したときに biome check --write
が実行されるようになりました。
pre-commitは別々にツールをインストールするため、pre-commitはどのツールがインストールされるか知っておく必要があります。
そのため、additional_dependencies
オプションを使ってBiomeのバージョンを指定しなくてはいけません。
Biomeがすでに npm
のパッケージとしてローカルリポジトリにインストールされている場合、Biomeを更新する際に package.json
と .pre-commit-config.yaml
の両方を更新するのは開発者の負担になります。
提供されているBiomeフックを使う代わりに、独自のローカルフックを指定できます。
例えば、npm
を使用する場合、.pre-commit-config.yaml
に以下のようなフックを書くことができます:
repos: - repo: local hooks: - id: local-biome-check name: biome check entry: npx @biomejs/biome check --write --files-ignore-unknown=true --no-errors-on-unmatched language: system types: [text] files: "\\.(jsx?|tsx?|c(js|ts)|m(js|ts)|d\\.(ts|cts|mts)|jsonc?)$"
Biomeは--files-ignore-unknown=true
を指定することで未知のファイルを無視するため、pre-commitの files
オプションは必須ではありません。
Shell script
Section titled Shell script独自のシェルスクリプトを使うこともできます。 クロスプラットフォームの互換性に関する問題に遭遇する可能性があることに注意してください。 前のセクションで紹介したような専用ツールの使用をおすすめします。
シェルスクリプトの例:
-
コミット前にフォーマットとリントのチェックを行う
.git/hooks/pre-commit #!/bin/shset -eunpx @biomejs/biome check --staged --files-ignore-unknown=true --no-errors-on-unmatched -
コミット前にフォーマットやリントのチェック、安全な修正を行う
.git/hooks/pre-commit #!/bin/shset -euif ! git status --short | grep --quiet '^MM'; thenprintf '%s\n' "ERROR: Some staged files have unstaged changes" >&2exit 1;finpx @biomejs/biome check --write --staged --files-ignore-unknown=true --no-errors-on-unmatchedgit update-index --again
すでにステージングされたファイルに新たな変更がある場合は、フックを失敗させていることに注意してください。