Python を学び始めると、サンプルコードに必ずといっていいほど出てくるのが下記のような記述です。
if __name__ == "__main__":
「何となく毎回書いているけれど、本当はどういう意味?」と疑問に思う方も多いはずです。
私自身も最初は main() を定義する理由や、この条件文の働きが分からず混乱しました。
この記事では、初心者がつまずきやすい「main 関数」と「if name == ‘main‘」の役割を分かりやすく解説します。
仕組みを理解しておくと、他人のコードを読むときや自分のコードを整理するときに役立ちますよ。
main() 関数を定義する理由
まず、main() 関数とは「プログラムの入り口をまとめる場所」です。
例:
def main():
print("これは main 関数の中の処理です")
この段階では「main という関数を定義しただけ」で、実際にはまだ実行されません。
main() を作る目的は、コードの見通しをよくすることと「ここから実行が始まる」と明確にすることです。
if name == “main” の意味
次に、よく出てくるこの記述を見てみましょう。
if __name__ == "__main__":
main()
これは「このファイルを直接実行したときだけ main() を動かす」という条件です。
__name__
は Python が自動的に与える特別な変数です- ファイルを直接実行したときは
__name__
に"__main__"
が入ります - 別のファイルから import されたときは、そのファイル名(例:
mymodule
)が入ります
つまり、import されたときには main() を実行せず、直接実行したときだけ動くようにしているわけです。
import との関係
もし if __name__ == "__main__":
を書かずに main() を呼び出してしまうと、別のファイルから import したときにも main() が動いてしまいます。
これは意図せぬ挙動を引き起こす原因になります。
例:
# sample.py
def main():
print("mainが実行されました")
main()
このファイルを別のプログラムで import すると、import した瞬間に main()
が実行されてしまいます。
それを防ぐための仕組みが if __name__ == "__main__":
なのです。
実際のコード例
整理すると、Python では次のように書くのが基本形になります。
def main():
print("これは main 関数の中の処理です")
if __name__ == "__main__":
main()
こうしておくと、
- 直接実行 → main() が動く
- import されたとき → main() は動かず、関数だけ利用できる
という挙動になります。
私の体験談
最初のころ、私は main() を書かずにコードを直に並べていました。
するとファイルが増えたときに「どこから実行が始まるのか」が分かりにくくなり、デバッグもしづらくなりました。
また、import したときに意図せず処理が走ってしまい、何時間も原因調査に悩んだこともあります。
「main() を定義して if name == ‘main‘ を書く」習慣を身につけてからは、そうしたトラブルが減り、コードの読みやすさも格段に上がりました。
まとめ
Python では main() を定義して実行の入り口を明確にするのが基本です。if __name__ == "__main__":
を使うことで、直接実行したときだけ main() が動き、import 時には動きません。
この仕組みを理解すると、モジュール分割やテストコードを書くときにとても役立ちます。