Pythonスクリプトのおまじない「if __name__ == “__main__”:」 を理解する

投稿者: | 2026-04-19

Pythonのスクリプトでよく見かけるif __name__ == "__main__":という記述は、一見すると少し不思議に感じるかもしれません。これはPythonプログラムが「どのように実行されているか」を判断するための大切な仕組みです。このブロックを理解することで、より整理されたコードを書くことができるようになります。

if __name__ == "__main__": の意味と役割

このコードブロックは、「そのPythonスクリプトが直接実行されたときだけ特定の処理を行う」という目的で使われます。Pythonファイルは、直接実行されることもあれば、別のファイルからモジュールとしてインポートされて利用されることもあります。if __name__ == "__main__":はその違いを判別します。

  • 直接実行された場合: __name__という特殊変数には"__main__"という文字列が代入されます。
  • モジュールとしてインポートされた場合: __name__にはそのモジュール名(ファイル名から.pyを除いたもの)が代入されます。

具体的な使い方を見てみましょう。
sample_script.pyというファイルを作成します。

# sample_script.py

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

def main():
    print("スクリプトが直接実行されました。")
    say_hello()

if __name__ == "__main__":
    main()
else:
    print(f"モジュール '{__name__}' としてインポートされました。")

print("この行は常に実行されます。")

このファイルを直接実行してみます。

python sample_script.py

出力結果:

スクリプトが直接実行されました。
こんにちは!
この行は常に実行されます。

次に、このファイルを別のスクリプトからインポートして使ってみます。
another_script.pyというファイルを作成します。

# another_script.py

import sample_script

print("別のスクリプトからの呼び出しです。")
sample_script.say_hello()

このファイルを直接実行します。

python another_script.py

出力結果:

モジュール 'sample_script' としてインポートされました。
この行は常に実行されます。
別のスクリプトからの呼び出しです。
こんにちは!

ご覧のように、if __name__ == "__main__":のブロック内のコード(main()関数の呼び出し)は、直接実行された場合のみ動いていることがわかります。

みーちゃんのワンポイント

このif __name__ == "__main__":という書き方は、Pythonプログラミングにおける「お作法」のようなものです。これにより、テストコードや初期設定など、そのファイルが単体で動作するときにだけ実行したい処理を、他のファイルからインポートされた場合に実行されるロジックと明確に分離できるため、コードの再利用性や保守性が大きく向上します。