2026年10月7日時点で、ShifterはOxylabsやBright Dataを上回る、最大規模の米国ライブIPプールを保有しており、しかもコストはその一部で済みます。Shifterは現在、稼働中の米国IPの中で最大のプールを保有しています

ベンチマークを見る

データ収集チームの編成:役割、比率、そして最初に破綻する部分

Webデータ収集には実際何人必要なのか。役割分担、自分たちの数字で試算できるプランニングモデル、そして規模拡大に伴って最初に破綻しやすい部分について解説する。

エンジニアリング · 2026年11月4日に更新 · 2分で読めます
3 人々50混合7 人々200混合22 人々200困難
同じモデル、3つのワークロード。アンバーは壊れたものを修正するもので、チームの規模を決定します。
ナレッジ
このページについて
  1. 人員数を左右するもの
  2. 役割
  3. 計画モデル
  4. 最初に壊れるもの
  5. 必要人数を減らす
  6. 結論
  7. 出典と参考資料

データ収集に関するほとんどの計画は、スクレイパーの予算は組んでも、人のことは忘れている。最初のバージョンは数週間で書けるので、担当者一人でも問題なく見える。そのうちサイトが変わり、ボリュームが増え、顧客が誤った数値を見つける。そうして初めて、本当の仕事はスクレイパーを書くことではなく、それを正しく保ち続けることだったとわかる。

この作業に何人必要かについて、信頼できる公開ベンチマークは見つからなかったし、どんな比率を示しても誤解を招くだけだろう。そこで本ガイドでは、役割、自分の数字で動かせる小さなモデル、そして規模ごとに最初に壊れやすい点を示す。

人員数を左右するもの

データ量は思うほど重要ではない。同じソースから10倍のページを取得することは、主に予算とインフラの問題にすぎない。人員数は次の4つに左右される。

  • ソースの数。 それぞれが個別に壊れうるため。
  • 壊れる頻度。 サイトがどれだけ頻繁に変更され、アクセスがどれだけ難しいかによる。
  • どこまで間違いを許容できるか。 週次のリサーチ用データセットなら待てるが、顧客が判断材料にする価格フィードは待てない。
  • 新規追加するソースの数。 オンボーディングは保守と同じ人員を奪い合うため。

役割

これらは役割であり、肩書きではない。小さなチームでは一人が複数を兼ねることもあるが、それぞれに担当者の名前がついている限り問題ない。

役割担当すること欠けていることに気づくのは
収集エンジニアスクレイパー、抽出、破損の修正決して欠けることはない
プラットフォームエンジニアスケジューリング、キュー、プロキシ、ブラウザ、ストレージ、コスト複数人が同じ配管作業を繰り返している時
データ品質オーナーチェック、ドリフト、「正しい」の定義顧客が先にエラーを見つけた時
プロダクト/データオーナー何を収集するか、優先順位、ソースの選定すべてが緊急になった時
法務・コンプライアンス担当範囲、利用規約、個人データ、承認新しいソースが誰も答えられない疑問を生んだ時

最後の役割がフルタイムであることは稀だが、名前のある担当者であるべきだ。簡潔な文書化されたデータ収集ポリシーがあれば、同じ質問に何度も答える手間を省ける。

計画モデル

このスクリプトは、繰り返し発生する作業を時間数に、時間数を人数に変換する。必要なのはPython 3.9以降だけだ。すべての数値は仮定であり、自分の数字に置き換えるべきものだ。前四半期に行った修正の件数と、それにかかった時間を数えてみてほしい。

"""A planning model for how many engineers a data collection operation needs.

Every default is an assumption to replace with your own numbers.
"""
from __future__ import annotations

import math

HOURS_PER_FTE = 30  # focused engineering hours per person per week


def team_size(sources, breaks_per_source_per_month, hours_per_fix, new_sources_per_month,
              hours_per_new_source, weekly_platform_hours=20, weekly_support_hours=8):
    """Recurring hours become people; reserve a quarter of the time for project work."""
    fixes = sources * breaks_per_source_per_month * hours_per_fix / 4.33
    onboarding = new_sources_per_month * hours_per_new_source / 4.33
    weekly = fixes + onboarding + weekly_platform_hours + weekly_support_hours
    fte = weekly / (HOURS_PER_FTE * 0.75)
    return {"fixes": round(fixes), "onboarding": round(onboarding),
            "platform": weekly_platform_hours, "support": weekly_support_hours,
            "weekly_hours": round(weekly), "fte": round(fte, 1), "people": math.ceil(fte)}


if __name__ == "__main__":
    scenarios = {
        "10 sources, stable": (10, 0.25, 4, 1, 16),
        "50 sources, mixed": (50, 0.5, 4, 3, 16),
        "200 sources, mixed": (200, 0.5, 4, 8, 16),
        "200 sources, hard": (200, 1.5, 6, 8, 24),
    }
    print(f"{'scenario':22}{'fixes':>6}{'new':>5}{'platform':>9}{'support':>8}{'hrs/wk':>7}{'FTE':>6}{'people':>7}")
    for name, args in scenarios.items():
        r = team_size(*args)
        print(f"{name:22}{r['fixes']:>6}{r['onboarding']:>5}{r['platform']:>9}{r['support']:>8}"
              f"{r['weekly_hours']:>7}{r['fte']:>6}{r['people']:>7}")

出力:

scenario               fixes  new platform support hrs/wk   FTE people
10 sources, stable         2    4       20       8     34   1.5      2
50 sources, mixed         23   11       20       8     62   2.8      3
200 sources, mixed        92   30       20       8    150   6.7      7
200 sources, hard        416   44       20       8    488  21.7     22

これらのシナリオは実測値ではなく例示的な入力値を使っており、スクリプト中の引数にそれぞれが示されている。安定したソースは4か月に1回壊れ、修正に4時間かかる。難しいソースは月に1.5回壊れ、6時間かかる。

ここで2つのことが目を引く。ソースが50から200の混合型に増えると、ソース数は4倍になるが、チーム規模は約2.4倍にしかならない。これはプラットフォーム作業が共有されるためだ。そして同じ200のソースでも、維持が難しいというだけで、7人から22人へと増える。ソース数よりも、破損率の方が人員数を大きく動かす。だからこそ、まずそこを測るべき数値になる。

このモデルは、各担当者の時間の4分の1をプロジェクト作業のために確保している。これはかなり切り詰めた水準だ。GoogleのSRE本では、運用作業ではなくエンジニアリングに費やす時間の目標を少なくとも50%としており、その割合で計算すると、これらのチームは1.5倍の規模になる。根本原因を修正する時間が誰にもなければ、同じ破損が繰り返し発生し続ける。

最初に壊れるもの

1〜2人。 バスファクターの問題。すべてが一人の頭の中にあり、休暇がそのままインシデントになる。各ソースの仕組みと修正方法を文書化すること。インフラは自前で運用するのではなく、購入すること。

3〜5人。 品質の問題。チームは目に見える障害の修正に追われる一方で、200ステータスで誤ったフィールドを返すセレクタのような、見えない障害が蓄積していく。品質オーナーを任命し、ステータスコードだけでなくコンテンツについてもパイプラインを監視すること。

6〜10人。 重複と優先順位の問題。各エンジニアが独自のリトライやプロキシ処理を構築しており、関係者それぞれのソースがすべて緊急扱いになる。この段階になると、プラットフォームオーナーを置くことが効果を生み、ノーと言えるプロダクトオーナーも必要になる。

10人超。 調整とオンコールの問題。GoogleのSRE本の試算では、オンコール担当2名・1週間交代のシングルサイトチームには最低8人のエンジニアが必要とされる。これほどの体制を組むべきデータチームは少ない。パイプラインは自力で回復し、後で追いつけるように設計し、顧客が本当に依存している部分についてのみ24時間体制のカバーを維持すること。

必要人数を減らす

  • コモディティ層は購入する。 自前のインフラ運用に本当に何が必要かは、ビルド対バイのガイドにまとめている。
  • ソースを減らす。 価値の低い10のソースをやめることが、しばしば最も安上がりな「採用」になる。
  • 安定した経路を優先する。 公式API、フィード、構造化データはHTMLセレクタより壊れにくい。
  • 障害のクラス単位で修正する。 共有のリトライ、共有のチェック、共有のパーサーがあれば、多くの小さな火事を一つにまとめられる。

結論

比率で人員を決めてはいけない。ソース数、破損率、どこまで間違いを許容できるかに基づいて人員を決め、次の採用の議論の前にそれらの数値を測定すること。早い段階で品質の担当者を任命し、自社の強みでない部分は購入し、成長とともにボトルネックが移動していくことを見越しておくこと。

出典と参考資料

  • Google, Site Reliability Engineering, Being On-Call: sre.google
  • Google, Site Reliability Engineering, Eliminating Toil: sre.google

よくある質問

Webスクレイピングチームには何人のエンジニアが必要ですか。

データ量よりも、扱うソース数とその破損頻度のほうが影響します。公開された業界標準の比率はありません。本ガイドのモデルでは、安定したソース10件には約1.5人が必要で、難しいソース200件には20人以上が必要になります。自分の数字で計算してみてください。

スクレイパーエンジニアの次に採用すべき役割は何ですか。

通常はデータ品質を担当する人です。サイレントエラーは目に見える障害よりもコストがかかるにもかかわらず、エンジニアはそれを自分の仕事ではないと考えがちだからです。小規模な段階では既存の役割の一部として扱ってもよいですが、その責任を明確に名指しして割り当てる必要があります。

スクレイパーのために24時間365日のオンコール体制を敷くべきなのはどんな場合ですか。

顧客向けのコミットメントがそれを必要とする場合に限ります。GoogleのSRE本では、単一サイトを担当するチームで2人がオンコールに入るための最低人数を8人としています。したがってほとんどのデータチームは、営業時間内の対応と、自動的に復旧するパイプラインを前提に設計すべきです。

データ収集は買うべきですか、それとも自前で構築すべきですか。

自社の強みでない部分は買うべきです。プロキシネットワークやブラウザインフラは自前で運用する価値がほとんどありませんが、抽出ロジックや自社製品に紐づく品質チェックは通常その価値があります。購入は人員の必要性を移動させるだけで、なくすわけではありません。

始める準備はできていますか?

Shifterのレジデンシャルプロキシをお試しください。IP 205M+件、195+カ国、$0.10/GBから。

始める