Pythonプロジェクト用のpre-commit環境
pre-commitの設定ファイルを書く際、
.pre-commit-hooks.yamlというファイルがあるレポジトリを指定するとそのレポジトリにその中身をロードして
あらかじめ設定が入ったid
を使って簡単にツールの設定が書けます。
また、そのid
の設定で
black
などのフォーマッターなどのツールを指定した状態で、
language
をpython
とすればpip
で、golang
だったらgo install
で
そのツールをインストールもしてくれます。
ただし、このインストールはpre-commit用の仮想環境の中にインストールされるので
直接black
などのコマンドは使えません。
各種ツールをエディタの中でも使ってフォーマットとかしていると 通常のPATH下にツールを起きたいし、かつ設定も通常状態で共有できるようにしたい。
ということで、特にPythonのプロジェクトでpoetry+pyproject.tomlを使った環境であれば
ツールのパッケージをdev環境でインストールするようにして
pre-commitの設定ではlanguage
をsystem
にして環境にインストールされたものを使うようにし、
設定項目も全てpyproject.tomlで管理することで
poetryの仮想環境下であればpre-commitでも通常作業でも同じツール、設定を使うことが出来ます。
ただ、現状Pythonのpre-commit環境で色々とやろうと思うと結構たくさんパッケージをインストールする必要があって 同じ様なものが増えてきたのでそれ用のレポジトリ/パッケージを作ってまとめて 簡単にかけるようにしてみました。
pyproject-pre-commit
上のブログポストで使っているツールに関して、
全てlanguage: system
でidを作っている.pre-commit-hooks.yamlを持っています。
これを使って
1 2 3 4 5 6 7 8 9 |
|
みたいな感じでrepo
は一つだけで後はid
をリストしていくだけで各種ツールが実行されます。
language: system
で
パッケージはインストールしない設定になっているので別途インストールする必要がありますが、
そちらはレポジトリの
pyproject.toml
の中にtool.poetry.dependencies
として管理されています。
このレポジトリ自体がPyPIに公開されているので、
1
|
|
とすれば必要なツールが一通り入るようになっています。
poetryを使っている場合、
1
|
|
で開発ように追加しておけば
1 2 3 4 5 6 7 |
|
のようにpyproject.tomlの中もスッキリとなります。
後はpyproject.tomlに各種ツールの設定を追加すればOK。
この設定に関してもある程度 .pre-commit-hooks.yamlの中で 書いてしまう事も考えられますが 上書きできないオプションとかで利用する側から変更できないのも嫌なので 一旦最小限のことだけにして各種設定は各プロジェクトの中で書くようにしています。
使用例
chatgpt-prompt-wrapper/.pre-commit-config.yaml at main · rcmdnk/chatgpt-prompt-wrapper · GitHub
chatgpt-prompt-wrapper/pyproject.toml at main · rcmdnk/chatgpt-prompt-wrapper · GitHub