はじめに
Pythonプロジェクトの品質を保つことは、長期的な保守性と読みやすさを確保するために非常に重要です。本記事では、Pythonの代表的なコード品質向上ツールである pylint, black, isort の使用方法と、これらを組み合わせた効果的な開発ワークフローについて解説します。
1. pylint: 強力な静的解析ツール
pylintは、Pythonコードの品質チェックと静的解析を行う強力なツールです。
インストール
pip install pylint
使用方法
pylint your_script.py
実行例
以下のようなPythonスクリプト(example.py
)があるとします:
def greet(name):
print("Hello, " + name + "!")
greet("Alice")
unused_var = 10
pylintを実行すると:
$ pylint example.py
************* Module greet_script
greet_script.py:1:0: C0114: Missing module docstring (missing-module-docstring)
greet_script.py:2:0: C0116: Missing function or method docstring (missing-function-docstring)
greet_script.py:6:0: C0103: Constant name "unused_var" doesn't conform to UPPER_CASE naming style (invalid-name)
-----------------------------------
Your code has been rated at 2.50/10
pylintは、命名規則、ドキュメント、未使用変数などの問題を指摘します。
主な機能
- コーディング規約違反の検出
- エラーや潜在的な問題の指摘
- コードの複雑さの分析
- 重複コードの検出
カスタマイズ
.pylintrc
ファイルを使用して、プロジェクトごとにルールをカスタマイズできます。
2. black: 意見の余地なしの自動フォーマッタ
blackは、PEP 8に準拠した一貫性のあるコードスタイルを自動的に適用します。
インストール
pip install black
使用方法
black your_script.py
実行例
以下のようなPythonスクリプト(example.py
)があるとします:
def long_function_name(
var_one, var_two, var_three,
var_four):
print(f'{var_one} {var_two} {var_three} {var_four}')
long_function_name('hello', 'world', 'python',
'formatting')
blackを実行すると:
$ black example.py
reformatted example.py
All done! ✨ 🍰 ✨
1 file reformatted.
実行後のexample.py
:
def long_function_name(var_one, var_two, var_three, var_four):
print(f"{var_one} {var_two} {var_three} {var_four}")
long_function_name("hello", "world", "python", "formatting")
特徴
- 設定不要で即座に使用可能
- 一貫性のあるフォーマットを強制
- コードレビューでのスタイル議論を減少
3. isort: インポート文の整理
isortは、Pythonのimport文を自動的に整理し、一貫性のある形式にフォーマットします。
インストール
pip install isort
使用方法
isort your_script.py
実行例
以下のようなPythonスクリプト(example.py
)があるとします:
import sys
import os
from my_module import my_function
import numpy as np
from datetime import datetime
isortを実行すると:
$ isort example.py
Fixing example.py
実行後のexample.py
:
import os
import sys
from datetime import datetime
import numpy as np
from my_module import my_function
主な機能
- インポート文のアルファベット順整列
- セクションごとの分類(標準ライブラリ、サードパーティ、ローカル)
- 複数行インポートの最適化
統合ワークフロー
これら3つのツールを組み合わせることで、効果的なコード品質管理ワークフローを構築できます。
- コード作成
- isortでインポート文を整理
- blackでコードフォーマットを統一
- pylintで静的解析を実行
このワークフローを自動化するために、pre-commitフックやCIパイプラインを使用することをおすすめします。
統合ワークフローの実行例
以下のようなexample.py
ファイルがあるとします:
import sys
import os
from datetime import datetime
import numpy as np
from my_module import my_function
def long_function_name(
var_one, var_two, var_three,
var_four):
print(f'{var_one} {var_two} {var_three} {var_four}')
long_function_name('hello', 'world', 'python',
'formatting')
unused_var = 10
統合ワークフローを実行:
$ isort example.py
$ black example.py
$ pylint example.py
最終的なexample.py
:
import os
import sys
from datetime import datetime
import numpy as np
from my_module import my_function
def long_function_name(var_one, var_two, var_three, var_four):
print(f"{var_one} {var_two} {var_three} {var_four}")
long_function_name("hello", "world", "python", "formatting")
unused_var = 10
pylintの出力:
************* Module example
example.py:10:0: C0103: Function name "long_function_name" doesn't conform to snake_case naming style (invalid-name)
example.py:10:0: C0116: Missing function or method docstring (missing-function-docstring)
example.py:15:0: W0612: Unused variable 'unused_var' (unused-variable)
-----------------------------------
Your code has been rated at 6.67/10
まとめ
pylint, black, isortを使用することで、Pythonプロジェクトのコード品質を大幅に向上させることができます。これらのツールを日常的な開発プロセスに組み込むことで、一貫性のある、読みやすく、メンテナンスしやすいコードベースを維持することができるでしょう。実行例からわかるように、各ツールは異なる側面からコードの品質向上に貢献します。これらを組み合わせることで、より効果的なコード品質管理が可能になります。