PythonでAppiumやPlaywrightを使ってテスト自動化を始めると、最初に戸惑うのが「init.pyってなんで必要なの?」という疑問です。
さらにVisual Studio Code(VS Code)を使っていると、「launch.jsonを作ってください」と出てきて混乱することも多いですよね。
私自身、最初はエラーの意味もわからず、何度も検索しては立ち止まりました。
でも仕組みを理解してからは「これは目印」「これは地図」と捉えられるようになり、迷子にならずにテストを実行できるようになりました。
この記事では、初心者のQAエンジニアでも安心して理解できるように、init.pyの役割とlaunch.jsonの意味をセットで解説します。
同じところでつまずいている方が、スムーズにテスト自動化を進められるようになれば嬉しいです。
init.py の役割とは?
Pythonには「このフォルダはパッケージですよ」と教える仕組みがあります。
その目印となるのが __init__.py
です。
- ファイル名は必ず
__init__.py
。他の名前では認識されません。 - 中身は空でも大丈夫です。よく使う関数をまとめて再輸出することも可能です。
- これがあることで
import modules.xx
のように、フォルダ内のモジュールを呼び出せます。
👉 簡単に言えば「フォルダをimport可能にするための印」です。
どのフォルダに置く?
テスト自動化プロジェクトの例を見てみましょう。
test_project/
├─ data/ ← テストデータ置き場 → 不要
├─ modules/ ← 共通ロジック → 必要(ここに置く)
│ ├─ __init__.py
│ ├─ xx.py
│ └─ yy.py
├─ scripts/ ← 実行スクリプト → 基本は不要
│ ├─ test1.py
│ └─ test2.py
├─ reports/ ← 実行結果出力 → 不要
└─ config/ ← 環境設定 → 不要
- 必要:modules/
- 不要:data/, reports/, config/
- scripts/ は launch.json を設定すれば不要になります。
launch.json の役割とは?
launch.json
は、VS Codeに「この方法で実行してね」と伝えるための設定ファイルです。
主な役割
- プロジェクトのルートをカレントディレクトリに固定
→import modules.xx
が確実に通る - 「python -m scripts.test1」形式でのモジュール実行を自動化
→ ターミナルで毎回入力しなくても、F5キーで実行可能 - 環境変数や引数を設定できる
→ .envファイルを読み込んだり、Playwright/Appium用のオプションを渡せる
👉 簡単に言えば「VS Codeに迷わず正しい方法でテストを実行させる地図」です。
なぜ作る必要があるの?
① エラーを防ぐためscripts/test1.py
を直接実行すると modules
が見つからず、ModuleNotFoundError
が出がちです。launch.json
にルート実行を指定しておけば、F5ひとつで迷わず実行できます。
② チームや将来の自分のため
設定を残しておけば、誰が実行しても同じ動作に。
未来の自分も忘れずにF5で実行できます。
③ 環境変数や引数を一元管理できる
端末名やブラウザ指定、ログ保存先などを launch.json
にまとめて管理できます。
毎回手打ちする必要がなくなります。
具体的な設定例(VS Code用)
プロジェクト直下に .vscode/launch.json
を作成し、以下を貼り付けます。
{
"version": "0.2.0",
"configurations": [
{
"name": "Run test1 (module)",
"type": "python",
"request": "launch",
"module": "scripts.test1",
"cwd": "${workspaceFolder}",
"console": "integratedTerminal",
"justMyCode": true,
"envFile": "${workspaceFolder}/config/.env"
}
]
}
これでF5を押せば、python -m scripts.test1
と同じ動作になります。
実行スクリプト例
modules/xx.py
def add(a, b):
return a + b
modules/init.py
from .xx import add
__all__ = ["add"]
scripts/test1.py
from modules import add
def main():
print("2 + 3 =", add(2, 3))
if __name__ == "__main__":
main()
実行結果
2 + 3 = 5
まとめ
__init__.py
は「フォルダをimport可能にする目印」- 置くのは modules/ だけでOK
launch.json
は「VS Codeに正しい実行方法を教える地図」- セットで使うことで
- importエラーが減る
- F5で常に正しく実行できる
- チームや未来の自分にも優しい