🔰 はじめて出会う謎のコード
Pythonのコードをネットで調べていると、よくこういうのを見かけませんか?
- 1
- 2
if __name__ == "__main__":
main() 「これって一体なに? ないと動かないの? なんで __name__ とか __main__ ってアンダースコアだらけなの?」初心者なら誰でも一度は抱く疑問ですよね。
結論から言うと、これは Pythonのスクリプトを直接実行したときだけ、ある処理を動かすためのおまじない なんです。
では、なぜそんな仕組みが必要なのか?
どういう場面で使うのか?
ゆっくり、ていねいに紐解いていきましょう。
📘 背景:Pythonのスクリプトには「実行方法」が2つある
Pythonのファイル(例:example.py)は、2通りの使い方ができます。
1. 直接実行する場合
- 1
$ python example.py この場合、example.pyの中に書かれたコードがそのまま実行されます。
2. 別のファイルからインポートする場合
別のPythonファイル(例:main.py)から import example すると、example.py に書かれた関数や変数を読み込んで使えます。
- 1
- 2
- 3
# main.py
import example
example.hello() ここで大事なのは、インポートされたファイルの中の「全部のコード」が実行されるという点です。
🧪 実験:実際に確かめてみよう
example.py
- 1
- 2
- 3
- 4
print("これはexample.pyの先頭に書かれたコードです")
def hello():
print("hello関数が呼ばれました") main.py
- 1
- 2
- 3
import example
print("main.pyの処理がはじまります")
example.hello() これを実行するとどうなるか?
- 1
$ python main.py - 1
- 2
- 3
これはexample.pyの先頭に書かれたコードです
main.pyの処理がはじまります
hello関数が呼ばれました 😲 main.pyしか実行してないのに、example.pyのコードも動いてしまった!
🧙♂️ 解決策:if __name__ == "__main__": の出番!
この問題を避けるには、example.pyにこう書きます:
- 1
- 2
- 3
- 4
- 5
- 6
def hello():
print("hello関数が呼ばれました")
if __name__ == "__main__":
print("example.pyが直接実行されました")
hello() これでどうなるか?
-
python main.py→ インポート時にはexample.pyの関数定義だけ読み込まれ、中の print は無視されます -
python example.py→ 直接実行したときだけ"example.pyが直接実行されました"が表示されます
🔍 なぜ動く? __name__ と __main__ の仕組み
Pythonでは、ファイルが実行されるときに自動で __name__ という変数が定義されます。
| 実行の仕方 | __name__ の中身 |
|---|---|
| スクリプトを直接実行 | "__main__" |
| 他のファイルからインポート | "ファイル名"(例: "example") |
つまり、
- 1
if __name__ == "__main__": は、
「このファイルが直接実行されたときだけ実行される条件分岐」
という意味になります。
✅ まとめ:なぜ「おまじない」が必要なのか
if __name__ == "__main__": は、
- ファイルを「直接実行する場合」と「インポートされる場合」で
- 処理を分けるための仕組み
関数のテスト、処理の起点などをこの中に書いておけば、他のスクリプトに影響を与えず安全に再利用できます。
💡 応用:テストコードを書くときにも便利
例えばライブラリを作っていて、その中にちょっとした動作確認を書きたいとき。
- 1
- 2
- 3
- 4
- 5
def add(a, b):
return a + b
if __name__ == "__main__":
print(add(2, 3)) # → 5 になるか確認 このように __main__ ブロックを使えば、インポート先では実行されず、テストだけ個別に確認できるという便利な仕組みが実現できます。
最初はただの「呪文」にしか見えなかった
- 1
if __name__ == "__main__": でも、背景や使いどころを理解すると、「他人と気持ちよくコードを共有するためのマナー」にも思えてきます。
Pythonでは、こういったやさしくて考えられた設計がたくさんあります。
このおまじないの意味が分かったあなたは、ひとつ上のステージに進んだといえるでしょう。