判定の仕組み

暑さ指数(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と判定・連続活動時間の対応表
補正後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

APIパラメータの一覧
パラメータ 必須 説明
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の仕様

レスポンスのトップレベルは以下のフィールドで構成されます。

レスポンスのトップレベルフィールド
フィールド説明
locationobject予報地点(latitudelongitudetimezone)。気象モデルの格子点に丸められた座標
generatedAtstringレスポンス生成時刻(ISO 8601)
modelstring使用した気象モデル(通常はjma_seamless(気象庁MSM/GSM)、デモ時はdemo
attributionobjectデータ出典表記(weatherDataweatherDataUrllicense)。表示時は出典の明記が必要
noticesstring[]通年の注意事項(活動時の安全に関する文言)
hoursarray1時間ごとの予報(下表)
daysarray日別サマリー(下表)

hours[]の各要素:

時間別予報のフィールド
フィールド説明
timestringローカル時刻(Asia/Tokyo、例: 2026-08-15T09:00
weatherobject気象値: temperature(℃)・humidity(%)・apparentTemperature(℃)・precipitation(mm)・weatherCode(WMOコード)・solarRadiation(W/m²)・windSpeed(m/s)
weatherLabelstring天気の日本語ラベル(晴れ・曇りなど)
outdoorobject屋外の着ぐるみ判定(下記の判定オブジェクト)
indoorobject屋内の判定。判定オブジェクトにcoolingnonerecommendedrequired)とcoolingLabelが加わる

判定オブジェクト(outdoorindoor共通):

判定オブジェクトのフィールド
フィールド説明
wbgtnumber素のWBGT推定値(℃)
suitWbgtnumber着ぐるみ着衣補正(+11℃)後のWBGT(℃)
levelstringレベルID。暑熱側: safecautionwarningseveredanger、低温側: optimalcoldCautioncoldWarningcoldDanger
labelstring日本語ラベル(ほぼ安全・注意など)
gradenumber深刻度(0=快適〜4=危険。色分け用)
activityMinutesnumber連続活動時間の上限目安(分、0は着用中止)
advicestring注意文

days[]の各要素:

日別サマリーのフィールド
フィールド説明
datestring日付(YYYY-MM-DD)
temperatureMintemperatureMaxnumber最低・最高気温(℃)
weatherCodeweatherLabelnumber・string日中の代表天気
outdoorWorstoutdoorBestobject日中(9〜18時)の最も厳しい/穏やかな屋外判定(levellabelgrade
recommendedHoursstring[]屋外活動に適した時間帯(HH:00形式。深刻度1以下かつ降水なし)
coolingRequiredboolean日中に冷房必須となる時間があるか
laundryobject洗濯乾燥判定: score(0〜100)・levelnoDryRainnoDryColdindoorDryfairgoodveryGoodexcellent)・labelfursuitDryingHours(時間)・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": "…" }
    }, ...
  ]
}

利用上の注意

エッジ配信とキャッシュ

本サービスはCloudflare Workersで動作しており、世界中に分散したCloudflareの データセンター網(エッジ)のうち、利用者に最も近い拠点でプログラムが実行されます。 特定のサーバー1台に集中しないため、高速で障害にも強い構成です。

予報データは2段階でキャッシュされます。

予報データの二段階キャッシュの図。ブラウザとCloudflareエッジの間はブラウザキャッシュ(10分、Cache-Control: max-age=600)、CloudflareエッジとOpen-Meteo APIの間はエッジキャッシュ(30分、cf.cacheTtl: 1800)。エッジはキャッシュにない時のみOpen-Meteoへ問い合わせる

(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時間ごとのため、実用上の鮮度への 影響はありません。キャッシュされるのは公開の気象データのみで、現在地の座標などが ほかの利用者と共有されることはありません。

免責事項

データ出典・ライセンス

← 予報トップへ戻る