メインコンテンツへスキップ

📦 名前空間破壊(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 repo
  • repo.load_user()

モジュールを「意味の塊」にする

  • user_repo.load_user()
  • order_service.create_order()

名前は情報であり、最初のドキュメント


🧠 設計の要点

  • 名前空間は

    • 衝突回避
    • 依存関係の可視化
    • 意図の表明 という 三役を担う
  • 「短い名前」より「意味が伝わる名前」

`module.function()` の形は、呼び出し元に文脈を与える。


🧰 チェックリスト

  • その名前の出所は一目で分かるか
  • utils が巨大化していないか
  • import の依存方向は単純か(循環していないか)
  • 関数名だけ見て「何をするか」説明できるか

`from module import *` を禁止する理由は「衝突」より「読解不能」だからです。


🏁 まとめ

  • 名前空間は単なる整理手段ではない
  • 設計思想を伝えるUIである
  • 明示的な import は、未来の読者への親切

Python は明示性を尊ぶ。 それは、読む人を尊ぶということだ。