このシリーズで解決すること

既存 Web システムの画面からフォーム項目を洗い出す作業は、 DB 設計やテスト設計の起点として避けられない。 しかし実際には「画面を手で開いて、項目名・型・バリデーションをスプレッドシートに転記する」という 非効率な手作業が横行している。

このシリーズでは Python で Web ページを解析し、INPUT 要素を自動的にエンティティとして抽出する 方法を体系的に解説する。抽出結果は JSON / CSV で出力でき、DB 定義書・テストケース・仕様書の素材として再利用できる。

📌 「エンティティとして抽出」とは

タグを検索して値を取り出すだけでなく、各 INPUT 要素を name / id / type / label / placeholder / required / options などの属性セットを持つ Python dataclass オブジェクト として扱うことを指す。このシリーズではその定義・収集・出力の全工程をカバーする。

ユースケース

DB 設計自動化
画面の入力項目から DB カラム候補・型・NOT NULL 制約を一括推定。テーブル定義書の草案を自動生成。
テストケース生成
required / maxlength / pattern 属性から境界値・等価クラスのテスト入力値を自動生成。
フォーム仕様書作成
画面設計書が存在しないレガシーシステムのフォームを逆引きし、項目一覧ドキュメントを自動生成。
セキュリティ監査
hidden フィールドや type="password" の存在・HTTPS 非使用の発見。フォーム項目の棚卸しによる個人情報漏洩リスクの可視化。

完成イメージ

シリーズを通じて、以下のような Python スクリプトを段階的に組み立てる。 最終的には URL を渡すだけで JSON ファイルが出力されるツールが完成する。

Python — 最終形イメージ
from extractor import extract_inputs

# 静的ページ(requests + BeautifulSoup)
entities = extract_inputs("https://example.com/login")

# 動的ページ(Playwright)
entities = extract_inputs("https://example.com/search", dynamic=True)

# 結果を JSON 出力
import json
print(json.dumps([e.__dict__ for e in entities], ensure_ascii=False, indent=2))

上記スクリプトを実行すると、以下のような JSON が得られる。

JSON — 出力サンプル
[
  {
    "tag": "input",
    "type": "text",
    "name": "username",
    "id": "username",
    "label": "ユーザー名",
    "placeholder": "例: taro_yamada",
    "required": true,
    "maxlength": "50",
    "pattern": null,
    "options": []
  },
  {
    "tag": "input",
    "type": "password",
    "name": "password",
    "id": "password",
    "label": "パスワード",
    "placeholder": null,
    "required": true,
    "maxlength": "128",
    "pattern": null,
    "options": []
  },
  {
    "tag": "select",
    "type": "select",
    "name": "role",
    "id": "role",
    "label": "権限",
    "placeholder": null,
    "required": false,
    "maxlength": null,
    "pattern": null,
    "options": ["管理者", "一般ユーザー", "閲覧のみ"]
  }
]

対象読者・前提知識

項目レベル
Python 基礎for 文・関数・クラスが読める程度(3.9+)
HTML 知識<form> / <input> タグを知っている程度
コマンドラインpip コマンドが使える
Web スクレイピング経験不問(PART 02〜04 で環境構築から説明)

シリーズ構成

PARTタイトル内容
01はじめに(本記事)目的・ユースケース・完成イメージ
02環境準備Python・venv・requirements.txt
03requests + BeautifulSoup静的ページ用ツールの導入
04Playwright動的ページ用ツールの導入
05INPUT 要素の整理対象タグ・属性・dataclass 定義
06静的ページ実装requests + BeautifulSoup で抽出
07動的ページ実装Playwright で抽出・使い分け
08応用フォーム仕様書・テストケース生成
09トラブルシューティングよくあるエラーと対処
10まとめ使い分け表・次のステップ

次の章では…

PART 02 では Python のバージョン確認・仮想環境の作成・requirements.txt の整備など、シリーズ全体で共通して使う環境を整備します。

→ PART 02 — 環境準備へ