Skip to main content

Collector Boundary 設計方針

設計ゴール

  • 開示ソースごとに適切な形式でドキュメントを取得し、Collection に保存する
  • 共通フローは BaseCollector に集約し、具体は各 Collector で実装する
  • ユーザーは 用途別の Collector を選ぶだけでよく、内部クライアントの切り替えを意識しなくてよい
  • Edgar の 全エンドポイントは単一の EdgarClient が担い、各 Collector がメソッド呼び出しを切り替えて用途に応じた収集を行う

1. 基本思想

Collector の責務

  • BaseCollector: 収集の共通フロー(fetch → parse → build_filing → add_to_collection)を定義するテンプレート
  • EdinetCollector: EDINET 用。XBRL そのまま取得 → Collection → Arelle modeling → DB のパイプラインに対応
  • EdgarFactsCollector: ファクト・概念など**構造化データ(JSON)**を取得。client.get_company_facts() / get_submissions() 等を呼び出す
  • EdgarArchiveCollector: **提出書類(htm / iXBRL)**を取得。client.get_filing_document() を呼び出す
  • EdgarBulkCollector: 一括取得client.get_bulk() を呼び出す

単一 EdgarClient の方針

3 つの Collector はすべて同一の EdgarClient を持つ。

  • CIK 解決・accession_number 取得など全 Collector で必要な前段処理を EdgarClient に集約する
  • エンドポイントごとにメソッドを用意し(get_submissions / get_company_facts / get_filing_document / get_bulk)、Collector 側がどのメソッドを呼ぶかで用途を切り替える
  • レート制限・リトライ・User-Agent ヘッダーの組み立ても EdgarClient が内部管理する

用途別命名(Edgar)

Collector用途使用する EdgarClient メソッド(例)
EdgarFactsCollectorファクト・概念など構造化データを取るget_submissions, get_company_facts
EdgarArchiveCollector提出書類(ドキュメント)を取るget_filing_document
EdgarBulkCollector一括取得get_bulk

2. EdgarConfig の方針

EdgarClient に必要な設定は最小限に抑える。

設定項目値の所在理由
user_agent_emailユーザー指定(必須)SEC は識別用メールアドレスを User-Agent に含めることを要求するため、ユーザーごとに inject する
timeoutユーザー指定(任意・デフォルト有)ネットワーク環境に応じてユーザーが調整できるよう残す
API ベース URL / レート制限設定package 側デフォルトEdgar の仕様に準拠する固定値のため package で管理し、ユーザーに露出しない

3. デザインパターン

パターン役割
Template MethodBaseCollector が collect() の骨格を定義し、fetch_documents() / parse_response() / build_filing() をサブクラスで差し替える
共有クライアントEdgarClient が全エンドポイントの HTTP インフラを一元提供。3 つの Collector が共有し、メソッドの呼び出しで用途を切り替える
Facade 連携Collector は Collection(Facade)を利用し、add のみで保存する

4. 責務分離

要素責務
BaseCollector共通フロー、Collection への add、テンプレートメソッドの定義
EdinetCollectorEdinet のオーケストレーション、EDINET 用の fetch/parse/build_filing
EdgarFactsCollectorEdgarClient の facts 系メソッドを呼び出し、構造化データを Collection に保存する
EdgarArchiveCollectorEdgarClient の document 系メソッドを呼び出し、提出書類を Collection に保存する
EdgarBulkCollectorEdgarClient の bulk 系メソッドを呼び出し、一括データを Collection に保存する
EdinetEDINET の config・API・形式・EDINETFiling への to_filing
EdgarClientEdgar 全エンドポイント対応の共通 HTTP クライアント。CIK 解決・レート制限・リトライを内部管理
EdinetConfigEDINET の設定(api_base, timeout)
EdgarConfigユーザー固有設定のみ(user_agent_email, timeout)。API URL 等は package デフォルト
Collection保存・検索の窓口(既存 Facade)

5. パイプラインの違い

用途流れ
EDINETダウンロード(XBRL)→ Collection → Arelle modeling → DB
Edgar FactsJSON API → Collection → (Arelle 不要)→ 正規化 → DB
Edgar Documentshtm/iXBRL → Collection → Arelle 等 → DB
Edgar BulkBulk → Collection → 形式に応じた処理 → DB

6. 設計原則まとめ

  • 共通フローは BaseCollector(Template Method)に集約する
  • Edgar の HTTP 処理は EdgarClient に一元化。CIK 解決・accession 取得などの前段処理も EdgarClient が担う
  • ユーザーは用途別の Collector を選ぶだけ。Collector 側でメソッドを切り替えるため、ユーザーにクライアントの違いを意識させない
  • EdgarConfig はユーザー固有設定のみuser_agent_email 必須)。API ベース URL やレート制限は package 管理とする
  • 既存の Collection / Filing 境界はそのまま利用する

参照