blog

ソフトウェア開発|PyLintの長所、短所、危険性

PyLintを最大限に活用しましょう。...

Oct 31, 2025 · 5 min. read
シェア

PyLintを最大限に活用しましょう。

木にノック: PyLintは実際にかなり良いです!

「PyLintは命を救う」というのは大げさな表現ですが、あなたが思っているほど大げさではありません。最悪の場合、テスト実行の時間を節約できるだけです。よく言えば、本番環境での複雑なバグを回避するのに役立ちます。

Pros

恥ずかしながら、これはよくあることです。テストには必ず名前がついています。誰も名前なんて気にしていませんし、自然な名前なんて見つからないのが普通です。例えば次のようなコードです:

  1. def test_add_small():
  2.     # Math, am I right?
  3.     assert 1 + 1 == 3
  4.    
  5. def test_add_large():
  6.     assert 5 + 6 == 11
  7.    
  8. def test_add_small():
  9.     assert 1 + 10 == 11

テストは有効です:

  1. collected 2 items                                                                        
  2. test.py ..
  3. 2 passed

しかし、テスト名をオーバーライドすると、テストフレームワークはそのテストをスキップしてしまいます!

実際には、これらのファイルには何百行もの行があり、新しいテストを追加する人はすべての名前を知らないかもしれません。誰かがテストの出力をよく見なければ、すべてうまく見えます。

最悪なのは、数日、数ヶ月、あるいは数年かかることです。

PyLintがそれを見つけます。

良き友人のように、PyLintはあなたを助けてくれます。

  1. test.py:8:0: E0102: function already defined line 1
  2.      (function-redefined)

短所

90年代のシットコムのように、PyLintについて学べば学ぶほど疑問が増えます。以下は在庫モデリングプログラムの通常のコードです:

  1. """Inventory abstractions"""
  2. import attrs
  3. @attrs.define
  4. class Laptop:
  5.     """A laptop"""
  6.     ident: str
  7.     cpu: str

しかし、PyLintは独自の意見を持っていて、それを事実として述べることを恐れていないようです:

  1. $ pylint laptop.py | sed -n '/^laptop/s/[^ ]*: //p'
  2. R0903: Too few public methods (0/2) (too-few-public-methods)

危険な部分

PyLintは毎月1,200万ダウンロードされています。

偽陽性が多いかもしれない検査を追加する姿勢は. "".

あなたのために

PyLintは素晴らしいものですが、扱いには注意が必要です。PyLintをあなたのために使うために、私が推奨する3つのことを紹介します:

修正版

驚かないように、使用している PyLint のバージョンを修正してください!

文書で定義    

  1. [project.optional-dependencies]
  2. pylint = ["pylint"]

コードで定義してください:

  1. from unittest import mock

これは以下のコードに相当します:

  1. # noxfile.py
  2. @nox.session(python=VERSIONS[-1])
  3. def refresh_deps(session):
  4.     """Refresh the requirements-*.txt files"""
  5.     session.install("pip-tools")
  6.     for deps in [..., "pylint"]:
  7.         session.run(
  8.             "pip-compile",
  9.             "--extra",
  10.             deps,
  11.             "pyproject.toml",
  12.             "--output-file",
  13.             f"requirements-{deps}.txt",
  14.         )

デフォルトで無効に

すべてのチェックを無効にしてから、誤検知率が高いと思われるチェックを有効にしてください。

  1. # noxfile.py
  2. @nox.session(python="3.10")
  3. def lint(session):
  4.     files = ["src/", "noxfile.py"]
  5.     session.install("-r", "requirements-pylint.txt")
  6.     session.install("-e", ".")
  7.         session.run(
  8.         "pylint",
  9.         "--disable=all",
  10.         *(f"--enable={checker}" for checker in checkers)
  11.         "src",
  12.         )

チェッカー

私のお気に入りのチェッカーを紹介します。プロジェクトの一貫性を高め、明らかなミスを防ぎます。

  1. checkers = [
  2.     "missing-class-docstring",
  3.     "missing-function-docstring",
  4.     "missing-module-docstring",
  5.     "function-redefined",

PyLintを使う

PyLint の良いところだけを使うことができます。一貫性を保つために CI で実行し、通常のチェッカーを使ってください。

悪い部分を手放す:デフォルトでインスペクターを無効にします。

危険な部分を避ける:事故を避けるためにバージョンを修正します。

Read next