0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Pythonコードを美しく保てていますか?: Flake8, Black, isort を使ったフォーマット

Last updated at Posted at 2024-12-01

Python でコードを書く際、可読性と一貫性は非常に重要です。 Flake8, Black, isort を使うことで、コードスタイルを自動的にチェック・修正し、クリーンで読みやすいコードを維持できます。この記事では、これらのツールを組み合わせて使う方法と、そのメリットについて解説します。

1. なぜコードスタイルが重要なのか?

一貫性のあるコードスタイルは、複数人での開発時におけるコードの理解と保守を容易にします。スタイルガイドに従うことで、バグの早期発見や、コードレビューの効率化にも繋がります。

2. 各ツールの役割

  • Flake8: PEP 8 (Python のスタイルガイド) への準拠、潜在的なバグ、複雑なコードなどを検出するリンターです。エラーや警告を表示することで、コードの品質向上を支援します。
  • Black: 意見の分かれるフォーマットに関する議論をなくすため、コードを自動的にフォーマットするツールです。設定オプションが少なく、一貫したスタイルを強制的に適用します。
  • isort: import 文をアルファベット順にソートし、標準ライブラリ、サードパーティライブラリ、ローカルライブラリをグルーピングすることで、import 文の整理整頓を行います。

3. ツールのインストール

pip を使ってインストールします:

pip install flake8 black isort

4. 設定ファイル (.flake8, pyproject.toml)

.flake8 ファイルで Flake8 の設定を、pyproject.toml ファイルで Black と isort の設定を行うことができます。

.flake8:

[flake8]
ignore = E203, W503  # 必要に応じて無視するエラーコードを指定
max-line-length = 88  # 行の長さの最大値 (Blackのデフォルトに合わせて88を推奨)
exclude =
    .git,
    __pycache__
    # 除外ファイル

pyproject.toml:

[tool.black]
line-length = 88
target-version = ['py37', 'py38', 'py39', 'py310', 'py311']  # 対象のPythonバージョン

[tool.isort]
profile = "black"  # Blackとの互換性のために"black"プロファイルを指定
multi_line_output = 3  # import文が複数行になる場合のスタイル (3が推奨)
line_length = 88  # Blackに合わせて88に設定

5. Git hooks の活用 (pre-commit)

pre-commit を使用すると、コミット前に自動的に Flake8, Black, isort を実行し、コードスタイルの問題を修正できます。

pip install pre-commit
pre-commit install

.pre-commit-config.yaml ファイルに設定を記述します:

repos:
-   repo: https://github.com/pre-commit/pre-commit-hooks
    rev: v4.4.0  # 最新のタグを使用
    hooks:
    -   id: trailing-whitespace
    -   id: end-of-file-fixer
    -   id: check-yaml
    -   id: check-added-large-files
-   repo: https://github.com/psf/black
    rev: 24.10.0 # 最新のタグを使用
    hooks:
    -   id: black
-   repo: https://github.com/pycqa/flake8
    rev: 7.1.1  # 最新のタグを使用
    hooks:
    -   id: flake8
-   repo: https://github.com/PyCQA/isort
    rev: 5.13.2 # 最新のタグを使用
    hooks:
      - id: isort

6. まとめ

Flake8, Black, isort を導入することで、Python コードのスタイルを自動的に管理し、可読性と一貫性を向上させることができます。これらのツールをワークフローに組み込むことで、よりクリーンで保守しやすいコードベースを構築できます。

この記事が、Python 開発をよりスムーズで効率的なものにする一助となれば幸いです。

付録: 例

整形前のコード:

import requests
import       os
import   sys



def my_function(a   , b):
    print(   a+  b  )




if __name__ == '__main__':
    my_function(1 ,2)

    print(os.path.abspath(__file__))

整形後のコード:

import os


def my_function(a, b):
    print(a + b)


if __name__ == "__main__":
    my_function(1, 2)

    print(os.path.abspath(__file__))

エディタやpre-commitを活用することで、保存時やコミット時に自動で整形され、常に綺麗なコードを保つことができます。

参考文献

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?