scrapy (ルートモジュール)
基本情報 [必須]
| 項目 |
内容 |
| モジュールパス |
.(リポジトリルート) |
| 種別 |
プロジェクトルート / ビルド・テスト・CI 設定 |
| ファイル数 |
6 |
| サブモジュール数 |
3(extras, scrapy, tests) |
概要 [必須]
Scrapy プロジェクトのリポジトリルートであり、フレームワーク本体(scrapy/ パッケージ)を取り巻くビルドシステム設定、テストインフラ設定、CI/CD パイプライン設定、および品質管理ツール設定を一元管理する。pyproject.toml がプロジェクトのメタデータ・依存関係・開発ツール設定(mypy, pytest, ruff, pylint, coverage, bumpversion)の中心的な設定ファイルであり、tox.ini が 30 以上のテスト環境を定義して多バージョン・多構成のテストマトリクスを実現している。conftest.py はテスト実行の基盤としてリアクター選択・モックサーバー・プロキシフィクスチャを提供し、.pre-commit-config.yaml、.readthedocs.yml、codecov.yml が品質ゲート・ドキュメント公開・カバレッジレポートの自動化をそれぞれ担う。
設計パターン [必須]
| パターン名 |
適用範囲 |
説明 |
| Plugin Hook |
conftest.py |
pytest のプラグインフックプロトコル(pytest_addoption, pytest_configure, pytest_runtest_setup)に従いテスト実行ライフサイクルにカスタム処理を挿入 |
| Fixture (Dependency Injection) |
conftest.py |
pytest の DI 機構を利用し、テスト関数にモックサーバー・プロキシ・リアクター情報を注入 |
| Context Manager |
conftest.py (mockserver) |
MockServer をコンテキストマネージャーで管理し、セットアップ/ティアダウンを保証 |
| Convention over Configuration |
pyproject.toml, tox.ini |
設定ファイルの標準化により、開発者が明示的なコード変更なしにツールの挙動を制御 |
アーキテクチャ [必須]
モジュール構成
./ (リポジトリルート)
├── .pre-commit-config.yaml - Git コミット前の自動品質チェック(Ruff, blacken-docs, sphinx-lint)
├── .readthedocs.yml - Read the Docs ドキュメントビルド設定
├── codecov.yml - Codecov カバレッジレポート設定
├── conftest.py - pytest グローバル設定・フィクスチャ・フック
├── pyproject.toml - プロジェクトメタデータ・ビルド・ツール設定の中心ファイル
├── tox.ini - マルチ環境テスト自動化(30+環境)
├── extras/ - 開発・ベンチマーク補助ツール
├── scrapy/ - Scrapy フレームワーク本体パッケージ
└── tests/ - テストスイート(138ファイル、14サブモジュール)
コンポーネント関連図
Mermaid形式:
graph TD
PYPROJECT[pyproject.toml] -->|ビルド設定| HATCH[hatchling]
PYPROJECT -->|ツール設定| TOOLS[mypy / ruff / pylint / coverage]
PYPROJECT -->|pytest 設定| PYTEST[pytest]
TOX[tox.ini] -->|テスト環境| PYTEST
PYTEST -->|フィクスチャ| CONFTEST[conftest.py]
CONFTEST -->|モックサーバー| TESTS[tests/]
CONFTEST -->|リアクター設定| SCRAPY[scrapy/]
TOX -->|tox -e docs| RTD[.readthedocs.yml]
RTD -->|ビルド| DOCS[docs.scrapy.org]
PRECOMMIT[.pre-commit-config.yaml] -->|フック| RUFF[ruff]
PRECOMMIT -->|フック| SPHINX[sphinx-lint]
CODECOV[codecov.yml] -->|レポート| PR[GitHub PR]
TOX -->|--cov-report=xml| CODECOV
機能一覧 [必須]
| 機能名 |
説明 |
主要ファイル |
| パッケージビルド・配布 |
hatchling によるパッケージビルド、PyPI 配布メタデータ、CLI エントリポイント定義 |
pyproject.toml |
| マルチ環境テスト |
Python 3.10〜3.14, PyPy3, 最小依存, 各種リアクター設定でのテスト実行 |
tox.ini |
| テストインフラ |
pytest フック、フィクスチャ(MockServer, MitmProxy)、テスト収集制御 |
conftest.py |
| 静的解析・リント |
Ruff, pylint, mypy による包括的なコード品質チェック |
pyproject.toml, tox.ini |
| コードフォーマット |
Ruff フォーマッター、blacken-docs によるドキュメント内コードフォーマット |
.pre-commit-config.yaml, pyproject.toml |
| ドキュメントビルド |
Read the Docs 上での Sphinx ドキュメントビルド・公開 |
.readthedocs.yml, tox.ini |
| カバレッジ管理 |
コードカバレッジの収集・レポート・PR ステータスチェック |
codecov.yml, pyproject.toml |
| バージョン管理 |
bumpversion によるリリースバージョン自動更新 |
pyproject.toml |
| pre-commit フック |
コミット前の自動品質チェック |
.pre-commit-config.yaml |
公開インターフェース [必須]
クラス / 関数
| 名前 |
種別 |
用途 |
| scrapy (CLI) |
entry point |
scrapy.cmdline:execute - Scrapy コマンドラインインターフェース |
| mockserver |
pytest fixture |
テスト用 MockServer の session スコープ提供 |
| mitm_proxy_server |
pytest fixture |
テスト用 MITM HTTP プロキシの function スコープ提供 |
| mitm_proxy_server_https |
pytest fixture |
テスト用 MITM HTTPS プロキシの function スコープ提供 |
| socks5_proxy_server |
pytest fixture |
テスト用 SOCKS5 プロキシの function スコープ提供 |
| reactor_pytest |
pytest fixture |
--reactor オプション値の提供 |
| pytest_addoption |
pytest hook |
--reactor オプションの追加 |
| pytest_configure |
pytest hook |
リアクター初期化 |
| pytest_runtest_setup |
pytest hook |
マーカーに基づくテストスキップ制御 |
依存関係 [必須]
外部依存(このモジュールが依存する外部パッケージ)
| パッケージ |
主要クラス |
用途 |
| hatchling |
build backend |
パッケージビルドシステム |
| pytest |
fixture, hook API |
テストフレームワーク |
| twisted.web.http |
H2_ENABLED |
HTTP/2 サポート判定 |
| tox |
テスト自動化 |
マルチ環境テスト実行 |
| pre-commit |
フック管理 |
コミット前自動チェック |
| ruff |
リンター/フォーマッター |
コード品質チェック |
| mypy |
型チェッカー |
静的型チェック |
| pylint |
静的解析 |
コード品質チェック |
| coverage |
カバレッジ |
テストカバレッジ収集 |
| bumpversion |
バージョン管理 |
リリースバージョン自動更新 |
外部依存(このモジュールが依存する内部モジュール)
| 依存先モジュール |
主要クラス |
用途 |
| scrapy/utils/reactor |
set_asyncio_event_loop_policy |
conftest.py でのリアクター初期化 |
| scrapy/utils/reactorless |
install_reactor_import_hook |
conftest.py でのリアクターフック |
| tests/keys |
generate_keys |
conftest.py での証明書生成 |
| tests/mockserver/http |
MockServer |
conftest.py でのモックサーバーフィクスチャ |
| tests/mockserver/mitm_proxy |
MitmProxy |
conftest.py でのプロキシフィクスチャ |
内部依存(このモジュールに依存するもの)
本ソースツリー内に参照は検出されませんでした。
データフロー [必須]
Mermaid形式:
flowchart LR
DEV[開発者] -->|commit| PRECOMMIT[pre-commit hooks]
PRECOMMIT -->|ruff / lint| QA[品質保証]
DEV -->|push| CI[CI/CD]
CI -->|tox| TOX[tox.ini]
TOX -->|pytest| CONFTEST[conftest.py]
CONFTEST -->|fixtures| TESTS[tests/]
TOX -->|mypy / pylint| STATIC[静的解析]
TOX -->|docs| RTD[.readthedocs.yml]
RTD -->|publish| DOCS[docs.scrapy.org]
CI -->|coverage XML| CODECOV[codecov.yml]
CODECOV -->|report| PR[GitHub PR]
セキュリティ考慮 [必須]
| 観点 |
対策状況 |
詳細 |
| 入力検証 |
該当なし |
設定ファイルとテストインフラのため外部入力はない |
| 認証/認可 |
なし |
ローカル開発・CI 環境での使用のため不要 |
| 機密データ |
注意 |
tox.ini で AWS/GCS 認証情報を passenv で通過させている。CI のシークレット管理に依存 |
| サプライチェーン |
緩和策あり |
.pre-commit-config.yaml と tox.ini で外部リポジトリを固定 rev/tag で参照 |
| 依存パッケージ |
defusedxml 採用 |
pyproject.toml で defusedxml を依存に含め、XXE 攻撃を防止 |
技術的負債・既知の問題 [必須]
| 種別 |
内容 |
影響範囲 |
優先度 |
| TODO |
pyproject.toml の [tool.mypy] で scrapy.settings.default_settings を ignore_errors = true にしている |
mypy |
低 |
| 設計 |
tox.ini の [test-requirements] と [testenv] で pytest のバージョン要件が分散(前者 pytest 未指定、後者 >=8.4.1) |
tox.ini |
低 |
| 設計 |
.readthedocs.yml で tox のバージョンを固定していない |
.readthedocs.yml |
低 |
拡張ポイント [必須]
| 変更内容 |
修正対象ファイル |
手順・注意点 |
| 新しい Python バージョンのサポート追加 |
pyproject.toml, tox.ini, .readthedocs.yml |
1. pyproject.toml の classifiers と requires-python を更新 2. tox.ini の envlist に新バージョンを追加 3. .readthedocs.yml の python バージョンを更新 4. pyproject.toml の [tool.sphinx-scrapy] python-version を更新 |
| 新しい pre-commit フックの追加 |
.pre-commit-config.yaml |
1. repos セクションにフック定義を追加 2. rev でバージョンを固定 |
| 新しいテストフィクスチャの追加 |
conftest.py |
1. フィクスチャ関数を定義(スコープを適切に選択) 2. テスト側で引数名で自動注入 |
| 新しいオプション依存テストの追加 |
conftest.py, pyproject.toml |
1. conftest.py の optional_deps に追加 2. pyproject.toml の markers に追加 3. tox.ini に対応する環境を追加 |
| 新しい tox テスト環境の追加 |
tox.ini |
1. [testenv:名前] セクションを追加 2. envlist に追加 3. 必要な deps を定義 |
| Ruff ルールの追加/変更 |
pyproject.toml |
[tool.ruff.lint] の extend-select / ignore を更新 |
注意点・特記事項 [必須]
- 設計上の制約: pyproject.toml の
[tool.ruff.lint.flake8-tidy-imports] で twisted.internet.reactor のモジュールレベルインポートが禁止されている。これは Scrapy のリアクター選択メカニズムの根幹に関わる制約であり、変更すると全テスト環境に影響する
- パフォーマンス: tox.ini の
[tool.coverage.run] で core = "ctrace" を明示指定している。Python 3.14 のデフォルト sysmon がパフォーマンス問題を抱えているため
- 互換性: pyproject.toml の依存バージョンと tox.ini の
[min] セクションの最小バージョンは一致させる必要がある。不一致があると最小依存テストが失敗する
配下ドキュメント [必須]
サブモジュール
- extras.md - 開発・ベンチマーク補助ツール(QPS ベンチマーク、カバレッジレポート)
- scrapy.md - Scrapy フレームワーク本体パッケージ(コアコンポーネント)
- tests.md - テストスイート(151ファイル、14サブモジュール、全レイヤー網羅・クローラーランナー・エンジン非同期・エクステンション・ユーティリティ・リゾルバー・ベンチマーク等の新規テスト)
ファイル