トップ / プロダクト / 手動でクロール実行

手動でクロール実行

このページでできること

  • 選択中プロダクトの「全 URL 数 / 当日クロール済み / 当日未クロール」を確認できます。
  • 本日未クロールのみ全 URL 再クロール一覧から選択した URL のみの 3 通りで手動クロールを開始できます。
  • ブラウザ上でリアルタイム進捗(SSE ストリーミング)を確認しながら完走できます。
  • クロール間隔と(pending / all モード向けの)件数上限で負荷を制御できます。

URL: pages/run.php?product_id=<id>。サイドバーの「プロダクト → 手動でクロール実行」から開きます。システム管理者・プロダクト管理者の両方がアクセスできます。

登録 URL の状況(カード①)

本日(JST 日付)時点で、このプロダクトの登録 URL がどこまで処理済みかを 3 つの数字で表示します。

項目意味計算元
事前登録 URL(全件)このプロダクトに登録されている URL の総数Repository::countUrls()
本日クロール済み当日 (JST) すでに crawl_results に行がある URL の本数Repository::countUrlsCrawledOnDate()
本日未クロール「全件 − 本日クロール済み」計算値
日付の判定は JST(日本時間)です crawl_results.created_at は UTC で保存されています。「本日クロール済みか」は date(created_at, '+9 hours') で JST に補正して比較します(データベース設計 参照)。

クロール設定(カード②)

クロール間隔(秒)

1 回のクロール件数の上限

3 つの実行モード

ボタン / モード挙動典型的な使いどき
本日未クロールの URL のみpending listUrlsNotCrawledOnDate() の URL のみ。同日の二重取得を避ける推奨モード。 cron 補完・新規 URL の即時取得。
全 URL を再クロールall listUrls() の全件。当日済み URL も再取得。 サイト改修後の全体再評価・ロジック更新後の再解析。
選択した URL を再クロールselected 下の一覧でチェックした product_urls.id のみ。listUrlsByIds() で解決。 特定パスのみ再取得・改修ページのピンポイント確認。

URL を選んで再クロール(一覧 UI)

登録 URL が 1 件以上あるとき、フォーム下部に選択用テーブルが表示されます。

ストリーミング実行(通常経路)

JavaScript 有効時は、フォーム送信をインターセプトして pages/run_stream.phpfetch() します(画面自体の UI は run.php のまま)。

run_stream.php(SSE)

run_status.php(JSON ポーリング)

SSE 接続が途中で切れたとき、クライアント JS が GET run_status.php?run_id= をポーリングし、サーバ側でクロールがまだ走っているか/完了したかを確認します。

画面上の進捗表示

実行中はプログレスバー・現在処理中 URL・成功/エラー件数・Run #ID が更新されます。完了後は結果テーブル(URL / HTTP / 状態)と、結果一覧エラー URL 管理 へのリンクが出ます。

フォールバック(JavaScript 無効時)

通常はクライアント側 JS がストリーミングを担当するため、run.php への同期 POST は JS 無効環境向けのフォールバックです。この経路では件数が多いと Web サーバ/リバプロのタイムアウトに当たりやすいため、上限を強めに抑え、JS 有効化を案内します。

クロールの内部動作

  1. モードに応じて URL 配列を作成(pending / all / selected)。
  2. (pending / all のみ)上限指定時は array_slice()
  3. crawl_runs に 1 行 INSERT(trigger='manual')。
  4. プロダクト設定を読み込み:breadcrumb_selectorsdisabled_detection_typesメタ情報検出設定)。
  5. 各 URL を PageFetcherSchemaAnalyzer で解析し crawl_results へ INSERT。
  6. 完了後 crawl_runs を UPDATE。
長時間のクロールに注意 処理時間の目安は (対象件数) × (クロール間隔) + (各 URL の取得時間)。大量 URL は Cron スケジュール の「1 回あたり URL 上限」と毎時の cron 自動実行 の併用を推奨します。
cron との関係 手動の pending と cron は同じ listUrlsNotCrawledOnDate() を共有します。cron が処理した URL は手動の「本日未クロール」件数からも減ります(cron 自動実行 参照)。