01きっかけ
ヨット部は毎朝、その日の風を読んで練習メニューを決めます。練習海面では「朝は北風 → 昼前に凪 → 午後に南の海風」という1日が多く、海風が何時に入るかで練習の組み立てが変わります。ところが、部員が見ていた天気サービスでは、ここが分かりませんでした。判断は上級生の肌感覚頼みで、下級生には伝わりにくい状態でした。
項目一般的な天気サービス(Windy・天気アプリなど)Kannon Wind
範囲広域向け。格子が 5〜13km(部員が使っていた無料版は約 27km)と粗く、島や海岸線がならされる練習海面1か所に特化。川・島・谷の向きも数字で持つ
海風モデルの値をそのまま表示。海風はほとんど予測できない型・入る時刻・強さを、過去の似た日の実際から出す
風向8〜16方位5°単位と、予報のばらつき・当たる幅を一緒に表示
当たり具合表示されない毎日、実測と自動で答え合わせ。「10回に8回はこの中」の幅を出す
潮潮位表はあるが、練習海面の流れや川の影響は分からない満潮・干潮からの時間で動く潮流の図、太田川の流量も重ねる
表の左側は、このアプリの仕様書に書いた「既存サービスの弱点」と、部員が使っていた画面をもとにしています。
02できること
スマホで朝に見ることを前提にした画面です(画面はすべて公開中のアプリから撮影)。
海風の予測:その日の型・入る時刻・強さ
「朝は北 → 昼に南(海風)」「南風は入らない」などのその日の型と、南風が入る時刻(±1時間の目安)、強さの目安を日ごとに出します。気象庁の MSM と、米国の GFS の2つのモデルを使い、型が割れたときは「予報が割れている」と正直に出します。
2段階予報:当日の朝 6〜9時に実際に吹いた風(アメダス広島)を読み込み、似た日を探し直して予報を更新します。
まとめの文:「11時半ごろ南風が入り、14時ごろ南西で安定(最大 9kt ごろ)」のような文を、部の LINE に貼れる形でコピーできます。
時間ごとの風の表:5°単位の風向と、当たる幅
1時間ごとに、風向の矢印と、風速を色(弱い青 → 緑 → 黄 → 赤)で並べます。5つの気象モデルの値と、過去の答え合わせで直した補正後の値、その下に「10回に8回はこの範囲」の幅を出します。
風向は 5°単位で表示しますが、これは表示の細かさで、精度ではありません。そのため、モデル間のばらつきと当たる幅を必ず一緒に見せています。
似た日の検索
明日の予報に一番似た「過去の前日の予報」を約330日分から10日探し、その日に実際にどう吹いたかを並べます。モデルのくせ(例:MSM は海風を弱めに出す)は過去の予報にも同じようにあるので、比べることで打ち消されます。
部員がスマホで付けた風の記録がある日は、その日の「海の上の実際」も並びます(部の合言葉を入れた画面だけに表示)。
安全:雷・急なブロー・強風
部の決まりは「雷が鳴ったら即帰る」。練習時間の雷の可能性を日ごとに出し、気象庁の雷・雨雲のページへすぐ飛べるようにしています。
急なブローの警告:気象庁の雨雲レーダーの画像を画面が直接読み、マリーナから 45km 以内の強い雨雲と、1時間先までに近づくかを5分ごとに確かめます。強い雨を降らせる積乱雲からは、冷たい空気が吹き出して急な強風が来るためです。
潮と練習海面マップ
気象庁の潮位表から満潮・干潮と潮位差を出し、「満潮から何時間後か」で動く潮流の矢印を地図に重ねます。太田川の流量(洪水予報モデル GloFAS)も上乗せします。潮流は理論から作った初版で、部員の体感(河口前の下げ潮 約0.16kt)に合わせたもので、まだ実測ではありません。
地図には、部員が経験から書き込んだブローの場所や危険な海面、大会のレース海面も重ねられます。
地図:国土地理院タイル
03仕組み
有料のサーバーや API は使わず、無料枠だけで毎日自動で回しています。
データ
Open-Meteo5つの気象モデルの予報・過去の予報
気象庁アメダス・潮位表・雨雲レーダー
部員の記録スマホから(Cloudflare D1)
→
取得・答え合わせ
GitHub Actions毎朝と3時間ごとに予報を取得・保存。毎日アメダスと答え合わせ
計算(TypeScript)補正・似た日・海風の式。計算式はテストで値を固定
→
画面
Cloudflare PagesReact で作った画面。保存のたびに自動で更新
部員のスマホ予報・練習海面マップ・記録の3画面
雨雲レーダーと当日朝のアメダスは、見ている人の画面が気象庁の公開データを直接読みます。予報はすべて保存し、あとで答え合わせに使います(過去の予報も捨てない)。
04どれくらい当たるか
「感覚で判断しない」をルールにして、前日の予報と実測を毎日自動で比べています。比べる相手は、気象庁のモデル(MSM)をそのまま読んだ場合です。どれも、検証する月はその月を抜いて作った式で確かめています(答えを知っている日で成績を測らない)。
その日の型が当たる割合
71%84%
MSM そのまま → 似た日の検索+当日朝9時までの観測。332日(2024-10〜2026-11)。前日の予報だけなら 77%
南風が入る時刻のずれ(平均)
55分47分
今の画面のカード(MSM・GFS の平均)→ 当日朝9時までの観測込みの似た日。同じ116日で比較
海風の強さのずれ(平均)
4.8kt1.7kt
MSM の値そのまま → 似た日の検索。南風が入った186日。MSM は海風を弱めに出す(別の202日の集計で平均 4.4kt 弱い)
1時間ごとの風速のずれ(練習時間)
2.9kt2.3kt
MSM そのまま → 補正後。3,015時間分(2024-10〜2026-11 のうち14か月)
ほかに確かめたこと
- 「10回に8回はこの中」の幅は、使っていない月で試して風速 79〜80%・風向 80〜81% が実際に入りました(ねらいどおり)。
- 雷:2025年6〜9月の122日で、「雷 高」と出した32日のうち24日(75%)に実際に雷がありました。
- 前線・台風の日:アメダスの335日のうち前線・低気圧が22日、台風が1日。予報(MSM・GFS のどちらか)で、前線・台風の日22日のうち19日を見分けられました。
- 季節の違い:秋(10〜11月)は南風が入らない日が 59% で、一番入りにくい季節でした。部員の経験と合います。
正直な注意点:答え合わせの相手は、マリーナから 6.3km 内陸にあるアメダス広島です。海の上の精度はまだ測れていません。部員の記録がたまれば、海の上でも答え合わせをします。
05つまずいたことと直し方
試してやめたことも、理由と一緒に記録に残しています。
- 教科書どおりの海風の式が当たらなかった「陸と海の温度差」で海風の入りを決める式は、当たりが 59% でした。冬は陸が一日中海より冷たいのに南風が入る日があったためです。
→ 部員の経験「晴れて温まってから2〜3時間後に入る」に合わせ、「朝からの温まり」で決める形に変えて 78% に。
- 「曇りの日は入らない」を足したら悪くなった雲が多い日を「入らない」とすると、当たりが 78% → 62% に下がりました。曇りでも半分以上の日は南風が入っていました。
→ 雲は「入るか」ではなく「強さ」に使う(快晴 10.1kt、曇り 7.4kt)。部員の経験「曇りなら弱く入る」とも一致。
- 天気別の補正は効果がなかった晴れ・曇り・雨で補正を分けても、ずれはほとんど減りませんでした(MSM の雨の時間で 2.9kt → 2.8kt)。雨の時間のずれは、決まった向きではなく「ばらつき」だったためです。
→ 補正には入れず、代わりに雨の時間は「当たる幅」を広く見せることにした。
- 補正後の風速が跳んだ最初の補正は「3kt 未満は別の倍率」にしていたため、予報 2.9kt が 6.4kt に、3.1kt が 3.1kt になる跳びが出ました。
→ 風速の直線と、風向のとなりどうしの按分に作り直し、なめらかに。
- AI の推論の誤りを経験で直した海風の中で風向が左右に振れる原因を、AI は最初「風上の島の陰の渦」と推論しました。島の無い海面でも同じように振れるという部員の経験から、これを否定しました。
→ 「空気の流れそのものにできる波」という説に直し、計算すると周期 9〜14分で、部の経験(10〜15分)と合った。
06作り方
AI に日本語で指示して作った
コードはすべて Claude Code(AI)が書きました。作者はプログラミングの経験がなく、日本語で目的と判断を伝えて進めました。作者が決めたのは、何を作るか・何を正解とするか・画面に出すかどうかです。
部の経験則(「朝北→昼南」「曇りなら弱く入る」など十数個)を言葉にして AI に渡し、それをデータで確かめる、という順番で進めました。
仕様書を先に作る
最初に仕様書(CLAUDE.md)を作り、目的・範囲・ルールを書きました。決めたことと理由は、そのたびに記録に追記させています。話が長くなっても方針がぶれず、あとから「なぜこうしたか」をたどれます。
議論は、AI に「流体力学・熱力学の専門家、気象予報士、セーラー、広島の地理に詳しい地学者」の4人の役を置かせ、意見を出し合わせてから決めました。
ルール
- 無料で作る(GitHub Actions・Cloudflare の無料枠)
- 感覚で判断しない:改良は必ず答え合わせの数字で決める。効かなければ入れない
- 過去の予報も捨てない:あとで答え合わせに使う
- 部員の個人情報は入れない:風の記録は名前を集めず、合言葉つき
07これから
- 自前の数値計算(WRF):手元の PC で、広島湾を 1km 四方の細かさで計算する試しを始めました。まず過去の海風の日を計算して気象庁のモデルと比べ、良ければ毎日の運用と、練習海面全体の風の地図へ進みます。
- 海の上の答え合わせ:部員の風の記録がたまったら、内陸のアメダスではなく海の上で精度を測ります。
- 部員への通知:前日の夜と当日の朝にまとめを届ける(手段はこれから決める)。
- 振れ幅の予報:日ごとの振れ幅を予報するには1分間隔の観測が必要で、今のデータでは出せていません。
- 潮流の実測:今の潮流の図は理論の初版。艇やブイの GPS で流され方を測って直します。