【Python】if __name__ == "__main__" の意味と使いどころ
はじめに
Pythonのコードでよく見かけるこの一文:
if __name__ == "__main__":
最初は、
「この一文にはどんな意味があるのか?」
と疑問に感じる方も多いと思います。
本記事では、if __name__ == "__main__"
の意味と使いどころを解説します。
__name__
とは?
1. Pythonでは、どんなファイルにも自動で __name__
という特別な変数が用意されています。
この変数の中身は、「そのファイルがどうやって実行されたか」によって変わります。
✅ ファイルを直接実行したとき
例えば、以下のような sample.py
というファイルを用意します:
# sample.py
print(__name__)
このファイルをターミナルから実行すると…
python sample.py
出力は次のようになります。
__main__
→ これは __name__
が "__main__"
であることを示しています。
つまり、「このファイルが直接実行された」という意味になります。
✅ 他のファイルからインポートされたとき
今度は、別のファイル(例えば main.py
)から sample.py
を読み込んでみましょう。
以下のような main.py
と sample.py
というファイルを用意します。
# main.py
import sample
# sample.py
print(__name__)
ターミナルから以下のように実行すると
python main.py
出力は次のようになります。
sample
→ __name__
は "sample"
になります。
これは「このファイルは直接実行されたのではなく、他のファイルから呼び出された」という意味になります。
if __name__ == "__main__"
の意味
2. 上記の仕組みをふまえると、以下のようなコードは、
def main():
print("Hello")
if __name__ == "__main__":
main()
「このファイルが直接実行されたときだけ、
main()
を呼び出す」
という意味になります。
インポートされたときには main()
は実行されません。
3. 用途
✅ ファイル単体でも動かしたい、かつ他のファイルからも使いたいとき
例えば、utils.py
という便利関数をまとめたファイルがあったとします。
# utils.py
def add(a, b):
return a + b
if __name__ == "__main__":
print(add(2, 3))
このように書いておけば、
-
python utils.py
を実行するとadd(2, 3)
の動作確認ができる - 他のファイルで
import utils
するとadd()
関数だけ使える(printは実行されない)
というように、テスト用コードと本体コードを分けるのに便利です。
🔹 ターミナルから実行した場合
python utils.py
出力:
5
🔹 他のファイルからインポートした場合
# main.py
import utils
print(utils.add(10, 20))
出力:
30
おわりに
if __name__ == "__main__"
は、Pythonでは非常によく使われる書き方で、
モジュールとしての再利用性を保ちつつ、テストコードも書けるというメリットがあります。
最初は少しわかりにくいかもしれませんが、
「ファイルを直接実行したときにだけ動く処理を分けて書ける」という仕組みを知っておくと、今後の開発で役立つ場面が増えるはずです。
本記事が参考になれば幸いです。
Discussion