はじめに
Pythonでよく見かけるこの一文:
#Python
if __name__ == '__main__':
bake()
初心者の頃は「何これ?」「ファイル名と関係ある?」と疑問に思った方も多いはず。
この記事では、実際のコード例と実行結果をもとに、**「なぜ必要なのか」「どう動くのか」**をわかりやすく解説します。
__name__とは何か?
Pythonでは、すべての .py ファイルに name という特別な変数が自動で定義されます。

実験①:ファイルを直接実行した場合
#Python cake.py
def bake():
print("ケーキを焼いています!")
print(f"このファイルの __name__ は: {__name__}")
if __name__ == '__main__':
bake()
実行結果(cake.py を直接実行):
このファイルの __name__ は: __main__
ケーキを焼いています!
実験②:他のファイルから import した場合
#Python main.py
import cake
cake.bake()
実行結果(main.py を実行):
このファイルの __name__ は: cake
ケーキを焼いています!
※ cake.py の if name == 'main': の部分は実行されません!
よくある誤解
import時はファイル全体が毎回実行されるわけではないです。

トップレベルのコードとは?
関数やクラスの定義の外側にあるコードのことです。
つまり、ファイルが読み込まれたときにすぐ実行される部分です。
トップレベルのコードに含まれるもの
- print(...) のような直接実行される文
- if name == 'main': のような条件分岐(ただし条件が合わなければスキップされる)
- 関数やクラスの「定義」はトップレベルにあるが、定義されるだけで実行はされない
トップレベルではないもの
- 関数の中のコード(例:bake() の中の print(...))
- クラスの中のメソッド
- main.py から呼び出される cake.bake() のような関数呼び出し
理解のポイントまとめ
- import すると、関数定義の外側(トップレベル)のコードが一度だけ実行される
- name は「直接実行」なら 'main'、「import」ならモジュール名(例:'cake')
- cake.bake() は関数呼び出しであり、ファイル全体を再実行するわけではない
- 実行結果の順番は、import → 関数呼び出しの順に対応している
今後に活かす
- 出力結果の横に「どのコードによるものか」を注釈で明記すると読者の理解が深まる
- 「if name == 'main':」の役割と、import 時にスキップされる理由を図解するとさらに親切