Git Hooks
Gitでは、Git Hooks を使うことでgitコマンドの実行中にスクリプトを実行することができます。 例えば、コミットやプッシュの前にステージングされたファイルに対してformatやlintを実行できます。 Git Hooks の管理を簡単にするツールがいくつかあります。 以下のセクションでは、それらのツールで Biome を使う方法を紹介します。
Lefthook
Section titled LefthookLefthookは高速で依存性のない、クロスプラットフォーム対応のフックマネージャです。 NPM経由でインストールできます。
Gitリポジトリのルートにlefthook.yml
というファイルを追加します。
以下は Lefthook の設定例です:
-
コミット前にformatとlintのチェックを行う
-
コミット前にformatチェックやlintを行い、安全な修正を行う
stage_fixed: true
は、ステージングされたファイルを再度ステージングします。 -
プッシュ前にformatとlintのチェックを行う
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 のフックを設定することができます:
lint-staged
Section titled lint-stagedlint-stagedは、JavaScriptのエコシステムで最も使われているツールのひとつです。
husky の設定に以下の項目を追加します:
lint-staged の設定は package.json
に直接埋め込まれます。
Git Hooks を実行するときに便利なコマンドの例です:
処理されなかったファイルがない 場合を示すエラーを非表示にするため、コマンド実行時に--no-errors-on-unmatched
を使用することを忘れないでください。
git-format-staged
Section titled git-format-stagedlefthook、pre-commit、lint-staged などの他のツールとは対照的に、git-format-staged は内部的に git stash
を使用しません。
これにより、ステージングされていない変更とステージングされた変更の間で衝突が発生した場合に、手動で介入する必要がなくなります。
詳しくは git-format-staged と他のツールの比較 を参照してください。
設定例:
-
コミット前にformatとlintのチェックを行う
-
コミット前にformatやlintのチェック・安全な修正を行う
pre-commit
Section titled pre-commitpre-commitは、多言語フックマネージャーです。 Biome は biomejs/pre-commit リポジトリ経由で4つの pre-commit のフックを提供します。
hook id | description |
---|---|
biome-ci | formatのチェック、インポート文が正しく並んでいるかのチェック、lint |
biome-check | format、インポート文の整理、lint、コミットされたファイルへ安全な修正の適用 |
biome-format | コミットされたファイルのformat |
biome-lint | lint、コミットされたファイルへ安全な修正の適用 |
以下の例では、リポジトリに pre-commit をインストールして pre-commit install
を実行したと仮定します。
biome-check
フックを使いたい場合は、プロジェクトのルートにある .pre-commit-config.yaml
というファイルに次の設定を追加してください:
これで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
に以下のようなフックを書くことができます:
Biome は--files-ignore-unknown=true
を指定することで未知のファイルを無視するため、pre-commit の files
オプションは必須ではありません。
Shell script
Section titled Shell script独自のシェルスクリプトを使うこともできます。 クロスプラットフォームの互換性に関する問題に遭遇する可能性があることに注意してください。 前のセクションで紹介したような専用ツールの使用をおすすめします。
シェルスクリプトの例:
-
コミット前にformatとlintのチェックを行う
-
コミット前にformatやlintのチェック、安全な修正を行う
すでにステージングされたファイルに新たな変更がある場合は、フックを失敗させていることに注意してください。