0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Python シツコイ!「 if __name__ == "__main__"の解説」

0
Last updated at Posted at 2026-01-25

🔍 if __name__ == "__main__": をシンプルに理解する

ここでは」ClaudeAIを使用しそれに加筆しました

図解などがとても得意なAIです

🔍 if __name__ == "__main__": をシンプルに理解する

🎯 一言で言うと

「このファイルが直接実行されたときだけ、この部分を実行する」


📝 超シンプルな例

hello.py というファイルを作ります

# ===== hello.py =====

def greet(name):
    """挨拶する関数"""
    print(f"こんにちは、{name}さん!")
#関数の定義
#関数は定義しただけでは実行されない
if __name__ == "__main__":
    print("プログラム開始")
    greet("太郎") #関数の呼び出し
    print("プログラム終了")

🎬 使い方1: 直接実行する場合

> python hello.py

実行結果:

プログラム開始
こんにちは、太郎さん!
プログラム終了

if __name__ == "__main__":の中身が実行された


🎬 使い方2: 他のファイルからimportする場合

main.py というファイルを作ります

# ===== main.py =====

import hello

print("別のプログラムです")
hello.greet("花子")
> python main.py

実行結果:

別のプログラムです
こんにちは、花子さん!

「プログラム開始」「プログラム終了」は表示されない
greet()関数だけが使える


📊 何が起こっているか?

直接実行の場合

# python hello.py で実行

# このとき __name__ は?
print(__name__)  # 出力: __main__

if __name__ == "__main__":  # "__main__" == "__main__" → True
    # ここが実行される!
    print("プログラム開始")
    greet("太郎")

importされた場合

# import hello で読み込まれた

# このとき __name__ は?
print(__name__)  # 出力: hello

if __name__ == "__main__":  # "hello" == "__main__" → False
    # ここはスキップされる!
    print("プログラム開始")  # 実行されない
    greet("太郎")  # 実行されない

🎭 比較図

┌─────────────────────────────────────────────────┐
│              直接実行                                   python hello.py                         
├─────────────────────────────────────────────────┤
│ __name__ = "__main__"                           
│                                                 
│ def greet(name):                                
│     print(f"こんにちは、{name}さん!")           
│                                                
│ if __name__ == "__main__":  ← True              
│     print("プログラム開始")  ✅ 実行される       
│     greet("太郎")           ✅ 実行される       
│     print("プログラム終了")  ✅ 実行される       
└─────────────────────────────────────────────────┘

┌─────────────────────────────────────────────────┐
│              importされた                       
│         import hello                            
├─────────────────────────────────────────────────┤
│ __name__ = "hello"                              
│                                                 
│ def greet(name):                                
│     print(f"こんにちは、{name}さん!")           
│                                                 
│ if __name__ == "__main__":  ← False             
│     print("プログラム開始")  ❌ スキップ         
│     greet("太郎")           ❌ スキップ         
│     print("プログラム終了")  ❌ スキップ         
└─────────────────────────────────────────────────┘

💡 なぜこれが必要?

悪い例:if __name__を使わない場合

# ===== hello_bad.py =====

def greet(name):
    print(f"こんにちは、{name}さん!")

# if __name__ を使わない
print("プログラム開始")
greet("太郎")
print("プログラム終了")

直接実行 → 問題なし

> python hello_bad.py

プログラム開始
こんにちは、太郎さん!
プログラム終了

importすると... 問題発生!

# ===== main.py =====
import hello_bad
> python main.py

プログラム開始      ← 勝手に実行された!
こんにちは、太郎さん! ← 意図してないのに!
プログラム終了      ← 困る!

✅ 良い例:if __name__を使う場合

# ===== hello.py =====

def greet(name):
    print(f"こんにちは、{name}さん!")

if __name__ == "__main__":
    print("プログラム開始")
    greet("太郎")
    print("プログラム終了")

importしても大丈夫!

# ===== main.py =====
import hello

# 何も勝手に実行されない
# 関数だけ使える
hello.greet("花子")
> python main.py

こんにちは、花子さん!  ← 自分で呼び出した分だけ

🎯 もう1つの例:計算プログラム

calculator.py

# ===== calculator.py =====

def add(a, b):
    """足し算"""
    return a + b

def multiply(a, b):
    """掛け算"""
    return a * b

# 直接実行されたときだけ動く部分
if __name__ == "__main__":
    print("計算プログラム")
    result1 = add(5, 3)
    print(f"5 + 3 = {result1}")
    
    result2 = multiply(4, 7)
    print(f"4 × 7 = {result2}")

使い方1:直接実行

> python calculator.py

計算プログラム
5 + 3 = 8
4 × 7 = 28

使い方2:他のファイルから関数を使う

# ===== my_program.py =====

import calculator

# 関数だけ使える
answer = calculator.add(10, 20)
print(f"答え: {answer}")
> python my_program.py

答え: 30

「計算プログラム」などは表示されない!


📚 実用例:テストとメイン処理の分離

game.py(ゲーム本体)

# ===== game.py =====

def play_game(player_name):
    """ゲームをプレイする"""
    print(f"{player_name}がゲームを始めました!")
    score = 100
    print(f"スコア: {score}")
    return score

# 直接実行されたときは、実際にゲームを始める
if __name__ == "__main__":
    print("=== ゲーム開始 ===")
    play_game("プレイヤー1")
    print("=== ゲーム終了 ===")
python game.py

=== ゲーム開始 ===
プレイヤー1がゲームを始めました!
スコア: 100
=== ゲーム終了 ===

test_game.py(テストプログラム)

# ===== test_game.py =====

import game

# テストデータで関数を試す
print("テスト開始")
score = game.play_game("テストユーザー")

if score == 100:
    print("✅ テスト成功")
else:
    print("❌ テスト失敗")
python test_game.py

テスト開始
テストユーザーがゲームを始めました!
スコア: 100
✅ テスト成功
---

## 🎯 まとめ

### `if __name__ == "__main__":` の役割

【このファイルを直接実行】
python my_file.py

if name == "main": の中が実行される ✅

【他のファイルからimport】
import my_file

if name == "main": の中はスキップ ❌
関数定義だけ読み込まれる


### メリット

1. **1つのファイルで2つの使い方ができる**
   - 単体で実行 → プログラムとして動く
   - import → ライブラリとして使える

2. **勝手に実行されない**
   - importしただけで処理が始まらない
   - 必要な関数だけ使える

3. **テストしやすい**
   - 本番コードとテストコードを分離できる

---

## 💡 簡単な覚え方

```python
if __name__ == "__main__":
    # ここは「メインプログラムとして実行されたときだけ」動く
    # importされたときは動かない

イメージ:

「もし私がメインとして呼ばれたなら」
    → はい、この部分を実行します

「もし私がサポート(import)として呼ばれたなら」
    → いいえ、関数の準備だけします

📝 実践テンプレート

# ===== your_program.py =====

# 関数定義(誰でも使える部分)
def function1():
    pass

def function2():
    pass

# メイン処理(直接実行したときだけ動く部分)
if __name__ == "__main__":
    print("プログラム開始")
    function1()
    function2()
    print("プログラム終了")

このテンプレートを使えば、どんなプログラムでも対応できます!

passのところに何かしらの処理を入れて試してください

0
1
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?