スタイルガイド「pep8」
Pythonではpep8というスタイルガイドがよく利用されています。Pythonの標準ライブラリに含まれています。ただ、公式でも謳っていますが、あくまで参考程度で「プロジェクトで明確なコーディング規約があるのであればそちらに従ってくださいよ」という程度の規約になっています。
公式ドキュメント
https://pep8-ja.readthedocs.io/ja/latest/
具体的なルール
- インデントはスペース4つ
- インデントはスペース
- 1行の長さは最大79文字
- トップレベルの関数やクラスは2行ずつ開けて定義する。
- 改行は演算子の後にする。
- importする場合は行を開ける。
- import文の順番(標準ライブラリ→サードパーティ→自作ライブラリ)
オペランド(演算子)は改行時は前に記述する。
1 2 3 4 |
aaaaaaaaa = 10 bbbbbbbbb = 20 c = (aaaaaaaaa + bbbbbbbbb) |
余計な空白を使わない。
listやタプル内での余計な空白は使わない。(下の例でいえば[ eggs: 2 ]などと記述しない)
1 |
spam(ham[1], {eggs: 2}) |
Flake8
PythonのLinterです。Linterとはソースコードを解析して文法の誤りだけでなくバグの原因となりそうな部分を検出、警告してくれるツールです。
仕組み
以下の三つのlinterをラップしています。
PyFlakes
バグの検出
pycodestyle
コードスタイルがpep8に沿っているかのチェックを行います。
maccabe
コードの複雑度のチェックを行います。
インストール
1 |
pep install flake8 |
実行
1 |
flake8 <flake8を実行するファイル> |
フォーマッターとは?
コードのスタイルをチェックして、自動的に修正・整形してくれるツールです。
Black
pep8+α(pep8をさらに厳しくした)のルールで自動整形を行います。なので、flake8で修正したコードとほぼ同じになります。
カスタマイズ性が低い。(というかほとんどカスタマイズできない)
逆に言えば、カスタマイズできないのでフォーマットが統一されるので他の人が書いたコードでも差異がなく読みやすくなるというメリットがあります。
インストール
1 |
pip install black |
整形実行
1 |
black <blackの実行対象のファイル> |
修正箇所だけ知りたい場合
「--diffオプション」を付けます。
1 |
black <blackの実行対象のファイル> --diff |
isort
flake8やblackではpep8で定義されているimport文の順番までは修正してくれません。それを実現してくれるライブラリです。pep8に沿って以下の順番にimport文をソートしてくれます。
- Python標準ライブラリ
- サードパーティ製ライブラリ
- プロジェクト独自ライブラリ
さらに各グループ内でライブラリ名のアルファベット順にソートしてくれます。
インストール
1 |
pip install isort |
実行
1 |
isort <isortを実行するファイル> |
懸念点
Flack8やblack間などライブラリ間で競合する可能性がある点
例
Flake8では1行あたり79文字以内が良いとしているが、Blackでは1行あたり88文字以内が良いとしている。
対処法としては、Blackは前述のとおりカスタマイズがほとんどできないのでFlack8側に設定を加えることで対処することになります。(上記の対処であればFlake8の公式ページに対処法の記載があります。)
VSCodeの拡張プラグイン
autopep8
flake8に沿って文法チェックしてくれるVSCodeプラグインです。
setting.jsonの設定
以下の設定を追加します。VSCodeの拡張機能に「Python」というものがありたいてい最初に入れることになるのですが、デフォルトで「pyLint」というlinterが有効になっているので無効にします。
1 2 |
"python.linting.pylintEnabled": false, "python.linting.flake8Enabled": true |
pylintEnabledをoffにしてflake8Enabledをonにします。(pylintもlinterなのですが、flake8を使うことでpep8に従っているかをチェックすることが可能です。)
Black Formatter
Blackに沿って自動フォーマットしてくれるVSCodeプラグインです。
以下の設定をします。
Default Formatter
Black Formatterを指定します。
Format On Save
チェックを付ける。
これらの設定をすることでPythonファイル保存時に自動で整形してくれるようになります。
この記事へのコメントはありません。