Ruff の全てのルールを確認する – isort (I) –

Python

勉強を兼ねて Ruff の lint ルールを全て確認しています。(多分更新していきます…)
主観でおススメ度を 5 段階でつけているので、良ければ参考にしてください。

  • 5: デメリットがないため、必ずつけるべき
  • 4: 一定の制約がつくが、つけた方が良い
  • 3: つけてもつけなくてもいい
  • 2: つけない方がいい場面が多い
  • 1: つけるべきではない(そんなルールあるのかって感じですが…)

公式のルール一覧はこちら

isort (I)

isortは python の import 順序を整頓してくれるサードパーティーライブラリです。

以下のように組み込みモジュール、外部モジュール、ローカルモジュールを abc 順でソートします。

from __future__ import absolute_import

import os
import sys

from third_party import (lib1, lib2, lib3, lib4, lib5, lib6, lib7, lib8,
                         lib9, lib10, lib11, lib12, lib13, lib14, lib15)

from my_lib import Object, Object2, Object3

print("Hey")
print("yo")

Ruff の IXXX のルールは isort に関する lint ルールになります。

I001(unsorted-imports) 5/5

isort の順に並んでいない場合に警告を出します。

悪い例

import pandas
import numpy as np

良い例:

import numpy as np
import pandas

import の順序が一意になるメリットは大きいので、導入推奨です。

I002(missing-required-import) 5/5

暗に仮定されている必要な import 文がない場合に警告を出します。

悪い例:

import typing

良い例:

from __future__ import annotations

import typing

特に型アノテーションについて I002 が役に立つ場面が多いように思います。
例えば Python の 3.8 以前の場合、以下のコードはfrom __future__ import annotationsがモジュールの先頭に必要になります。

def sum_value(value: list[int]) -> int: # ! lint[int]は3.9から標準で使える型アノテーション
    pass

忘れていたら実行時にエラーになるだけなので、事前に教えてもらって損はないと思います。lint に追加推奨です。

終わりに

isort(I) はANNなどと違い開発体験を飛躍的に向上させたりはしませんが、git での diff 管理や検索性能など、細かなところで恩恵を得られる lint ルールだと思います。
野放図の import が開発に寄与することがないので、余裕があれば是非 lint の対象に加えていきたいです。

lint に追加する場合はpyproject.tomlに以下を追記してください。

[tool.ruff.lint]
select = ["I"]

コメント

タイトルとURLをコピーしました