VSCodeでFlake8を設定する方法

採用はこちら

VSCodeでPythonを開発する際、コードの書き方や潜在的なミスを自動的にチェックしたい場合に便利なのが「Flake8」です。

Flake8を利用すると、未使用のimport、未定義の変数、空白やインデントの問題、1行が長すぎるコードなどを検出できます。

現在のVSCodeでは、以前使われていたpython.linting.flake8Enabledなどの設定ではなく、Microsoftが提供しているFlake8専用拡張機能を利用する方法が基本です。

ここでは、VSCodeにFlake8を導入する方法から、仮想環境との連携、.flake8による設定、うまく動作しない場合の対処法まで詳しく解説します。

目次

Flake8とは

PythonコードをチェックするLinter

Flake8は、Pythonコードを静的に解析するLinterの一つです。

プログラムを実行しなくてもコードを解析し、問題がある部分を検出できます。

代表的には、次のような問題をチェックできます。

  • 未使用のimport
  • 未定義の変数
  • 不適切な空白
  • インデントの問題
  • 1行の文字数超過
  • PEP 8に関連するスタイル違反

たとえば、次のようなコードがあったとします。

import os

name="Taro"

print(message)

Flake8を実行すると、環境やバージョンによって多少異なりますが、次のような問題を検出できます。

F401 'os' imported but unused
E225 missing whitespace around operator
F821 undefined name 'message'

VSCodeと組み合わせれば、問題のあるコードに波線を表示したり、「Problems」パネルにエラーを一覧表示したりできます。

Flake8は自動整形ツールではない

Flake8はコードをチェックするためのLinterです。

基本的には、検出した問題を自動的に修正するFormatterではありません。

コードを自動整形したい場合は、Blackやautopep8、Ruff formatterなどを組み合わせて使用します。

役割を簡単に整理すると、次のようになります。

Flake8
→ コードの問題を検出する

Blackなど
→ コードを自動整形する

そのため、実務ではFlake8とFormatterを併用することもあります。

VSCodeにFlake8を導入する方法

Python拡張機能をインストールする

まずはVSCodeにMicrosoftのPython拡張機能をインストールします。

VSCode左側の「Extensions」をクリックします。

WindowsやLinuxでは、次のショートカットでも拡張機能画面を開けます。

Ctrl + Shift + X

検索欄に、

Python

と入力します。

Microsoftが提供しているPython拡張機能を選択して、「Install」をクリックします。

拡張機能IDは次のとおりです。

ms-python.python

Python拡張機能は、Pythonインタープリターの選択やデバッグ、補完など、VSCodeでPythonを開発するときの基本機能を提供します。

Flake8拡張機能をインストールする

続いてFlake8専用拡張機能をインストールします。

Extensions画面で、

Flake8

と検索します。

Microsoftが提供しているFlake8拡張機能を選択してください。

拡張機能IDは次のとおりです。

ms-python.flake8

「Install」をクリックすればインストールできます。

現在のVSCodeでは、Python拡張機能内の旧Lint設定を使うのではなく、このFlake8専用拡張機能を利用する方法が基本です。

参考サイト

【初心者向け】Visual Studio Code へ flake8 を導入する #VSCode – Qiita

Flake8をpipでインストールする方法

必ずpipでインストールする必要があるわけではない

MicrosoftのFlake8拡張機能にはFlake8本体が同梱されています。

そのため、単純にVSCode上でLintを行うだけであれば、必ずしも、

pip install flake8

を実行する必要はありません。

Flake8拡張機能をインストールするだけでも利用できます。

ただし、プロジェクトごとにFlake8のバージョンを管理したい場合や、Flake8用のプラグインを利用したい場合は、仮想環境へFlake8をインストールする方法がおすすめです。

Flake8をインストールする

VSCodeでターミナルを開きます。

メニューから、

Terminal
↓
New Terminal

を選択してください。

ターミナルで次のコマンドを実行します。

python -m pip install flake8

環境によっては、

python3 -m pip install flake8

を使用します。

インストール後は、次のコマンドで確認できます。

python -m flake8 --version

ただし、このコマンドで確認できるのは、そのPython環境へFlake8をインストールしている場合です。

VSCode拡張機能に同梱されているFlake8だけを利用している場合は、python -m flake8を実行できるとは限りません。

仮想環境にFlake8をインストールする方法

仮想環境を作成する

Python開発では、プロジェクトごとに仮想環境を用意すると依存パッケージを管理しやすくなります。

プロジェクトフォルダで次のコマンドを実行します。

python -m venv .venv

.venvという仮想環境が作成されます。

Windowsで仮想環境を有効化する

Windowsの場合は、次のように実行します。

.venv\Scripts\activate

PowerShellを使用している場合は、環境によってスクリプト実行ポリシーの設定が必要になることがあります。

macOSやLinuxで仮想環境を有効化する

macOSやLinuxでは、次のコマンドを使用します。

source .venv/bin/activate

仮想環境を有効化したら、Flake8をインストールします。

python -m pip install flake8

これでプロジェクト専用のFlake8環境を用意できます。

VSCodeでPythonインタープリターを選択する

Python: Select Interpreterを使用する

仮想環境を利用する場合は、VSCode側でも正しいPythonインタープリターを選択しておくことが重要です。

コマンドパレットを開きます。

Ctrl + Shift + P

続いて、

Python: Select Interpreter

と入力してください。

作成した.venvのPythonを選択します。

Windowsであれば、次のようなパスになります。

.venv\Scripts\python.exe

macOSやLinuxでは、次のようなパスになります。

.venv/bin/python

Flake8拡張機能のflake8.interpreterを別途指定していない場合、基本的にはVSCodeで選択しているPython環境が利用されます。

VSCodeでプロジェクトのFlake8を使う方法

flake8.importStrategyを設定する

MicrosoftのFlake8拡張機能には、どのFlake8を利用するかを指定するflake8.importStrategyという設定があります。

主な値は次の2つです。

useBundled
fromEnvironment

useBundledでは、Flake8拡張機能に同梱されているFlake8を利用します。

fromEnvironmentでは、選択されているPython環境にインストールされたFlake8を利用しようとします。

プロジェクトの仮想環境へインストールしたFlake8を使いたい場合は、.vscode/settings.jsonへ次のように設定します。

{
    "flake8.importStrategy": "fromEnvironment"
}

選択した環境に利用可能なFlake8が見つからない場合は、バンドル版が利用されることがあります。

プロジェクトごとにFlake8のバージョンを固定したい場合は、仮想環境へFlake8をインストールしたうえでfromEnvironmentを設定すると管理しやすくなります。

flake8.enabledを設定する

Flake8拡張機能のLint機能は、基本的にはデフォルトで有効です。

明示的に設定したい場合は、次のように記述できます。

{
    "flake8.enabled": true
}

Flake8を一時的に無効化する場合は、次のようにします。

{
    "flake8.enabled": false
}

通常はtrueをわざわざ記述する必要はありません。

.flake8ファイルで設定する方法

プロジェクト直下に.flake8を作成する

Flake8の設定をプロジェクト単位で管理する場合は、.flake8ファイルを利用すると便利です。

たとえば、次のような構成にします。

my-project/
├─ .flake8
├─ .venv/
├─ app.py
├─ main.py
└─ requirements.txt

.flake8には、次のような設定を記述できます。

[flake8]
max-line-length = 88
exclude =
    .git,
    .venv,
    __pycache__,
    build,
    dist

このように設定すれば、1行の最大文字数やLint対象から除外するフォルダをまとめて管理できます。

1行の最大文字数を変更する

Flake8では、設定によって長すぎる行をE501として検出できます。

1行の最大文字数を88文字にしたい場合は、次のように設定します。

[flake8]
max-line-length = 88

プロジェクトによっては、

max-line-length = 100

や、

max-line-length = 120

とすることもあります。

チームのコーディング規約やFormatterの設定と揃えておくと管理しやすくなります。

特定のエラーを無視する

特定のFlake8エラーを除外したい場合は、ignoreやextend-ignoreを使用できます。

たとえば、次のように記述します。

[flake8]
extend-ignore =
    E203

複数指定することもできます。

[flake8]
extend-ignore =
    E203,
    W503

ただし、不要なエラーまで大量に無視するとLintの意味が薄れてしまいます。

実際に必要なルールだけを除外することが重要です。

特定のフォルダを除外する

仮想環境やビルドファイルまでチェックすると、不要なエラーが大量に表示されることがあります。

その場合はexcludeを使用します。

[flake8]
exclude =
    .git,
    .venv,
    venv,
    __pycache__,
    build,
    dist

これにより、指定したフォルダをFlake8のチェック対象から除外できます。

settings.jsonでFlake8を設定する方法

flake8.argsを使用する

VSCode側からFlake8へコマンドライン引数を渡したい場合は、flake8.argsを使用できます。

たとえば、1行の最大文字数を88文字にする場合は次のようにします。

{
    "flake8.args": [
        "--max-line-length=88"
    ]
}

複数のオプションを指定する場合は、それぞれ別の文字列として記述します。

{
    "flake8.args": [
        "--max-line-length=88",
        "--extend-ignore=E203"
    ]
}

ただし、チーム開発やCIでも同じルールを利用したい場合は、VSCode固有のsettings.jsonだけに設定を書くより、.flake8などFlake8本体の設定ファイルへ記述するほうが管理しやすいでしょう。

flake8.pathで実行方法を指定する

Flake8拡張機能では、flake8.pathを使って実行するFlake8を指定することもできます。

たとえば、次のように設定できます。

{
    "flake8.path": [
        "${interpreter}",
        "-m",
        "flake8"
    ]
}

選択中のPythonインタープリターを使って、python -m flake8に相当する形で実行させたい場合などに利用できます。

通常のプロジェクトでは、まずflake8.importStrategyを使う構成で十分です。

flake8.ignorePatternsとexcludeの違い

flake8.ignorePatternsはVSCode拡張機能側の設定

VSCodeのFlake8拡張機能には、flake8.ignorePatternsという設定があります。

たとえば、次のように指定できます。

{
    "flake8.ignorePatterns": [
        "**/site-packages/**/*.py"
    ]
}

これはVSCodeのFlake8拡張機能側で除外するための設定です。

excludeはFlake8本体側の設定

一方、.flake8に書く、

[flake8]
exclude =
    .venv,
    build,
    dist

は、Flake8本体側の設定です。

整理すると次のようになります。

flake8.ignorePatterns
→ VSCode拡張機能側

exclude
→ Flake8本体側

CLIやCIでも同じ除外ルールを使用したい場合は、.flake8側へexcludeを書く方法が分かりやすいでしょう。

pyproject.tomlを使う場合の注意点

Flake8では標準設定ファイルとして扱われない場合がある

Pythonでは、ツール設定をpyproject.tomlへまとめるプロジェクトが増えています。

しかし、Flake8本体では一般的に次のファイルが設定ファイルとして利用されます。

.flake8
setup.cfg
tox.ini

そのため、単純に、

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

と記述すれば、標準のFlake8が必ずその設定を読み込むと考えないほうが安全です。

pyproject.tomlでFlake8の設定を管理したい場合は、対応する追加ツールやプラグインを利用する方法があります。

初心者の場合は、まず.flake8を使用すると分かりやすいでしょう。

Flake8が正常に動作しているか確認する方法

意図的にエラーのあるPythonコードを書く

次のようなPythonファイルを作成します。

import os


name="Taro"

print(name)

正常にFlake8が動作していれば、未使用のimportや演算子周辺の空白などに関する指摘が表示されます。

たとえば、次のようなエラーです。

F401 'os' imported but unused
E225 missing whitespace around operator

VSCodeでは、問題のある場所に波線が表示されます。

Problemsパネルを確認する

Flake8の診断結果は「Problems」パネルから一覧表示できます。

WindowsやLinuxでは、次のショートカットを使用できます。

Ctrl + Shift + M

エラーコードや対象ファイル、行番号などを確認できます。

Flake8の代表的なエラーコード

E系のエラー

Eから始まるコードは、主にPEP 8に関連するスタイル上の問題です。

代表例としては、

E225
E501

などがあります。

W系の警告

Wから始まるコードは警告を表します。

空白や改行など、コーディングスタイルに関連する指摘が含まれます。

F系のエラー

Fから始まるコードは、主にPyflakes由来の問題です。

たとえば、

F401

は未使用のimportに関連します。

F821

は未定義の名前に関連します。

単なるスタイル違反だけでなく、コードの不具合につながる問題を検出できるのがFlake8のメリットです。

Flake8が動かない場合の対処法

Flake8拡張機能が有効か確認する

まず、MicrosoftのFlake8拡張機能がインストールされ、有効になっているか確認します。

Extensions画面で、

ms-python.flake8

を確認してください。

無効になっている場合は有効化します。

Pythonインタープリターを確認する

仮想環境のFlake8を使用している場合は、VSCodeが正しいPython環境を選択しているか確認します。

Ctrl + Shift + P
↓
Python: Select Interpreter

から、使用する.venvを選択してください。

仮想環境にFlake8が入っているか確認する

fromEnvironmentを利用している場合は、選択しているPython環境へFlake8がインストールされているか確認します。

python -m pip show flake8

インストールされていない場合は、次のコマンドを実行します。

python -m pip install flake8

Flake8のログを確認する

それでも正常に動作しない場合は、VSCodeのFlake8ログを確認します。

OutputやLanguage StatusなどからFlake8関連のログを開くと、実行時のエラーを確認できます。

さらに詳しいログが必要な場合は、次の設定を利用する方法もあります。

{
    "flake8.trace.server": "verbose"
}

トラブルシューティングが終了したら、必要に応じて元へ戻しましょう。

Flake8とBlackを併用する方法

Flake8とBlackは役割が異なる

Flake8とBlackは競合するツールではなく、役割が異なります。

Flake8はコードをチェックします。

Blackはコードを自動整形します。

そのため、次のように組み合わせて利用できます。

コードを書く
↓
Blackで自動整形
↓
Flake8で問題をチェック

Blackでは1行の長さとして88文字がよく利用されるため、Flake8側も、

[flake8]
max-line-length = 88

として揃える方法があります。

ただし、特定のエラーコードを無視する設定については、利用しているFlake8やBlackなどのバージョン、プロジェクトのルールに合わせて調整することが大切です。

VSCodeでFlake8を設定するときのおすすめ構成

プロジェクト構成

たとえば、次のような構成にすると管理しやすくなります。

my-project/
├─ .vscode/
│  └─ settings.json
├─ .venv/
├─ .flake8
├─ src/
│  └─ main.py
└─ requirements.txt

settings.jsonの例

.vscode/settings.jsonには、次のように設定します。

{
    "flake8.enabled": true,
    "flake8.importStrategy": "fromEnvironment"
}

flake8.enabledはデフォルトでも有効なため、省略しても構いません。

.flake8の例

プロジェクト直下の.flake8には、次のように記述します。

[flake8]
max-line-length = 88
exclude =
    .git,
    .venv,
    __pycache__,
    build,
    dist

そして仮想環境へFlake8をインストールします。

python -m pip install flake8

この構成であれば、VSCodeだけでなくCLIでも、

python -m flake8 .

と実行できます。

VSCodeとCIで同じ設定を共有しやすくなるため、実務でも扱いやすい構成です。

古いFlake8設定には注意する

python.linting.flake8Enabledは現在の基本設定ではない

古いWeb記事では、次のような設定を見かけることがあります。

{
    "python.linting.flake8Enabled": true
}

以前はPython拡張機能からFlake8を有効化する方式が使われていました。

現在はFlake8が専用拡張機能として分離されているため、基本的にはMicrosoftのFlake8拡張機能をインストールして利用します。

古い記事を参考にすると設定が反映されない場合があるため注意しましょう。

VSCodeでFlake8を設定する手順まとめ

VSCodeでFlake8を導入する場合は、次の流れで設定すると分かりやすいでしょう。

1. VSCodeへMicrosoftのPython拡張機能をインストール
↓
2. MicrosoftのFlake8拡張機能をインストール
↓
3. 必要に応じて.venvを作成
↓
4. 仮想環境へFlake8をインストール
↓
5. Python: Select Interpreterで.venvを選択
↓
6. flake8.importStrategyをfromEnvironmentに設定
↓
7. プロジェクト直下に.flake8を作成
↓
8. Pythonファイルを編集してProblemsパネルを確認

最小限の設定で始める場合は、.vscode/settings.jsonを、

{
    "flake8.importStrategy": "fromEnvironment"
}

とし、.flake8を、

[flake8]
max-line-length = 88
exclude =
    .git,
    .venv,
    __pycache__,
    build,
    dist

としておけば十分です。

Flake8を導入することで、単純なスタイル違反だけでなく、未使用のimportや未定義変数なども早い段階で発見しやすくなります。

特にチーム開発では、.flake8にルールをまとめておくことで、VSCode、CLI、CIなど複数の環境でチェック基準を統一しやすくなります。

以上、VSCodeでFlake8を設定する方法についてでした。

最後までお読みいただき、ありがとうございました。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次