Black 導入
更新日: 2022/03/26
概要
Python のコードを自動整形してくれる Black を導入してみた
経緯
Python のコードは PyCharm にて書いていて整形も PyCharm にある設定でやっていました。
最近では Vim でコーディングする機会が増え、気軽にコードを書いたら自動整形してくれると嬉しいなと思って前々から気になっていた Black を導入してみようとなりました。
導入方法
Black のインストール
$ pip install black
基本これだけで使えます。
必要があれば設定ファイルを書きます。
$ vim pyproject.toml
私のは下記のように書いてます。
[tool.black]
line-length = 88
target-version = ['py39']
include = '\.py$'
exclude = '''
/(\.direnv|\.eggs|\.git|\.hg|\.mypy_cache|\.nox|\.tox|\.venv|venv|test_venv|\.svn|_build|buck-out|build|dist)/
'''
- line-length
1行にかける文字数の上限。 -
target-version
対象のコードが書かれている Python のバージョン。
Python 3.9 を使っているのでpy39
。 -
include
自動整形の対象ファイルを指定。
現在私のリポジトリには拡張子が.py
のものしかないのでこのようにしてます。 - exclude
除外するファイルを指定します。下記に記載したヘルプを見るとextend-exclude
を使用すればデフォルトで指定しているファイル(—exclude TEXT
内に記載があります)に加えての指定ができます。
ただ、 Black のバージョンが変わった際にデフォルトが変わる可能性もありますし、何を除外しているかファイルを見たら一目瞭然なので私はデフォルトに加えて記載するようにしました。
(私はテスト用の venv test_venv を足してます)
(参考:Black のヘルプ抜粋)
$ black -h
・・・
--exclude TEXT A regular expression that matches files and
directories that should be excluded on
recursive searches. An empty value means no
paths are excluded. Use forward slashes for
directories on all platforms (Windows, too).
Exclusions are calculated first, inclusions
later. [default: /(\.direnv|\.eggs|\.git|\.h
g|\.mypy_cache|\.nox|\.tox|\.venv|venv|\.svn
|_build|buck-out|build|dist)/]
--extend-exclude TEXT Like --exclude, but adds additional files
and directories on top of the excluded ones.
(Useful if you simply want to add to the
default)
・・・
使い方
自動整形
# ファイルを指定して整形
$ black <file path>
# カレントディレクトリ配下を全部やりたければ
$ black .
フォーマットチェック
このコマンドをしても整形されない。
$ black —check <file path>
コメント
フォーマットチェックを CI のテストに入れて、整形されずにマージされるのを防ぐことが可能です。もう入れました。
また、Black 導入時・設定ファイル変更時・自動整形をかける前には対象の確認のためにも1度チェックしてから使ったほうが diff が大量に出ることを防げますのでおすすめです。
おわりに
まだ開発を始めたばかりのプロジェクトであれば比較的入れやすいと思います。
入れれば書き方の部分で議論が不要となりますので楽です。
また、テストを必ず書いていれば自動整形によるバグ(想定していない整形でコードが壊れること)があったとしても気づけると思いますのでテストは必ず書いておきましょう。