Files
jrshikoku/docs/data-fetch-map.md

30 KiB

JR四国非公式アプリ データ取得経路マップ

作成日: 2026-07-07

目的

Sentryで観測している endpoint=positions / operation_info / train_operation / timetable が、実際にどのURL、hook、画面、バックエンド、外部取得元に対応するかを整理する。

この文書は調査結果のみ。既存コードの変更案は含めるが、実装変更は行っていない。

対象範囲

  • React Native / Expo アプリ側の fetch, observedFetchJson, observedFetchText
  • WebViewに注入しているJavaScript内の fetch
  • WebView内の公式サイトXHR、およびmock XHR interceptor
  • lib/mockApi
  • stateBox 配下のfetch
  • n8n webhook
  • Google Apps Script fallback
  • jr-shikoku-backend-api-v1.haruk.in
  • jr-shikoku-backend-mock-api-v1.haruk.in
  • jr-shikoku-api-data-storage.haruk.in
  • JR四国公式走行位置 https://train.jr-shikoku.co.jp/sp.html
  • JR四国公式運行情報 https://www.jr-shikoku.co.jp/info/
  • 鉄道運用Hub / えれサイトの集約JSON

Sentry観測対象の取得一覧

論理endpoint 呼び出し元ファイル 関数/hook 実URL/host path root_tab/screen 取得タイミング 更新間隔 timeout retry cache fallback Sentry tag endpoint 備考
positions current mock lib/mockApi/positionMasters.ts fetchMockTrainPositions jr-shikoku-backend-mock-api-v1.haruk.in /train-positions/current positions / startup provider mock API有効時、useCurrentTrainuseTrainMenu から呼ばれる 15秒 8000ms 最大1回 module memory last-good 前回成功データを返す positions_current / source=mock_api / user_visible=true / preload=false / fetch_priority=high Sentryでtimeout確認済みの主対象。バックエンド側計測が必要。
positions master mock lib/mockApi/positionMasters.ts fetchPositionMasters jr-shikoku-backend-mock-api-v1.haruk.in /position-masters positions / settings-dependent mock API有効化時、または起動時にmock有効なら取得 基本1回 8000ms 最大1回 module memory _cache なし positions_master / source=mock_api / user_visible=false / preload=true / fetch_priority=medium PosNum+LineからPos文字列を補完。頻度は低い。
positions n8n stateBox/useCurrentTrain.tsx getCurrentTrain n8n.haruk.in /webhook/c501550c-7d1b-4e50-927b-4429fe18931a positions 起動時、mock切替時、interval 15秒 8000ms 最大1回 なし Google Apps Script fallback positions_current / source=n8n / user_visible=true / preload=false / fetch_priority=high mock API無効時の主経路。成功時は録画snapshotにも使う。
positions GAS fallback stateBox/useCurrentTrain.tsx getCurrentTrain catch内 script.google.com /macros/s/AKfyc.../exec positions n8n走行位置取得失敗時のみ n8n失敗時のみ 8000ms 最大1回 既存データとmerge 前回表示データ維持 positions_gas_fallback / source=gas / user_visible=true / preload=false / fetch_priority=high Direction等が欠けるため既存データとmerge。
timetable today stateBox/useAllTrainDiagram.tsx getTrainDiagram jr-shikoku-api-data-storage.haruk.in /tmp/diagram-today.json または /tmp/diagram-today-beta.json provider全体 / timetable consumers provider mount直後 30秒、background継続指定あり。ただしobservedFetch側はbackground開始を抑制 15000ms 最大1回 AsyncStorage ALL_TRAIN_DIAGRAM cache失敗時はalert timetable_today / source=static_storage / user_visible=false / preload=true / fetch_priority=medium ダイヤ・発車標・列車詳細で広く使用。
train operation data stateBox/useAllTrainDiagram.tsx getCustomTrainData jr-shikoku-backend-api-v1.haruk.in または beta /train-data provider全体 / train detail / diagram provider mount直後 30秒、background継続指定あり。ただしobservedFetch側はbackground開始を抑制 15000ms 最大1回 なし 失敗は握りつぶし train_operation_data / source=backend_api / user_visible=false / preload=true / fetch_priority=medium 約1MB級。WebView内でも別途取得される。
operation logs stateBox/useAllTrainDiagram.tsx getTodayOperation jr-shikoku-backend-api-v1.haruk.in または beta /operation-logs provider全体 / topMenu / train detail provider mount直後 30秒、background継続指定あり。ただしobservedFetch側はbackground開始を抑制 15000ms 最大1回 なし 失敗は握りつぶし operation_logs / source=backend_api / user_visible=false / preload=true / fetch_priority=medium 列車別運行ログ。WebView内でも別途取得される。
operation flag stateBox/useAreaInfo.tsx getAreaData n8n.haruk.in /webhook/jr-shikoku-trainfo-flag topMenu / information / provider全体 mount後、InteractionManager後に1200ms遅延 60秒 10000ms 最大1回 なし 失敗は握りつぶし operation_info_flag / source=n8n / user_visible=true / preload=true / fetch_priority=medium topMenuのバッジ・対象エリア判定。
operation text GAS stateBox/useAreaInfo.tsx fetchAreaDescription script.google.com /macros/s/AKfycbz80.../exec topMenu / information operation flagで対象駅ありの場合だけ800ms遅延 flag結果依存 15000ms なし なし 失敗は握りつぶし operation_info_text / source=gas / user_visible=true / preload=false / fetch_priority=medium 第1回観測でtimeout。現在は通常時の実行を抑制。

WebView内の取得一覧

論理endpoint 呼び出し元ファイル 関数/hook 実URL/host path root_tab/screen 取得タイミング 更新間隔 timeout retry cache fallback Sentry tag endpoint 備考
positions official page components/Apps/WebView.tsx AppsWebView train.jr-shikoku.co.jp /sp.html positions 走行位置root初回activate時 WebView lifecycle依存 WebView標準 WebView標準 WebView page cache / OS依存 remount watchdog 未計測 RN SentryではWebView navigation breadcrumbのみ。
positions official XHR live JR四国公式ページ内 公式サイトXHR train.jr-shikoku.co.jp /g?arg1=train&arg2=train positions WebView 公式ページロード後、公式サイト側ポーリング 公式サイト実装依存。概ね数秒単位 公式サイト/ブラウザ依存 不明 公式サイト/ブラウザ依存 mock interceptor可能 未計測 / 候補 positions_webview RN wrapperを通らない。現状Sentryで通信詳細が見えない。
positions official XHR static JR四国公式ページ内 公式サイトXHR train.jr-shikoku.co.jp /g?arg1=lang..., /g?arg1=station..., etc positions WebView 公式ページロード時 基本初回 公式サイト/ブラウザ依存 不明 公式サイト/ブラウザ依存 mock static intercept optional 未計測 lib/mockApi/webviewXhrInterceptor.ts に一覧コメントあり。
positions WebView injected train-data lib/webViewInjectjavascript.ts startPolling/DatalistUpdate jr-shikoku-backend-api-v1.haruk.in /train-data positions WebView Phase 2後、polling開始 30秒 なし なし WebView localStorage 1日 失敗は無視 未計測 / RN側は train_operation RN側Providerと重複取得。WebView内なのでRN Sentryにspanなし。
positions WebView injected operation-logs lib/webViewInjectjavascript.ts operationListUpdate jr-shikoku-backend-api-v1.haruk.in /operation-logs positions WebView Phase 1、Phase 3 polling、visibility復帰 30秒 なし なし WebView localStorage 1日 失敗は無視 未計測 / RN側は operation_info RN側Providerと重複取得。
positions WebView injected diagram lib/webViewInjectjavascript.ts TrainDiagramData2Update jr-shikoku-api-data-storage.haruk.in /tmp/diagram-today.json positions WebView Phase 2、polling 30秒 なし なし WebView localStorage 1時間 失敗は無視 未計測 / RN側は timetable RN側Providerと重複取得。環境切替URLが注入optionにあるが、現コード内fetch文字列は定数参照。
positions WebView injected station-list lib/webViewInjectjavascript.ts Phase 1 n8n.haruk.in /webhook/jr-shikoku-station-list positions WebView WebView注入script起動時 初回中心 なし なし WebView localStorage 1週間 失敗は無視 未計測 / 候補 station_info 走行位置WebView表示の補助データ。
positions WebView injected problems lib/webViewInjectjavascript.ts getProblemsData n8n.haruk.in /webhook/jrshikoku-position-problems positions WebView Phase 1、polling、visibility復帰 30秒 なし なし WebView localStorage 1分 失敗は無視 未計測 / 候補 positions_problem 位置情報問題データ。
positions WebView unyohub lib/webViewInjectjavascript.ts unyohubDataUpdate jr-shikoku-api-data-storage.haruk.in /thirdparty/unyohub-unyo.json positions WebView 設定ON時、Phase 3 30秒 なし なし WebView localStorage 1時間 失敗はconsole 未計測 / 候補 thirdparty_unyohub 鉄道運用Hub由来の集約JSON。
positions WebView elesite lib/webViewInjectjavascript.ts elesiteDataUpdate jr-shikoku-api-data-storage.haruk.in /thirdparty/elesite-unyo.json positions WebView 設定ON時、Phase 3 30秒 なし なし WebView localStorage 1時間 失敗はconsole 未計測 / 候補 thirdparty_elesite えれサイト由来の集約JSON。
operation official page ndView.tsx operation WebView www.jr-shikoku.co.jp /info/ information 運行情報root初回activate時 WebView lifecycle依存 WebView標準 WebView標準 OS/WebView依存 remount watchdog 未計測 injected scriptでページ内容を加工し、画像生成結果をpostMessage。
operation hidden preload Apps.tsx HiddenStartupPreloadWebViews www.jr-shikoku.co.jp /info/ startup hidden preload 起動時preload条件成立時 1回 WebView標準 なし OS/WebView依存 なし 未計測 Sentry breadcrumb/contextのみ。
positions hidden preload Apps.tsx HiddenStartupPreloadWebViews train.jr-shikoku.co.jp / startup hidden preload 起動時preload条件成立時 1回 WebView標準 なし OS/WebView依存 なし 未計測 走行位置WebViewの事前ウォームアップ。

Sentry endpoint対象外だが存在するRN fetch

用途 呼び出し元ファイル 実URL/host path タイミング 更新間隔 cache 備考
update権限 / 外部データ利用権限 stateBox/useTrainMenu.tsx jr-shikoku-backend-api-v1.haruk.in または beta /check-permission?user_id=... push token取得後 token/backend変更時 なし Sentry未計測。queryにuser_idあり。
バス・列車データ stateBox/useBusAndTrainData.tsx script.google.com GAS mount時、AsyncStorage miss時 基本1回 AsyncStorage BUS_AND_TRAIN Sentry未計測。
train pair data stateBox/useBusAndTrainData.tsx script.google.com GAS mount時 基本1回 なし Sentry未計測。
遅延速報EX stateBox/useTrainDelayData.tsx script.google.com GAS loadingDelayData変化時 手動/状態依存 なし Sentry未計測。Android widgetにも同URLあり。
特急列車情報 components/Menu/SpecialTrainInfoBox.tsx n8n.haruk.in /webhook/sptrainfo component mount 1回 なし Sentry未計測。
位置ID補助情報 GET components/発車時刻表/LED_inside_Component/TrainPosition.tsx, components/ActionSheetComponents/EachTrainInfo/TrainDataView.tsx n8n.haruk.in /webhook/JR-shikoku-PosID-v3?PosId=... 列車詳細/LED表示時 表示対象変更ごと なし Sentry未計測。UI細部表示用。
位置ID補助情報 POST/DELETE TrainPositionDataPush.tsx, TrainPositionDataDelete.tsx n8n.haruk.in /webhook/JR-shikoku-PosID-v3 ユーザー投稿/削除要求 操作時 なし Sentry未計測。mutating request。
通知設定登録 components/Settings/NotificationSettings.tsx n8n.haruk.in /webhook/jr-shikoku-notification-configurations 設定保存操作時 操作時 AsyncStorageに設定保存 Sentry未計測。tokenを送る。
unyohub RN hook stateBox/useUnyohub.tsx jr-shikoku-api-data-storage.haruk.in /thirdparty/unyohub-unyo.json 設定ON時 10分 AsyncStorage WebView内でも別取得あり。
elesite RN hook stateBox/useElesite.tsx jr-shikoku-api-data-storage.haruk.in /thirdparty/elesite-unyo.json 設定ON時 10分 AsyncStorage WebView内でも別取得あり。
駅住所LOD components/駅名表/AddressText.tsx station別 jslodApi .json 駅名標表示時 表示対象変更ごと なし 外部LOD。Sentry未計測。
Anpanman列車状態 components/ActionSheetComponents/EachTrainInfoCore/trainIconStatus.tsx n8n.haruk.in /webhook/{anpanmanApiPath}?trainNum=... 対象列車詳細表示時 対象変更ごと なし Sentry未計測。
Android operation widget components/AndroidWidget/InfoWidget.tsx script.google.com operation info GAS widget更新時 widget runtime依存 なし RN画面外。
Android delay widget components/AndroidWidget/TraInfoEXWidget.tsx script.google.com delay GAS widget更新時 widget runtime依存 なし RN画面外。
GeneralWebView recording import GeneralWebView.tsx arbitrary / blob / resolvedUri内 download URL 録画importリンク操作時 操作時 なし 任意URL由来。Sentry endpoint化すべきではない。

endpoint別依存関係

positions

positions screen
  ├─ RN provider: useCurrentTrain
  │   ├─ mock ON: jr-shikoku-backend-mock-api-v1 /train-positions/current
  │   │   └─ fallback: module memory last-good cache
  │   └─ mock OFF: n8n /webhook/c501550c...
  │       └─ fallback: Google Apps Script positions fallback
  │           └─ fallback: currentTrain previous state if present
  ├─ RN provider: useTrainMenu
  │   ├─ mock ON: /position-masters
  │   └─ mock ON: /train-positions/current, then inject to WebView mock XHR
  └─ WebView: train.jr-shikoku.co.jp/sp.html
      ├─ official XHR /g?arg1=train&arg2=train
      ├─ official XHR static /g?... station/lang/etc
      └─ injected enhancement fetches backend/storage/n8n auxiliary data

表示対象:

  • 走行位置画面
  • 列車詳細ActionSheet
  • 発車標/LED系
  • fixed position box

現Sentry tag:

  • endpoint=positions
  • WebView公式XHRは未計測。候補は positions_webview

operation_info

topMenu / information / train detail
  ├─ useAreaInfo
  │   ├─ n8n /webhook/jr-shikoku-trainfo-flag
  │   └─ if active area exists: Google Apps Script operation text
  ├─ useAllTrainDiagram
  │   └─ jr-shikoku-backend-api-v1 /operation-logs
  ├─ information WebView
  │   └─ www.jr-shikoku.co.jp/info/ official page
  │       └─ injected script parses/captures page and postMessage to RN
  └─ widgets / delay providers
      ├─ operation info GAS
      └─ delay GAS

表示対象:

  • topMenuバッジ・運行情報カード
  • informationタブ
  • 列車詳細内の運行ログ表示
  • Android widgets

現Sentry tag:

  • endpoint=operation_info
  • WebView公式ページは未計測。

train_operation

train detail / diagram / WebView enhancement
  ├─ RN: useAllTrainDiagram -> backend /train-data
  └─ WebView injected JS -> backend /train-data
      └─ localStorage cache 1 day

表示対象:

  • 列車詳細
  • ダイヤ/発車標
  • 走行位置WebViewの列車アイコン・編成/運用装飾

現Sentry tag:

  • RN fetch: endpoint=train_operation
  • WebView fetch: 未計測

timetable

timetable / station diagram / train detail
  ├─ RN: useAllTrainDiagram -> data-storage /tmp/diagram-today.json
  │   └─ fallback: AsyncStorage ALL_TRAIN_DIAGRAM
  └─ WebView injected JS -> data-storage /tmp/diagram-today.json
      └─ localStorage cache 1 hour

表示対象:

  • 時刻表
  • 発車標
  • 列車詳細停車駅/通過駅
  • 走行位置WebView内の補助表示

現Sentry tag:

  • RN fetch: endpoint=timetable
  • WebView fetch: 未計測

画面別fetch一覧

アプリ起動直後

Providerがmountされるため、現在の構成では表示タブに関係なく以下が走り得る。

取得 起動時挙動 備考
useCurrentTrain.getCurrentTrain 即時1回、その後15秒interval positions。mock ON/OFFで経路が変わる。
useAllTrainDiagram.getTrainDiagram 即時1回、その後30秒interval timetable。AsyncStorage fallbackあり。
useAllTrainDiagram.getCustomTrainData 即時1回、その後30秒interval train_operation。
useAllTrainDiagram.getTodayOperation 即時1回、その後30秒interval operation_info。
useAreaInfo.getAreaData InteractionManager後 + 1200ms遅延。その後60秒interval operation_info flag。対象ありならGAS textも800ms遅延。
useTrainMenu.check-permission push token取得後 Sentry未計測。
hidden preload WebViews preload条件成立時 positions公式/operation公式を不可視WebViewでロード。

topMenu表示中

取得 発生源 備考
positions RN polling useCurrentTrain provider 表示タブに関係なく継続。ただしbackgroundではinterval停止。
timetable / train_operation / operation_logs useAllTrainDiagram provider 表示タブに関係なく30秒ごと。
operation flag / text useAreaInfo topMenu表示内容に直結。
special train info SpecialTrainInfoBox 該当Sheet表示時のみ。

positions表示中

取得 発生源 備考
positions RN polling useCurrentTrain 15秒。画面表示に必須。
train.jr-shikoku公式WebView AppsWebView 公式XHRはRN Sentry不可視。
WebView injected train-data / operation-logs / diagram / station-list / problems webViewInjectjavascript RN providerと重複取得あり。WebView localStorage cacheあり。
unyohub / elesite WebView injected JS、またはRN hooks 設定ON時のみ。

information表示中

取得 発生源 備考
JR四国公式運行情報WebView ndView.tsx https://www.jr-shikoku.co.jp/info/。RN Sentryではpage load breadcrumb中心。
operation flag/text useAreaInfo バッジ/本文補助。
operation logs useAllTrainDiagram 列車別運行ログ。

バックグラウンド復帰時

取得 発生源 備考
useInterval AppState active復帰時に即時実行 userStoppedでなければ即時fetch。observedFetch側はbackground開始を抑制。
positions WebView useWebViewRemount / WebView lifecycle iOSはunfocused時watchdog pause設定あり。
WebView injected refreshAllData document visibilitychange/pageshow WebView内で train-data / operation-logs / position-problems を再取得。RN Sentry不可視。
GeneralWebView background 10秒超でremount 汎用WebViewのみ。

起動時/タブ切替時fetchタイムライン

T+0ms app providers mount
  ├─ useCurrentTrain -> positions current fetch
  ├─ useAllTrainDiagram -> timetable fetch
  ├─ useAllTrainDiagram -> train_operation fetch
  ├─ useAllTrainDiagram -> operation_logs fetch
  └─ useTrainMenu -> settings/env load, maybe check-permission after token

T+after interactions + 1200ms
  └─ useAreaInfo -> operation_info_flag
      └─ if active area exists: +800ms -> operation_info_text GAS

TopMenu first screen
  └─ no page-specific heavy WebView, but provider fetches above continue

positions first activation
  ├─ AppsWebView loads train.jr-shikoku.co.jp/sp.html
  ├─ official site starts /g?... XHRs
  ├─ injected JS Phase 0: WebView localStorage cache read
  ├─ injected JS Phase 1: station-list, operation-logs, position-problems
  ├─ injected JS Phase 2: train-data, diagram-today
  └─ injected JS Phase 3: 30s polling, optional unyohub/elesite

information first activation
  ├─ ndView WebView loads www.jr-shikoku.co.jp/info/
  └─ injected script parses/captures page and postMessage to RN when user capture actions occur

Tab switch back to positions/information
  ├─ root component is kept after activation
  ├─ WebView retention depends on current navigation/root gating and OS WebView process
  └─ provider-level RN fetches generally continue independent of active tab

危険度・制御方針

High priority

取得 分類理由 推奨方針
/train-positions/current 表示中timeoutがユーザー体感に直結。Sentryで実測済み。 server-side duration/upstream/cacheログ、backend last-known-good、app persistent stale cache。
useCurrentTrain n8n positions mock OFF時の主経路。走行位置画面に必須。 stale cache導入、失敗時UI全体error回避、endpoint細分化。
JR公式WebView /g?arg1=train&arg2=train 走行位置WebViewの本体だがRN Sentry不可視。 WebView postMessage計測、またはRN側 proxy/cache化を検討。
/operation-logs WebView/RNで重複、列車詳細表示に影響。 backend span/cache hit/miss、WebView側計測。
/train-data 大きいレスポンス、RN/WebViewで重複。 stale cache、conditional fetch、WebView/RN共有設計。

Medium priority

取得 分類理由 推奨方針
diagram-today.json 広範囲で使うがAsyncStorage fallbackあり。 stale cache明示、WebView側との重複削減。
operation_info_flag topMenuバッジ/運行情報表示に影響。 endpoint細分化、失敗時は前回状態維持。
operation_info_text GAS 遅延/timeout履歴あり。必須ではない詳細本文。 preloadではなく遅延維持、stale cache、cellular抑制候補。
station-list / position-problems WebView 表示補助。WebView内でのみ見えにくい。 WebView breadcrumb/postMessage計測。
unyohub / elesite 設定ON時のみだがWebView内は30秒polling。 cellular抑制、10分程度へ間引き、Sentry breadcrumb。

Low priority

取得 分類理由 推奨方針
bus/train GAS 初回またはcache miss中心。 observedFetch化は後回し。
train pair GAS 補助データ。 cache導入候補。
special train info Sheet表示時のみ。 失敗UIだけ整備。
notification config ユーザー操作時のみ。 mutationとして個別エラーハンドリング。
station LOD address 駅名標詳細のみ。 失敗しても無表示でよい。
Anpanman status 装飾表示。 失敗してもUI全体に影響させない。

stale cacheを入れるべき取得

優先度 取得 理由 推奨cache
High /train-positions/current 走行位置表示が直接壊れる backend last-known-good + app persistent cache。TTL 30-120秒。
High n8n positions mock OFF時の主経路 app persistent last-good。TTL 30-120秒。
High JR公式WebView train XHR WebView表示本体 公式XHRをRN/proxy化できるならstale。難しければWebView localStorage/postMessage。
Medium /operation-logs 列車詳細/運行情報補助 backend/app cache。TTL 1-5分。
Medium /train-data 大容量かつ重複取得 app/WebView共有cache。TTL 1日でも許容しやすい。
Medium diagram-today.json 既にAsyncStorage fallbackあり 既存cacheをstale表示として明示。TTL 1日。
Medium operation_info_flag バッジ/エリア判定 前回状態維持。TTL 1-5分。
Medium operation_info_text GAS遅延に弱い 前回本文保持。TTL 5-30分。
Low unyohub / elesite 設定ON時の補助 既存AsyncStorage/WebView localStorageを活用。TTL 10-60分。

バックエンド側に計測を入れるべきAPI

API host 理由 必要な計測
/train-positions/current jr-shikoku-backend-mock-api-v1.haruk.in Sentryでforeground timeout確認済み。 handler duration, upstream duration, cache hit/miss, stale served, status, bytes, upstream error kind。
/position-masters jr-shikoku-backend-mock-api-v1.haruk.in mock経路の基礎データ。頻度低いが失敗時mock表示品質に影響。 handler duration, cache hit/miss, db/storage duration。
/train-data jr-shikoku-backend-api-v1.haruk.in 大容量・RN/WebView重複取得。 handler duration, data source duration, response bytes, compression, cache status。
/operation-logs jr-shikoku-backend-api-v1.haruk.in operation_infoとしてRN/WebView重複取得。 handler duration, query/upstream duration, cache status, filtered count。
/check-permission jr-shikoku-backend-api-v1.haruk.in user_id queryあり、失敗しても表示は続くが権限UIに影響。 duration, auth/lookup duration, no PII logging。
diagram-today.json publish pipeline jr-shikoku-api-data-storage.haruk.in 静的配信だが生成元障害は広範囲影響。 CDN/storage access log, generation timestamp, object age, size。
thirdparty/unyohub-unyo.json jr-shikoku-api-data-storage.haruk.in 外部由来の集約結果。 generation timestamp, upstream scrape duration, source error count。
thirdparty/elesite-unyo.json jr-shikoku-api-data-storage.haruk.in 外部由来の集約結果。 generation timestamp, upstream scrape duration, source error count。

Sentry endpoint tag改善案

RN側observedFetchについては、4分類から以下の低カーディナリティな論理endpointへ細分化済み。area=data_fetch, result, root_tab, status は維持し、source, user_visible, preload, fetch_priority を追加した。

現在のRN側endpoint分類

低カーディナリティを維持するため、URL単位ではなく論理単位で増やす。

旧endpoint 現endpoint 対象
positions positions_current 現在位置本体。n8n current / mock currentを含めるかは要検討。
positions positions_master /position-masters
positions positions_gas_fallback Google Apps Script fallback。
未計測 positions_webview JR公式WebView XHR / postMessage計測。
operation_info operation_info_flag n8n flag。
operation_info operation_info_text Google Apps Script text。
operation_info operation_logs backend /operation-logs
train_operation train_operation_data backend /train-data
timetable timetable_today diagram-today.json
未計測 thirdparty_unyohub unyohub集約JSON。
未計測 thirdparty_elesite elesite集約JSON。

追加tag

  • source=rn_fetch|mock_api|n8n|gas|backend_api|static_storage|webview_fetch
  • user_visible=true|false
  • preload=true|false
  • fetch_priority=high|medium|low

注意

  • endpoint tagにURL全文やID入りpathは入れない。
  • urlHosturlPathTemplate はcontextに維持する。
  • positions_current をn8n/mock/GASで分けすぎるとissue数は追いやすいが、全体のpositions失敗率は見にくくなる。source tagまたはcontextで mock_api / n8n / gas を分ける案も有効。

変更案の優先順位

High

  1. positions_current のendpoint細分化、または source=mock_api|n8n|gas 追加。
  2. WebView公式XHR /g?arg1=train&arg2=train のpostMessage計測。
  3. backend mock API /train-positions/current にserver-side span/cache/upstream durationを追加。
  4. positionsのpersistent stale cache。

Medium

  1. operation_infooperation_info_flag / operation_info_text / operation_logs に分離。
  2. WebView injected JS fetchの軽量postMessage計測。
  3. /train-datadiagram-today.json のRN/WebView重複取得を整理。
  4. unyohub/elesiteのWebView polling間隔を30秒から設定/TTLベースへ見直し。

Low

  1. LED/駅詳細/通知/Widget系の直接fetchをobservedFetch化。
  2. 任意URLを扱うGeneralWebView importはSentry endpoint化せず、操作エラーとして別分類。
  3. station LOD address fetchの失敗をUI非表示に統一。

現時点の結論

  • Sentryで見えている positions のtimeoutは、RN側のmock currentまたはn8n/GAS経路のどれかに紐づく。今回観測された urlHost=jr-shikoku-backend-mock-api-v1.haruk.in, urlPathTemplate=/train-positions/current はmock currentで確定。
  • 走行位置画面ではRN provider fetchとWebView公式XHR、さらにWebView injected fetchが並行して走る。見えているSentry spanはRN provider側だけで、WebView内の公式取得は不可視。
  • operation_info はflag、GAS text、backend operation logs、公式WebViewの4系統が混在しているため、細分化した方が原因追跡しやすい。
  • train_operationtimetable はRNとWebViewで重複取得している。ユーザー体感の安定化には、stale cacheと重複削減が効きやすい。
  • バックエンド側で最優先に計測すべきは /train-positions/current。次点で /train-data/operation-logs