🎨

よく使うPythonのフォーマッターとリンターの設定

2024/09/17に公開

それぞれがどういう意味かなどは世の中に多くのソースがありますので、この記事では割愛し、開発者向けに設定方法などをまとめようと思います。

Flake8

インストール方法

  • pip を使う場合
pip install flake8
  • poetryを使う場合
poetry add -D flake8

オプション

よく使う設定項目のみ記載します。

オプション 内容
ignore 特定のエラーを無視する(※1)
max-line-length ワンライナーの文字数制限。デフォルトは79文字
exclude 特定のフォルダをチェック対象外にする

(※1)例えばF401はimport hogeとあるのにhogeが使われていない時に出るエラーコードです

オプションの設定方法例

.flake8を使う場合

ファイルを作成し以下のように記載

[flake8]
ignore = F401, F402
max-line-length = 120
exclude = "hoge"

pyproject.tomlを使う場合

これは少し注意が必要なのですが、flake8はpyproject.tomlに対応しておりません。
そのためラッパーのpyproject-flake8を使う必要があります

poetry add -D pyproject-flake8

pyproject.tomlには以下のように記載します。

[tool.flake8]
max-line-length = 120

実行方法はflake8pflake8に変えるだけです。

Black

言わずとしれたフォーマッターです。
インストールはflake8blackに書き換えれば問題ありません。

またpyproject.tomlに設定を書く際に例としては以下のようになります。

[tool.black]
target-version = ['py310']
line-length = 120
  • target-version
    • この例だとpython3.10の構文で使用するコードに対応してフォーマットするように指示するという意味になります
  • line-length
    • 1行の最大文字数の制限です

isort

[tool.isort]
line_length = 120
multi_line_output = 3
include_trailing_comma = true
ensure_newline_before_comments = true
use_parentheses = true
オプション 内容
line_length 1行の文字数。blackに合わせましょう
multi_line_output 複数行になる場合のType指定
include_trailing_comma 末尾にカンマを含めるか(blackに合わせるとtrue)
ensure_newline_before_comments コメント前の改行を許可
use_parentheses 改行する場合にバックスラッシュではなく、カッコを使用

multi_line_outputの設定は0-11まであります。以下が参考になります。
https://pycqa.github.io/isort/docs/configuration/multi_line_output_modes.html

VScodeで自動フォーマット

いつも開発時は保存時に勝手にフォーマットしてくれるようにしています。
blackisort を適用する場合は以下の拡張機能を入れてください。

その後、settings.jsonに以下のように記載するだけです。

{
    "editor.defaultFormatter": "ms-python.black-formatter",
    "editor.formatOnSave": true,
    "editor.codeActionsOnSave": {
        "source.organizeImports": true
    }
}

Discussion