■ はじめに
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 の コードフォーマッター => コードを自動整形してくれる
“Any color you like.” (どれでも好きな色を) Black is the uncompromising Python code formatter. Black は、妥協なきPythonコードフォーマッターです。 cf. compromise = 妥協(uncompromising = 妥協しない)
1)特徴
* PEP8 + α で、自動整形してくれる
「+ α」の例
[1] どこで改行するか [2] シングルクォートを使うのか、ダブルクォートを使うのか などなど、個人の好み的な部分も強制してくれる => 逆にゆるーくやりたい場合は、不向きかも、、、
2)デモ
【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 Code ~ Python拡張 ~
https://dk521123.hatenablog.com/entry/2020/10/10/000000
Github ~ Github Actions 編 ~
https://dk521123.hatenablog.com/entry/2021/11/04/142835
パッケージ管理 ~ Poetry ~
https://dk521123.hatenablog.com/entry/2021/11/09/155903