「メイン関数」のコラム

トップページ>「メイン関数」のコラム

Pythonの「メイン関数」って何?プログラムの始まりを理解しよう!

Pythonを始めたばかりのあなたにとって、色々なコードに出会う中で「if __name__ == '__main__':」という一見難しそうな記述を目にすることがあるかもしれません。これはPythonにおける「メイン関数」と呼ばれるもので、プログラムの実行開始地点を定める、非常に重要な役割を持っています。

今回は、このメイン関数について、初心者の方にもわかりやすいように解説していきます。

なぜ「メイン関数」が必要なの?

Pythonは、スクリプト形式でコードを実行できます。つまり、書いたコードを上から順番に実行していくのが基本です。しかし、Pythonのプログラムは、単独で実行されるだけでなく、他のプログラムからモジュールとしてインポートされることもあります。

ここで問題が発生します。単独で実行される場合は、プログラム全体の処理を最初から実行してほしいのですが、モジュールとしてインポートされた場合は、一部の関数やクラスだけを使いたい、という状況が考えられます。

例えば、以下のような my_module.py というファイルがあったとします。

# my_module.py

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

print("my_module.pyが実行されました")

greet("世界")

このファイルを直接実行すると、greet 関数が実行され、「my_module.pyが実行されました」と「こんにちは、世界さん!」が表示されます。

しかし、このファイルを別のファイル main.py からインポートするとどうなるでしょうか?

# main.py
import my_module

print("main.pyが実行されました")

この main.py を実行すると、my_module.py のコードがインポート時に実行されてしまい、「my_module.pyが実行されました」と「こんにちは、世界さん!」が意図せず表示されてしまいます。これは、my_module.py のコードが、インポートされただけで自動的に実行されてしまうためです。

この問題を解決するために、Pythonでは「メイン関数」という仕組みを使って、プログラムが直接実行された場合のみ実行されるコードを定義します。

if __name__ == '__main__': の正体

Pythonでは、スクリプトが実行される際に、特殊な変数 __name__ が自動的に設定されます。

  • スクリプトが直接実行された場合、__name__'__main__' という文字列になります。
  • スクリプトがモジュールとしてインポートされた場合、__name__ はそのモジュール名(ファイル名から拡張子を除いたもの)になります。

この特性を利用して、if __name__ == '__main__': という条件分岐を用いることで、スクリプトが直接実行されたかどうかを判別できます。

if __name__ == '__main__': のブロックの中に記述されたコードは、スクリプトが直接実行された場合にのみ実行され、モジュールとしてインポートされた場合には実行されません。

メイン関数の書き方

それでは、先ほどの my_module.py を、メイン関数を使って書き換えてみましょう。

# my_module.py

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

def main():
    print("my_module.pyが直接実行されました")
    greet("世界")

if __name__ == '__main__':
    main()

このコードでは、main() という関数を定義し、その中で直接実行時に実行したい処理を記述しています。そして、if __name__ == '__main__': の条件が真の場合に main() 関数を呼び出すようにしています。

これで、my_module.py を直接実行した場合のみ、main() 関数が実行され、「my_module.pyが直接実行されました」と「こんにちは、世界さん!」が表示されます。

main.py から my_module.py をインポートした場合、main() 関数は実行されず、my_module.py のコードはインポートされるだけになります。

メイン関数のメリット

メイン関数を使うことには、以下のようなメリットがあります。

  • コードの可読性向上: プログラムの実行開始地点が明確になり、コードを読む人がプログラム全体の構造を理解しやすくなります。
  • モジュールとしての再利用性向上: 関数やクラスを他のプログラムからインポートして再利用する際に、意図しないコードが実行されることを防ぎます。
  • テスト容易性の向上: メイン関数の内部処理を独立した関数として定義することで、個々の関数をテストしやすくなります。

まとめ

Pythonのメイン関数は、プログラムの実行開始地点を定義し、コードの可読性や再利用性を向上させるための重要な仕組みです。if __name__ == '__main__': という記述を理解し、積極的に活用することで、より質の高いPythonプログラムを作成することができます。最初は難しく感じるかもしれませんが、実際にコードを書いて試してみることで、すぐに慣れることができます。ぜひ、色々なプログラムでメイン関数を使ってみてください。





【mei_13のPython講座】
◯月額4,000円で質問し放題!!
◯完全オンライン
◯翌日までには必ず返信
◯挫折しない独自の学習メソッド
◯圧倒的高評価!!
◯テキストベースで時間を選ばない
詳細はこちら
興味がある方はまず質問だけでもどうぞ!




< pygame
自作ライブラリ >







コラム一覧

if文
for文
関数
配列
文字列
正規表現
ファイル入出力
openpyxl
Numpy
Matplotlib
Pandas
scikit-learn
seaborn
beautifulsoup
tkinter
OpenCV
pygame
メイン関数
自作ライブラリ
画像処理
機械学習
スクレイピング
データ分析
グラフ作成
API
可読性
デバッグ
例外処理
コメント
組み込み関数
flask
学び方
ビット演算
マルチスレッドプログラミング
参照渡し
pyenv
エディタ
生成AI
画像認識
Streamlit
lambda式
物理演算シミュレーション
命名規則
遺伝的アルゴリズム
関数型プログラミング
オブジェクト指向
ツリー図
Anaconda
Google Colaboratory
PyTorch
NLTK
音声処理
yt-dlp
組み込み開発
データベース操作
iclawler
PyCaret
pickle
plotly
polars
Mecab
乱数
PyInstaller
MySQL
Pip
sys.argv
データ型
secrets
MediaPipe
YOLO
ソート