シンママQAエンジニア|なぜPythonではmain()を書くのか?if name == “main”の意味

QAエンジニア

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 時には動きません。
この仕組みを理解すると、モジュール分割やテストコードを書くときにとても役立ちます。

タイトルとURLをコピーしました