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.ymlcodecov.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_settingsignore_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サブモジュール、全レイヤー網羅・クローラーランナー・エンジン非同期・エクステンション・ユーティリティ・リゾルバー・ベンチマーク等の新規テスト)

ファイル