📦 名前空間破壊(Namespaces are one honking great idea)
🧭 はじめに
このページでは、import * に代表される名前空間の破壊を、単なるスタイル違反ではなく設計不良として整理する。
Python の Zen にある Namespaces are one honking great idea は、「衝突を避けよう」という小さな話ではない。意図をコードに刻めという強いメッセージである。
🎯 ねらい
- 「どこから来た名前か分からない」状態の危険性を言語化する
- import 設計を可読性・変更容易性の問題として捉え直す
❓ 問題の定義
- 名前の出所が曖昧で、コードを追っても意味が分からない
- 依存関係が見えず、変更時の影響範囲を推測できない
名前空間が壊れると、コードレビューが成立しない。
🧪 よくある症状
from x import *from module import thingが大量に並ぶload,parse,saveのような汎用名が各所に存在utils.pyが肥大化し、何でも入っている
❌ 悪い例
何でも集まる utils.py
- 日付処理
- DBアクセス
- 文字列整形
- ログ出力
`utils` は責務放棄の墓場になりやすい。
✅ 良い例
名前の出所を明示する
import user_repo as reporepo.load_user()
モジュールを「意味の塊」にする
user_repo.load_user()order_service.create_order()
名前は情報であり、最初のドキュメント。
🧠 設計の要点
-
名前空間は
- 衝突回避
- 依存関係の可視化
- 意図の表明 という 三役を担う
-
「短い名前」より「意味が伝わる名前」
`module.function()` の形は、呼び出し元に文脈を与える。
🧰 チェックリスト
- その名前の出所は一目で分かるか
utilsが巨大化していないか- import の依存方向は単純か(循環していないか)
- 関数名だけ見て「何をするか」説明できるか
`from module import *` を禁止する理由は「衝突」より「読解不能」だからです。
🏁 まとめ
- 名前空間は単なる整理手段ではない
- 設計思想を伝えるUIである
- 明示的な import は、未来の読者への親切
Python は明示性を尊ぶ。 それは、読む人を尊ぶということだ。