Pythonの if __name__ == "__main__" という記述を徹底解説!

こんにちは!

ゆうせいです。

Pythonの if __name__ == "__main__" は、「このPythonファイルがコマンドラインから直接実行された場合にのみ、ifブロック内のコードを実行する」というお決まりの書き方です。🕵️‍♂️

これにより、ファイルが他のプログラムからモジュールとして読み込まれた(インポートされた)時に、中のコードが意図せず実行されるのを防ぐことができます。


__name__ とは何か?

__name__ は、Pythonが自動的に設定する特別な組み込み変数です。この変数の中身は、そのファイルがどのように実行されたかによって変わります。

  • 直接実行された場合 📜ターミナルで python your_script.py のように直接実行すると、そのスクリプト内の __name__ 変数には "__main__" という文字列が設定されます。
  • インポートされた場合 📦別のファイルから import your_script のように読み込まれると、your_script.py ファイル内の __name__ 変数には、モジュール名である "your_script" という文字列が設定されます。

具体的なコードで見てみよう

この違いを理解するために、2つのファイルを用意して試してみましょう。

tool.py (道具として使われるファイル)

def say_hello():
    print("こんにちは!")

# このファイルがどう実行されたかを表示
print(f"tool.py の __name__ は: {__name__}")


# --- ここがポイント ---
if __name__ == "__main__":
    # このファイルが直接実行された時だけ動く部分
    print("tool.pyを直接実行しました。")
    say_hello()

main.py (tool.py を利用するメインのファイル)

import tool

print("main.pyを実行中です。")
print("toolの機能を使います。")
tool.say_hello()

実行結果の比較

tool.py を直接実行した場合

$ python tool.py

出力:

tool.py の __name__ は: __main__
tool.pyを直接実行しました。
こんにちは!

__name__"__main__" なので、if文の中のコードが実行されました。

main.py を実行した場合

$ python main.py 

出力:

tool.py の __name__ は: tool
main.pyを実行中です。
toolの機能を使います。
こんにちは!

この時、tool.py__name__ はモジュール名の "tool" になります。

そのため、if文の中のコードは実行されません


なぜこれが必要なのか?

この仕組みは、Pythonファイルを再利用可能なモジュールとしても、単体で実行可能なスクリプトとしても機能させるために非常に重要です。

  • モジュールとしての一貫性: 他のプログラムがあなたのファイルから関数やクラスだけを借りたい時に、テスト用のコードなどが勝手に動き出すのを防ぎます。
  • テストやデバッグの容易さ: ファイル単体で動作確認するためのコードをif文の中に書いておくことで、インポート時には影響を与えずに、直接実行するだけで簡単にテストができます。

まとめ

if __name__ == "__main__" は、Pythonにおける非常に重要で一般的なイディオム(慣用句)です。

「直接実行された時だけ動かしたいコードは、このif文の中に入れる」

これをお作法として覚えておくと、再利用しやすく、きれいで分かりやすいコードが書けるようになります。ぜひ習慣にしてみてください!

セイ・コンサルティング・グループの新人エンジニア研修のメニューへのリンク

投稿者プロフィール

山崎講師
山崎講師代表取締役
セイ・コンサルティング・グループ株式会社代表取締役。
岐阜県出身。
2000年創業、2004年会社設立。
IT企業向け人材育成研修歴業界歴20年以上。
すべての無駄を省いた費用対効果の高い「筋肉質」な研修を提供します!
この記事に間違い等ありましたらぜひお知らせください。