Black 導入

投稿日: 2022/03/26
更新日: 2022/03/26
シェア:

URL copied!


概要

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 が大量に出ることを防げますのでおすすめです。

おわりに

まだ開発を始めたばかりのプロジェクトであれば比較的入れやすいと思います。
入れれば書き方の部分で議論が不要となりますので楽です。
また、テストを必ず書いていれば自動整形によるバグ(想定していない整形でコードが壊れること)があったとしても気づけると思いますのでテストは必ず書いておきましょう。