Pythonの「おまじない」って何?「if name == "main"」 の正体と意味をやさしく解説!


🔰 はじめて出会う謎のコード

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では、こういったやさしくて考えられた設計がたくさんあります。

このおまじないの意味が分かったあなたは、ひとつ上のステージに進んだといえるでしょう。


メンバーのSNSアカウントはこちら

◆かいと:IT担当
X(旧Twitter)
Instagram