判定の仕組み
暑さ指数(WBGT)と着ぐるみ補正
環境省の熱中症予防情報サイトと同じ推定式(小野ら2014)で暑さ指数(WBGT)を計算しています。
WBGT = 0.735×Ta + 0.0374×RH + 0.00292×Ta×RH
+ 7.619×SR − 4.557×SR² − 0.0572×WS − 4.064
Ta: 気温(℃) RH: 相対湿度(%)
SR: 全天日射量(kW/m²) WS: 風速(m/s)
着ぐるみの熱負荷は、厚生労働省「職場における熱中症予防基本対策要綱」のWBGT着衣補正値 (フード付き蒸気不透過つなぎ服 = +11℃)で補正し、 環境省の5段階(21/25/28/31℃)で判定します。
| 補正後WBGT | 判定 | 連続活動時間の上限目安 |
|---|---|---|
| 21℃未満 | ◎ ほぼ安全 | 45分 |
| 21〜25℃ | ○ 注意 | 30分 |
| 25〜28℃ | △ 警戒 | 20分 |
| 28〜31℃ | ✕ 厳重警戒 | 10分 |
| 31℃以上 | 危険 | 着用中止 |
連続活動時間は、自治体の着ぐるみ運用マニュアル(1回30分以内、夏季は10〜20分)と ファースーツコミュニティの推奨(30〜45分で休憩)の範囲内で段階化した上限の目安です。 基本は「30分着たら30分休む」を推奨します。
低温側の判定
気温15℃未満では体感温度による低温判定(0/−10/−20℃境界)を併用し、 汗冷え・凍結路面・凍傷などの注意を表示します。着ぐるみは低温でも発熱するため、 暑熱判定と低温判定の深刻な方を採用します。
屋内判定と冷房要否
屋内は日射なし・微風(空調のない会場で室温が外気温と同程度になる場合)を想定した参考値です。 着ぐるみ補正後のWBGTが25℃以上で「冷房必須」、21℃以上で「冷房推奨」と判定します。
洗濯乾燥指数
Tetensの式による飽和水蒸気圧から飽差(VPD: 空気の乾きやすさ)を求め、 風速関数を掛けた乾燥スピードを干し時間帯(9〜15時)で積算して0〜100に指数化します。 降水時は「外干しNG」、平均気温5℃未満は「乾きにくい(低温)」となります。
ファースーツの全身洗いは扇風機併用で24〜48時間の乾燥目安を表示し、 乾きにくい日はカビ警告を出します。乾燥機は熱でファーが傷むため使用禁止です。
API
予報データはJSON APIとして公開しています。CORS対応のため、ほかのサイトやアプリからも利用できます。
GET /api/forecast
| パラメータ | 必須 | 説明 |
|---|---|---|
| lat | ○ | 緯度(-90〜90) |
| lon | ○ | 経度(-180〜180) |
| days | - | 予報日数(1〜4、デフォルト4) |
| demo | - | 1でデモデータを返す |
リクエスト例:
curl "https://fursuit-weather.223n.tech/api/forecast?lat=35.6785&lon=139.6823"
レスポンスJSONの仕様
レスポンスのトップレベルは以下のフィールドで構成されます。
| フィールド | 型 | 説明 |
|---|---|---|
location | object | 予報地点(latitude・longitude・timezone)。気象モデルの格子点に丸められた座標 |
generatedAt | string | レスポンス生成時刻(ISO 8601) |
model | string | 使用した気象モデル(通常はjma_seamless(気象庁MSM/GSM)、デモ時はdemo) |
attribution | object | データ出典表記(weatherData・weatherDataUrl・license)。表示時は出典の明記が必要 |
notices | string[] | 通年の注意事項(活動時の安全に関する文言) |
hours | array | 1時間ごとの予報(下表) |
days | array | 日別サマリー(下表) |
hours[]の各要素:
| フィールド | 型 | 説明 |
|---|---|---|
time | string | ローカル時刻(Asia/Tokyo、例: 2026-08-15T09:00) |
weather | object | 気象値: temperature(℃)・humidity(%)・apparentTemperature(℃)・precipitation(mm)・weatherCode(WMOコード)・solarRadiation(W/m²)・windSpeed(m/s) |
weatherLabel | string | 天気の日本語ラベル(晴れ・曇りなど) |
outdoor | object | 屋外の着ぐるみ判定(下記の判定オブジェクト) |
indoor | object | 屋内の判定。判定オブジェクトにcooling(none/recommended/required)とcoolingLabelが加わる |
判定オブジェクト(outdoor・indoor共通):
| フィールド | 型 | 説明 |
|---|---|---|
wbgt | number | 素のWBGT推定値(℃) |
suitWbgt | number | 着ぐるみ着衣補正(+11℃)後のWBGT(℃) |
level | string | レベルID。暑熱側: safe/caution/warning/severe/danger、低温側: optimal/coldCaution/coldWarning/coldDanger |
label | string | 日本語ラベル(ほぼ安全・注意など) |
grade | number | 深刻度(0=快適〜4=危険。色分け用) |
activityMinutes | number | 連続活動時間の上限目安(分、0は着用中止) |
advice | string | 注意文 |
days[]の各要素:
| フィールド | 型 | 説明 |
|---|---|---|
date | string | 日付(YYYY-MM-DD) |
temperatureMin・temperatureMax | number | 最低・最高気温(℃) |
weatherCode・weatherLabel | number・string | 日中の代表天気 |
outdoorWorst・outdoorBest | object | 日中(9〜18時)の最も厳しい/穏やかな屋外判定(level・label・grade) |
recommendedHours | string[] | 屋外活動に適した時間帯(HH:00形式。深刻度1以下かつ降水なし) |
coolingRequired | boolean | 日中に冷房必須となる時間があるか |
laundry | object | 洗濯乾燥判定: score(0〜100)・level(noDryRain/noDryCold/indoorDry/fair/good/veryGood/excellent)・label・fursuitDryingHours(時間)・moldWarning(boolean)・advice |
レスポンス例(抜粋):
{
"location": { "latitude": 35.7, "longitude": 139.6875, "timezone": "Asia/Tokyo" },
"generatedAt": "2026-08-15T09:00:00.000Z",
"model": "jma_seamless(気象庁MSM/GSM)",
"attribution": { "weatherData": "Weather data by Open-Meteo.com(気象庁MSM/GSMモデル)", ... },
"notices": ["着ぐるみ内は冬でも数分で発汗する高温多湿環境です。…", ...],
"hours": [
{
"time": "2026-08-15T09:00",
"weather": { "temperature": 28.1, "humidity": 54, "windSpeed": 2.5, ... },
"weatherLabel": "晴れ",
"outdoor": { "wbgt": 25.8, "suitWbgt": 36.8, "level": "danger",
"label": "危険", "grade": 4, "activityMinutes": 0, "advice": "…" },
"indoor": { "wbgt": 23.9, "suitWbgt": 34.9, "level": "danger", "grade": 4,
"cooling": "required", "coolingLabel": "冷房必須", ... }
}, ...
],
"days": [
{
"date": "2026-08-15", "temperatureMin": 18.3, "temperatureMax": 34.0,
"weatherLabel": "晴れ",
"outdoorWorst": { "level": "danger", "label": "危険", "grade": 4 },
"recommendedHours": [], "coolingRequired": true,
"laundry": { "score": 100, "level": "excellent", "label": "大変よく乾く",
"fursuitDryingHours": 24, "moldWarning": false, "advice": "…" }
}, ...
]
}
利用上の注意
- 予報日数の上限は4日です(気象庁MSMの予報範囲。それ以降は日射量データがなくWBGTを計算できないため)
- 気象データはエッジで30分キャッシュされます(詳細は次のセクション)
- 大量アクセスはデータ提供元(Open-Meteo)の無料枠を圧迫するためお控えください
- フィールドの追加は後方互換として予告なく行うことがあります。未知のフィールドは無視してください
エッジ配信とキャッシュ
本サービスはCloudflare Workersで動作しており、世界中に分散したCloudflareの データセンター網(エッジ)のうち、利用者に最も近い拠点でプログラムが実行されます。 特定のサーバー1台に集中しないため、高速で障害にも強い構成です。
予報データは2段階でキャッシュされます。
(1) エッジでの気象データキャッシュ(30分)
WorkerがOpen-Meteoから取得した気象データは、そのデータセンター内に30分保存されます。 同じ地点・同じ日数のリクエストが30分以内に来た場合、Open-Meteoへは問い合わせず 保存済みのコピーから即座に応答します。これにより、データ提供元の無料枠 (1日1万コール)を守りながら応答を高速化しています。キャッシュはURL単位・ データセンター単位で独立しており、地点(座標)が異なれば別のキャッシュになります。
(2) ブラウザキャッシュ(10分)
APIレスポンスにはCache-Control: public, max-age=600を付けているため、
同じブラウザからの再リクエストは10分間キャッシュが再利用されます。
「予報を更新」を押しても10分以内は同じ内容が表示されることがあります。
データの鮮度について
表示される予報は最大で約40分前(エッジ30分+ブラウザ10分)に取得されたものの 可能性があります。元データの気象庁MSMの更新は3時間ごとのため、実用上の鮮度への 影響はありません。キャッシュされるのは公開の気象データのみで、現在地の座標などが ほかの利用者と共有されることはありません。
免責事項
- 本予報は目安であり、安全を保証するものではありません。医学的な助言に代わるものでもありません。
- 体調・装備・活動内容により安全な活動時間は変わります。最終判断はご自身で行ってください。
- 着ぐるみ活動は必ず2人以上で行い、着用者以外の付き添い(ハンドラー・アテンド)を付けてください。吐き気・めまい・頭痛などの体調の変化を感じたら直ちに中止してください。
- 予報データは数値予報モデルによる推定値であり、実際の気象と異なる場合があります。
- 本サービスの利用により生じたいかなる損害についても、開発者は責任を負いません。
- 本サービスは予告なく変更・停止することがあります。
データ出典・ライセンス
- 気象データ: Weather data by Open-Meteo.com(CC BY 4.0、気象庁MSM/GSMモデル由来、非商用利用)
- WBGT推定式: 環境省 熱中症予防情報サイト(小野ら2014)
- 着衣補正値: 厚生労働省「職場における熱中症予防基本対策要綱」(ISO 7243:2017準拠)
- アイコン: Font Awesome Free(CC BY 4.0)
- ソースコード: GitHub: 223n/FursuitWeather(Apache License 2.0)