サイエンス
スコアの仕組み
— 7 要因の科学
FishCast の釣果予測スコアは、海洋学・気象学・行動生態学の知見をもとに 7 つの要因を重み付けし、0〜100 点で表現します。アルゴリズムの根拠と各要因の重み・データソースを公開します。
/
7 つの要因
潮汐 (Tide)
重み 25%重要度: 高大潮・中潮・小潮・長潮・若潮の潮回りと、満潮・干潮の差 (潮位差) を評価。潮位差が大きいほど海水が動き、プランクトンと小魚が活発化、フィッシュイーターの捕食スイッチが入りやすくなります。旧暦に基づき正確に判定。
ソルナー (Solunar)
重み 15%重要度: 高月の引力に基づくメジャータイム・マイナータイムを算出。月の南中・反中 (メジャー) と月の出・月の入り (マイナー) が魚の活性ピークに対応するとされ、新月・満月で効果が最大化されます。
気圧 (Pressure)
重み 15%重要度: 中低気圧接近時に魚の浮き袋が膨張し、表層〜中層に浮きやすくなる現象を考慮。絶対値より「気圧変化速度」を重視し、急激な低下局面で高スコアになります。台風前の荒食いはこの効果。
水温 (Water Temperature)
重み 15%重要度: 中魚種ごとに適水温が異なるため、対応 19 魚種それぞれの最適レンジに対する近さで評価。海面水温データを基に、季節変化と短期変動を組み合わせて判定します。
天候 (Weather)
重み 10%重要度: 中風速・降水量・雲量を総合評価。曇天・適度な風 (2〜4m/s) は魚に警戒心を解かせ高評価、暴風・豪雨・ピーカン無風は低評価。Open-Meteo の予報データを使用。
時間帯 (Time of Day)
重み 10%重要度: 中朝マズメ (日の出前後 1 時間) と夕マズメ (日没前後 1 時間) を最高評価。日中は魚種により評価が分かれます (タチウオ・アナゴは夜行性で夜間高評価)。緯度と季節に応じて自動調整。
地形 (Terrain)
重み 10%重要度: 低〜中堤防・磯・砂浜・河口の地形タイプを地点情報から推定。魚種と地形の相性 (例: クロダイ⇔磯、キス⇔砂浜) を加味してスコアを微調整します。
7 要因の重み付け (実数値)
以下はモバイルアプリ実装 (apps/mobile/lib/core/constants/app_constants.dart) のデフォルト重みです。魚種を指定すると、魚種別の重み (FishSpeciesConfig) が動的に適用されます。Remote Config 経由で本番値を遠隔チューニングできる構造です。
| 要因 | 重み | 区分 |
|---|---|---|
| 潮汐 (Tide) | 25% | 高 |
| ソルナー (Solunar) | 15% | 高 |
| 気圧 (Pressure) | 15% | 中 |
| 水温 (Water Temperature) | 15% | 中 |
| 天候 (Weather) | 10% | 中 |
| 時間帯 (Time of Day) | 10% | 中 |
| 地形 (Terrain) | 10% | 低〜中 |
| 合計 | 100% |
注: 上記は全魚種共通のデフォルト値です。例えば「マダイ」では潮汐 30% / 気圧 10%、「カサゴ」では水温 25% / 時間帯 20% など、魚種別に重みが動的に調整されます (全 19 魚種対応)。
データソース
各要因のスコアは、第三者が検証可能な公開 API または自前の天文計算をもとに算出しています。コスト保護のためインメモリ TTL キャッシュを段階的に設定しています。
| 要因 | データソース | エンドポイント | キャッシュ |
|---|---|---|---|
| 潮汐 | WorldTides API Firebase Cloud Functions (asia-northeast1 / getTideData) 経由でプロキシ。heights / extremes を取得、TideType は旧暦日から算出 | www.worldtides.info/ | 12 時間 (当日中は潮位予測が変わらないため) |
| ソルナー | 自前天文計算 (LunarCalculator) 月相 (lunarAge)・月の南中/反中・月の出/月の入りを計算し、メジャー/マイナータイムを算出 | — | リアルタイム計算 (外部 API 不使用) |
| 気圧 | Open-Meteo Forecast API hourly=surface_pressure を使用。前時刻との差分から気圧変化速度を算出 | api.open-meteo.com/v1/forecast | 10 分 (座標は小数 2 桁丸めでキー化、1 画面あたり API 4 → 1 回に削減) |
| 水温 | Open-Meteo Marine API hourly=sea_surface_temperature,ocean_current_velocity を使用。失敗時は気温 × 0.7 + 5.0 で推定値にフォールバック | marine-api.open-meteo.com/v1/marine | 30 分 (水温は変化が遅いため長め) |
| 天候 | Open-Meteo Forecast API hourly=weather_code (WMO Code), wind_speed_10m, temperature_2m, relative_humidity_2m を取得 | api.open-meteo.com/v1/forecast | 10 分 (気圧と同一エンドポイント・同一キャッシュ) |
| 時間帯 | デバイス時刻 + 緯度経度 端末ローカル時刻から hour (0-23) を取得。緯度経度から日の出/日の入りを天文計算で導出 | — | リアルタイム (外部 API 不使用) |
| 地形 | Firestore (spots コレクション) ユーザー登録スポットの spotType (堤防 / 磯 / サーフ / 河口 / 漁港 / 砂浜 / テトラ / 岩場 / その他)。Phase 0 で構造化属性を追加予定 | — | Firestore 即時読み込み |
外部 API リファレンス: WorldTides (worldtides.info) / Open-Meteo Forecast (open-meteo.com/en/docs) / Open-Meteo Marine (open-meteo.com/en/docs/marine-weather-api)
スコア帯の 5 段階
算出された 0〜100 点は、釣果期待度に応じて 5 段階の帯で表示されます。色はモバイル版・Web 版で共通です。
全要因が噛み合う最高条件。釣行を強く推奨。
複数の要因が好条件。釣果期待度は十分。
平均的な条件。腕と魚種選びで結果が変わる。
複数の要因が逆風。ポイント選びで勝負。
条件が揃わない日。安全第一で見送りも選択肢。
重み付けの考え方
7 要因は等価ではありません。観測データと一般的な釣り知見をもとに、潮汐 25%を最上位の主要因子、ソルナー・気圧・水温を 15%ずつで準主要因子、天候・時間帯・地形を 10%ずつの補正因子として扱っています。将来的には、ユーザーが投稿した実釣果データを学習し、係数を継続的にチューニングする方針です (現状の重みは静的デフォルト + Remote Config 遠隔上書きの構成)。