【Python】Python を奇麗に書くためのツール群

■ はじめに

https://dk521123.hatenablog.com/entry/2020/02/07/000000

の続きで、Pythonのコードチェックにおいて、
flake8 以外にも、色々なツールがあふれている。

 そこで、フォーマッターなども含めた
Python を奇麗に書くためのツール群について、整理してみた。

目次

【0】個人的メモ
 1)後日談(2024/03/13)
【1】フォーマッター - Formatter -
 1)autopep8
 2)yapf
 3)black
【2】リンター - Linter -
 1)flake8
 2)pylint
 3)pycodestyle (旧:pep8)
 4)pydocstyle(旧:pep257)
 5)pyflakes
【3】その他ツール
 1)isort
 2)Pylance
 3)mypy
 4)Inspecode / Docstand / Loadroid
【4】比較サイト

【0】個人的メモ

* とりあえず、以下を入れとけばいいかなっと、、、
 + black
 + flake8
 + isort
 + mypy

1)後日談(2024/03/13)

Python解析ツール ~ Ruff ~
https://dk521123.hatenablog.com/entry/2024/03/13/000021

【1】フォーマッター - Formatter -

* コードを自動整形してくれる
* 以下を参考。

https://www.kimoton.com/entry/20181223/1545540702
https://kamatimaru.hatenablog.com/entry/2020/04/26/194619

1)autopep8

* PEP8準拠したPythonのフォーマッタ

インストール

pip install --upgrade autopep8

# Poetry の場合
poetry add autopep8 -D

参考文献
https://itstudio.co/2020/09/26/11077/

2)yapf

* yapf = Yet Another Python Formatter
* google社製

参考文献
https://wonderwall.hatenablog.com/entry/2017/09/03/224500
https://mmtomitomimm.blogspot.com/2018/08/yapf.html
https://uepon.hatenadiary.com/entry/2017/09/11/220015

3)black

* 「妥協のないコード整形ツール」と、うたっているらしい
 => 逆にいうと、細かく設定できない
* 雰囲気を味わいたい場合は、以下のデモを参照。

Black Playground

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

black ~ Python formatter ~
https://dk521123.hatenablog.com/entry/2021/11/10/095258

【2】リンター - Linter -

* 以下を参考。

https://nullpo-dev.net/programming/python/how-to-code-check-too/
https://siderlabs.com/blog/ja/python-lint-pickup-5tools/

Linter(リンター)とは?

* ソースコードの構文をチェックするツール
 => 構文に問題あるコードを事前にチェックしてくれる

1)flake8

* スタイルチェック + エラー解析 + 複雑度チェック
 => pycodestyle + pyflakes + mccabe(マッケイブ) のラッパー
* 詳細は、以下の関連記事を参照のこと。

flake8 ~ Pythonコードチェック ~
https://dk521123.hatenablog.com/entry/2020/02/07/000000

2)pylint

* Python の リンター

参考文献
https://developers-book.com/2020/08/16/239/

3)pycodestyle (旧:pep8)

* PEP 8 準拠

4)pydocstyle(旧:pep257)

* PEP 257 準拠

PEP 257 とは?

* docstring ("""と"""で囲まれたコメント) の 書き方

5)pyflakes

* スタイルに関しては無関知
* 論理的なエラーのみを検出する

【3】その他ツール

1)isort

* isort = Import Sort
 => Import を SORT してくれるツール
 => Pythonのモジュールインポート順を自動修正
 => Black は Import順までチェックしないので
  組み合わせて使うのが吉

2)Pylance

* Microsoft製の拡張機能で、
 静的型チェックに加えて、自動インポートや、型宣言を強制するstrictモード搭載

https://qiita.com/simonritchie/items/33ca57cdb5cb2a12ae16
https://kamocyc.hatenablog.com/entry/2020/07/11/204813

3)mypy

* Python の 静的型チェックをしてくれる
 => 以下の例のようなことを指摘してくれる

Static Typing linter ~ mypy ~
https://dk521123.hatenablog.com/entry/2022/07/19/000000

4)Inspecode / Docstand / Loadroid

* ソニーネットワークコミュニケーションズ株式会社の100%子会社である
 Rocro(ロクロ)が作成
 => 会社名の Rocro とは、継続的インテグレーション(Continuous Integration)が
  円環的で「ロクロ」に似ているかららしい。

* 「Freeプラン」として、1コアであれば今後も無償で利用可能

https://atmarkit.itmedia.co.jp/ait/articles/1709/16/news011.html
https://atmarkit.itmedia.co.jp/ait/articles/1811/08/news057.html
https://cloud.watch.impress.co.jp/docs/news/1152363.html
https://www.apibank.jp/contents/news/inspecode-docstand/
https://ascii.jp/elem/000/001/549/1549251/
https://qiita.com/hikoy/items/a7f0e012c141d4c8e71f

Inspecode (インスぺコード)

* 自動コードレビューサービス

Docstand (ドックスタンド)

* APIドキュメント生成サービス

Loadroid(ロードロイド)

* 自動負荷試験サービス

【4】比較サイト

その現場、現場で好みのやつを使えばいいってことになるが
とはいえ、どれがお勧めなんだって話になると思うので
比較しているサイトをピックアップしてみた。
 => やっぱり各々好みがあるので、色々な意見を聞いたうえで
  組み合わせて使えばいいのかと。。。

https://qiita.com/sin9270/items/85e2dab4c0144c79987d
https://libroworks.co.jp/?p=4115
https://minus9d.hatenablog.com/entry/2018/10/22/235604
https://zenn.dev/yhay81/articles/yhay81-202102-pythonlint

関連記事

flake8 ~ Pythonコードチェック ~
https://dk521123.hatenablog.com/entry/2020/02/07/000000
Python formatter ~ black ~
https://dk521123.hatenablog.com/entry/2021/11/10/095258
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
Python ~ 基本編 / 型指定・Typing ~
https://dk521123.hatenablog.com/entry/2021/12/23/231559