FishCast

サイエンス

スコアの仕組み
— 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/forecast10 分 (座標は小数 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/marine30 分 (水温は変化が遅いため長め)
天候Open-Meteo Forecast API

hourly=weather_code (WMO Code), wind_speed_10m, temperature_2m, relative_humidity_2m を取得

api.open-meteo.com/v1/forecast10 分 (気圧と同一エンドポイント・同一キャッシュ)
時間帯デバイス時刻 + 緯度経度

端末ローカル時刻から 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 版で共通です。

81-100絶好

全要因が噛み合う最高条件。釣行を強く推奨。

61-80良好

複数の要因が好条件。釣果期待度は十分。

41-60普通

平均的な条件。腕と魚種選びで結果が変わる。

21-40やや厳しい

複数の要因が逆風。ポイント選びで勝負。

0-20厳しい

条件が揃わない日。安全第一で見送りも選択肢。

重み付けの考え方

7 要因は等価ではありません。観測データと一般的な釣り知見をもとに、潮汐 25%を最上位の主要因子、ソルナー・気圧・水温を 15%ずつで準主要因子、天候・時間帯・地形を 10%ずつの補正因子として扱っています。将来的には、ユーザーが投稿した実釣果データを学習し、係数を継続的にチューニングする方針です (現状の重みは静的デフォルト + Remote Config 遠隔上書きの構成)。

関連ガイド