QAエンジニア|なぜ __init__.py と launch.json が必要?

QAエンジニア

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で常に正しく実行できる
     - チームや未来の自分にも優しい
タイトルとURLをコピーしました