Python | テスト・設計・品質:isort

Python Python
スポンサーリンク

isortって何?まずは役割を一言でつかむ

isort は、Python の import 文を自動で並び替えてくれるツールです。
「import の順番なんてどうでもよくない?」と思うかもしれませんが、
実はコードの読みやすさ・保守性に大きく関わります。

import がバラバラだと、

どのライブラリを使っているのか一目で分からない
標準ライブラリ・外部ライブラリ・自作モジュールが混ざって読みにくい
重複 import や未使用 import に気づきにくい

といった問題が起きます。

isort は、これを 機械的に整理してくれる“import の片付け係” です。


before / after で isort の効果を体感する

isort をかける前の import

わざと順番をぐちゃぐちゃにした例を見てみます。

import mymodule
import os
import requests
from datetime import datetime
import numpy as np
from mypackage import utils
import sys
Python

標準ライブラリ
外部ライブラリ
自作モジュール

が全部混ざっていて、どれがどれか分かりません。

isort をかけた後の import

isort を実行すると、こう整理されます。

import os
import sys
from datetime import datetime

import numpy as np
import requests

import mymodule
from mypackage import utils
Python

標準ライブラリ
外部ライブラリ
自作モジュール

の順にグループ分けされ、さらに アルファベット順 に並びます。

import の並びが整うだけで、
「このファイルが何に依存しているか」が一瞬で分かるようになります。


isort がやってくれることを深掘りする

import のグループ分け

isort は、import を次のように分類します。

標準ライブラリ
サードパーティ(外部ライブラリ)
自作モジュール(ローカル)

この順番で並べ、グループの間に空行を入れます。

これにより、

「このファイルは標準ライブラリの何を使っている?」
「外部ライブラリは何を使っている?」
「自作コードの依存はどれ?」

が一目で分かります。

アルファベット順で並べる

同じグループ内では、import をアルファベット順に並べます。

import os
import sys
Python

のように、規則性があるので探しやすくなります。

from import の並び替えもしてくれる

例えば、

from mypackage import zeta, alpha, beta
Python

isort をかけると、

from mypackage import alpha, beta, zeta
Python

のように並び替えてくれます。

import の統合もしてくれる

import os
import os.path
Python

のようなコードがあれば、isort がまとめてくれます。


black と isort の関係を理解する

black は import の順番を変えない

black はコード全体を整形しますが、
import の順番は変えません

つまり、

black → コード全体の整形
isort → import の整形

という役割分担になります。

実務では、

black → isort → flake8(または ruff)

という流れが定番です。

black と isort の競合を避ける設定

昔は black と isort が「改行位置」などでケンカすることがありましたが、
今は isort に black モードがあります。

[tool.isort]
profile = "black"

これを pyproject.toml に書くだけで、
black と isort が同じ整形ルールで動くようになります。


isort を使うと何が嬉しいのか

読みやすさが一気に上がる

import が整理されるだけで、
コードの「入り口」がきれいになります。

ファイルを開いた瞬間に、

「このファイルは何を使っているのか」
「依存関係はどれくらいあるのか」

が分かるので、理解が早くなります。

コードレビューが楽になる

レビューでよくある指摘に、

「import の順番がバラバラです」
「標準ライブラリと外部ライブラリが混ざっています」

があります。

isort を使えば、
こういう「機械でできる指摘」は全部自動で解決できます。

レビューは「設計」や「テスト」の話に集中できるようになります。

チーム全体でスタイルが統一される

import の順番は、人によって好みが分かれます。

標準ライブラリを上にしたい
外部ライブラリを先にしたい
アルファベット順にしたい

こういう議論を全部捨てて、
「isort に任せる」で統一できます。


isort を導入するときの注意点

既存プロジェクトにいきなりかけると差分が大量に出る

既存コードに isort をかけると、
import の順番が全部変わるので、Git の差分が大量に出ます。

現実的には、

「isort 導入専用のコミット」を一度作る
以降は isort を前提に開発する

という流れが安全です。

保存時に自動で isort を走らせると快適

VS Code や PyCharm では、

「保存時に isort を実行する」

という設定ができます。

これをオンにすると、
import の並び替えを意識する必要がなくなります。


初心者が isort から学べること

「依存関係を整理する」感覚が身につく

isort を使っていると、

標準ライブラリ
外部ライブラリ
自作モジュール

という分類が自然と頭に入ります。

これは、設計の観点でも非常に重要です。

外部ライブラリへの依存が多すぎないか
自作モジュールの依存が循環していないか
import の構造が複雑になりすぎていないか

こういうことに気づきやすくなります。

「機械に任せるところ」と「自分で考えるところ」を分ける

import の順番は機械に任せる
ロジックや設計は自分で考える

という分担ができるようになります。

これは、ruff や black と同じで、
「人間が考えるべきことに集中する」ための大事なスキルです。


まとめ(isortは「importの整理整頓係」)

初心者向けに isort をまとめるとこうなります。

isort は、Python の import 文を自動で並び替えてくれるツールで、標準ライブラリ・外部ライブラリ・自作モジュールをグループ分けし、アルファベット順に整えてくれる。
import が整理されることで、コードの読みやすさ・依存関係の把握・レビュー効率が大きく向上する。
black と組み合わせると、コード全体の整形と import 整理が自動化され、スタイルの統一が簡単に実現できる。
初心者にとっては、「依存関係を整理する感覚」や「機械に任せる部分と自分で考える部分の分離」を学ぶ良いきっかけになる。

もしあなたが今書いているファイルの import 部分を貼ってくれたら、
「isort をかける前」と「かけた後」の違いを、実際のコードで一緒に見ていきます。

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