【Python】Python formatter ~ black ~

■ はじめに

https://dk521123.hatenablog.com/entry/2020/02/07/000000
https://dk521123.hatenablog.com/entry/2021/11/08/221219

の続き。
色々調べて、flake8 と black を使いそうなので、
今回は、Python の フォーマッター「black」について、
設定の仕方など、深堀りする。

目次

【1】black
 1)特徴
 2)デモ
【2】使用上の注意
 1)flake8 と共存させる場合
【3】環境構築
 1)pip でのインストール
 2)Poetry での設定
 3)VS Code での設定

【1】black

* Python の コードフォーマッター
 => コードを自動整形してくれる

https://github.com/psf/black

“Any color you like.” (どれでも好きな色を)

Black is the uncompromising Python code formatter.
Black は、妥協なきPythonコードフォーマッターです。

cf. compromise = 妥協(uncompromising = 妥協しない)

1)特徴

* PEP8 + α で、自動整形してくれる

「+ α」の例

[1] どこで改行するか
[2] シングルクォートを使うのか、ダブルクォートを使うのか

などなど、個人の好み的な部分も強制してくれる
 => 逆にゆるーくやりたい場合は、不向きかも、、、

2)デモ

Black Playground

【2】使用上の注意

1)flake8 と共存させる場合

* Defalut設定のままだと、
 black の最大文字列数(default= 88) と flake8 の最大文字列数(default= 79)と
 異なるので、最大文字列数が 79< line < 88 だとエラーになってしまう

対応方法:オプションで調整する (VSCodeの場合、settings.jsonを変更)

    "python.linting.flake8Args": [
        "--max-line-length=110",
        "--ignore=E203,W503,W504"
      ],
    "python.formatting.blackArgs": [
        "--line-length=110"
      ],

参考文献
https://qiita.com/shoot16625/items/fa79d9d6f5ca0ce53b66

【3】環境構築

1)pip でのインストール

pip install black

2)Poetry での設定

poetry add --dev black
or
poetry add black -D

# ついでに以下。
poetry add flake8 -D
poetry add isort -D
poetry add mypy -D

補足:isort / mypy について

* 詳細は、以下の関連記事を参照のこと。

https://dk521123.hatenablog.com/entry/2021/11/08/221219
https://dk521123.hatenablog.com/entry/2022/07/19/000000

3)VS Code での設定

* setting.json を変更する

https://qiita.com/y-w/items/614843b259c04bb91495

setting.json (各設定値の説明は後述)

{
  "python.formatting.provider": "black",
  "python.linting.flake8Enabled": true,
  "python.linting.enabled": true,
  "python.linting.pylintEnabled": false,
  "python.linting.lintOnSave": true, 
  "editor.formatOnSave": true,
  "editor.formatOnType": true,
  "editor.formatOnPaste": false,
  "editor.formatOnPaste": false,
  "python.linting.flake8Args": [
    "--max-line-length=110"
  ],
  "python.formatting.blackArgs": [
    "--line-length=110"
  ],
}

説明

# 設定名 設定値 説明
1 python.formatting.provider black フォーマッターをblackに設定
2 python.linting.flake8Enabled true flake8をON
3 python.linting.enabled true リンターをON
4 python.linting.pylintEnabled false pyLintをOFF
5 python.linting.lintOnSave true 保存時にリンターがON
6 editor.formatOnSave true 保存時にフォーマットをON
7 editor.formatOnType true タイピング時にフォーマットをON
8 editor.formatOnPaste false 貼り付け時のフォーマットはOFF
9 --max-line-length 110 flake8の最大行数
10 --line-length 110 blackの最大行数

参考文献

https://blog.hirokiky.org/entry/2019/06/03/202745
https://project.nikkeibp.co.jp/idg/atcl/19/00127/090400002/?ST=idg-cm-software&P=2
https://qiita.com/tsu_0514/items/2d52c7bf79cd62d4af4a
https://pyteyon.hatenablog.com/entry/2020/10/04/052716
https://misprochef.com/posts/python-black/

関連記事

Python を奇麗に書くためのツール群
https://dk521123.hatenablog.com/entry/2021/11/08/221219
flake8 ~ Pythonコードチェック ~
https://dk521123.hatenablog.com/entry/2020/02/07/000000
Static Typing linter ~ mypy ~
https://dk521123.hatenablog.com/entry/2022/07/19/000000
Python解析ツール ~ Ruff ~
https://dk521123.hatenablog.com/entry/2024/03/13/000021
Visual Studio CodePython拡張 ~
https://dk521123.hatenablog.com/entry/2020/10/10/000000
GithubGithub Actions 編 ~
https://dk521123.hatenablog.com/entry/2021/11/04/142835
パッケージ管理 ~ Poetry ~
https://dk521123.hatenablog.com/entry/2021/11/09/155903