📖

PythonのLinter、Formatterについて

2022/04/22に公開
2

Pythonのコーディングをする機会が増えてきたので、コーディングスタイルを考える負荷を減らすためにLinter、Formatterについて調べた。
自分用の忘備録。

linterとは

linterとは、コードに問題点がないかを確認する静的解析ツールのこと。
例えばPythonの場合、bool値の比較は==ではなくisで比較するなど、PEP8に従った書き方になっているかをチェックする。
linterによっては、変数宣言後に一度も使用していない変数はないか、など実行時にエラーになるものや実行時エラーにはならないが潜在的なエラーの原因になる箇所のチェックができるようになるので、コードの問題発見の補助として利用できる。

linterの種類

2022年4月時点で以下が主流みたい。

  1. flake8
    • pycodestyle、pyflakes、mccabeの3つのlinterをまとめたラッパー
  2. pylint
    • VSCodeのデフォルトのlinterとして利用されている。
    • オプションが豊富で多くのチェック項目に対応できる。
  3. Prospector
    • さらに多くのlinterをまとめたラッパー
    • isort、pylintが入っており、mypy、banditもオプションで追加することができる
    • 開発速度が遅く、依存するパッケージ(isortなど)と不整合を起こす場合がある

formatterとは

formatterは、コードのスタイルをチェックするツール。
linterとは違い、スペースの数や挿入位置、改行の位置など、プログラムの動作ではなく見た目に関わる内容を自動修正する。
自動修正により書き方が統一されるので、多くの人が読みやすい書き方でコードを書くことできる。

formatterの種類

2022年4月時点で以下が主流みたい。

  1. autopep8
    • PEP8に準拠するようにコードを整形するツール
    • pycodestyleの検出したエラーを修正してくれる、全てのエラーに対応しているわけではないことに注意
    • Pythonのformatterの中では古株だが、最近は人気が落ちているみたい
  2. yapf
    • Googleが開発しているコードフォーマッター
    • カスタマイズ性が高く、多くの項目を設定できる
      • 例:コードスタイルをpycodestyleやgoogleスタイルに変更する
  3. black
    • 他のフォーマッターよりも制限が厳しく、設定できるオプションがかなり少ないが、細かいスタイルまで統一してくれる
      • 例:シングルクォートとダブルクォートを統一する
    • Django、pandas、Poetryなどで採用されているスタイル
    • 細かくチェックされるため、コーディングスタイルに悩まされる必要がなくなるメリットがあります。

その他コード整形ツール

用途が限定的なツールなど、上記以外の有用なツールには以下のようなものがある。

  1. mypy
    • 型チェックを行うツール
  2. isort
    • import文の並び順をチェック・自動整形するツール
    • PEP8で規定されている標準ライブラリ > サードパーティライブラリ > ローカルライブラリの順に加えて、アルファベット順にソートする
  3. pep8-naming
    • 変数や関数の命名ルールがPEP8に従っているかチェックするツール
  4. Bandit
    • セキュリティ的に問題がありそうな箇所を判定してくれる

Discussion

massomasso

有用な記事をありがとうございます。
誤字を見つけましたので、一応報告させてください。

  • 誤:「性的解析ツール」
  • 正:「静的解析ツール」

※このタイポ、私もよくやるので、よくわかります…

naiq112naiq112

massoさん

ご指摘ありがとうございます!

私もよくやるタイポなので気をつけていたのですが、確認漏れていました…