見出し画像

Python入門 (12) - Flake8とautopep8

Pythonの静的解析ツール「Flake8」とフォーマッター「autopep8」の使い方をまとめました。

前回

1. Flake8の使い方

「Flake8」は、Pythonのコードの静的解析ツール(link)です。静的解析は、コードを実行せずに行なう検証になります。

「Flake8」は以下の3つのツールを同時に実行します。

・pycodestyle : コードがコーディング規約(PEP8)に準じているかを確認。
・pyflakes : コードに論理的なエラーが無いかを確認。
・mccabe : 循環的複雑度のチェック。

◎ インストール
Pythonの仮想環境で、以下のコマンドを実行します。

$ pip install flake8

◎ 使い方
使い方は、次のとおりです。

$ flake8 <対象ファイル>
$ flake8  --show-source <対象ファイル>

例えば、以下のコード「hello.py」をチェックします。

import os

str  =     "Hello Flake8!"

print(    str)

次のよう問題が表示されます。

$ flake8 hello.py
hello.py:1:1: F401 'os' imported but unused    # 'os'はインポートされたが、使用されていない
hello.py:3:4: E221 multiple spaces before operator    # 演算子の前に複数のスペース
hello.py:3:7: E222 multiple spaces after operator    # 演算子の前に複数のスペース
hello.py:5:7: E201 whitespace after '('    # (の後にスペース
hello.py:5:15: W292 no newline at end of file   # ファイル終端に改行がない

--show-source」で、コードの修正箇所も示されます。

$ flake8 --show-source hello.py
hello.py:1:1: F401 'os' imported but unused
import os
^
hello.py:3:4: E221 multiple spaces before operator
str  =     "Hello Flake8!"
   ^
hello.py:3:7: E222 multiple spaces after operator
str  =     "Hello Flake8!"
      ^
hello.py:5:7: E201 whitespace after '('
print(    str)       ^
hello.py:5:15: W292 no newline at end of file
print(    str)  

全て手動修正しても良いですが、「autopep8」を使うことで、コーディング規約の部分を自動修正することができます。

2. autopep8の使い方

「autopep8」は、Pythonコードをコーディング規約(PEP)準拠に自動修正するフォーマッターです。「autopep8」は、「pycodestyle」によって報告される問題のほとんどを自動修正することができます。

◎ インストール
Pythonの仮想環境で、以下のコマンドを実行します。

$ pip install autopep8

◎ 使い方
使い方は、次のとおりです。「-i」は変更内容で上書きするオプションです。

$ autopep8 -i <対象ファイル>

先ほどの、「hello.py」を自動修正します。

$ autopep8 -i hello.py

コーディング規約の部分のみ自動修正できていることがわかります。

import os

str = "Hello Flake8!"

print(str)

3. VSCodeの設定

VSCodeで「Flake8」「autopep8」を利用するには、次のように設定します。1行の文字数制限は無視を指定しています。

    "python.linting.enabled": true, // Lintの有効化
    "python.linting.pylintEnabled": false, // pylintの無効化
    "python.linting.flake8Enabled": true, // flake8の有効化
    "python.linting.lintOnSave": true, // ファイル保存時のlint実行
    "python.formatting.provider": "autopep8", // フォーマッタにautopep8
    "editor.formatOnSave": true, // ファイル保存時にフォーマッタ実行
    "python.linting.flake8Args": ["--ignore=E501"], // 1行の文字数制限を無視

次回


この記事が気に入ったらサポートをしてみませんか?