判定の仕組み

暑さ指数(WBGT)ときぐるみ補正

環境省の熱中症予防情報サイトと同じ推定式(小野ら2014)で暑さ指数(WBGT)を計算しています。

式の読み下し: WBGTは、0.735 かける気温、たす 0.0374 かける相対湿度、 たす 0.00292 かける気温かける相対湿度、たす 7.619 かける日射量、 ひく 4.557 かける日射量の2乗、ひく 0.0572 かける風速、ひく 4.064 で求めます。 気温の単位は摂氏度、相対湿度はパーセント、日射量はキロワット毎平方メートル、風速はメートル毎秒です。

きぐるみの熱負荷は、厚生労働省「職場における熱中症予防基本対策要綱」の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分休む」を推奨します。

実測WBGTから判定

会場でWBGT計(暑さ指数計)で測った値からの判定は、トップページの 「実測WBGT」タブで確認できます。 実測値に着衣補正を加えて、上の対応表と同じ基準で判定します。

低温側の判定

気温15℃未満では体感温度による低温判定(0・−10・−20℃境界)を併用し、 汗冷え・凍結路面・凍傷などの注意を表示します。きぐるみは低温でも発熱するため、 暑熱判定と低温判定の深刻な方を採用します。

屋内判定と冷房要否

屋内は日射なし・微風(空調のない会場で室温が外気温と同程度になる場合)を想定した参考値です。 きぐるみ補正後のWBGTが25℃以上で 冷房必須、 21℃以上で 冷房推奨 と判定します。

洗濯乾燥指数

Tetensの式による飽和水蒸気圧から飽差(VPD: 空気の乾きやすさ)を求め、 風速関数を掛けた乾燥スピードを干し時間帯(9から15時)で積算して0から100に指数化します。 降水時は 外干しNG(雨)、 平均気温5℃未満は 乾きにくい(低温) となります。

かんたんに言うと: Tetensの式は「気温から、空気が抱えられる水蒸気の上限を求める式」です。 空気は温かいほど多くの水蒸気を抱えられ、10℃上がると上限はほぼ2倍になります。 上限までの残り(飽差)が大きいほど、洗濯物の水分が空気へ移りやすくなります。 つまり「気温が高く、湿度が低く、風がある日ほどよく乾く」という経験則を、 そのまま計算式にしたものです。

きぐるみの全身洗いは扇風機併用で24から48時間の乾燥目安を表示し、 乾きにくい日はカビ警告を出します。乾燥機は熱でファーが傷むため使用禁止です。

会場表示モード

イベント会場のモニターへ掲示するための自動表示ページを用意しています。 トップページで会場の地点を表示し、「会場表示モードで開く」から利用してください。 いまの判定・この後の予報・3日間の天気・全国の天気を自動で切り替えながら、 予報を定期的に更新し続けます(掲示中の操作は不要です)。

設営前のチェック(端末の時刻合わせ・初回は必ずオンラインで開く・ ?demo=1でのリハーサルなど)と設置手順の詳細は、GitHubリポジトリの 会場表示モードの使い方(docs/display.md) を参照してください。

使い方

しばらく着ていない人へ(暑熱順化について)

体が暑さに慣れる「暑熱順化」は、7日以上かけて暑さにさらされる時間を 少しずつ延ばすことで得られ、おおむね4日以上暑さから離れると失われ始めます (厚生労働省「職場における熱中症予防基本対策要綱」より)。 シーズン最初のイベントや数週間ぶりの活動では、真夏と同じ感覚で着ると 熱中症のリスクが高くなります。

再開の初日は計画の目安のおよそ半分から始め、数回かけて段階的に延ばすのが 安全です(米国の労働安全衛生機関(NIOSH/OSHA)の再順化スケジュール (初日は通常の50%から漸増)に基づく目安です)。

トップページの「活動プランナー」タブでは、 暑さのリスクがある計画にこの慣らしの注意を表示します。

イベント予報(主催者の方へ)

トップページの地点選択の「イベント」タブから、 掲載されているイベントの開催地の予報を表示できます。 イベントを選ぶと次の機能が使えます。

開催日時・会場などの詳細は主催者の告知をご確認ください。 イベントの掲載を希望する主催者の方は、 GitHubリポジトリのissue(イベント掲載依頼フォーム) からご連絡ください。

ホーム画面に追加して毎日見る

このサイトはWebアプリとしてホーム画面に追加できます。追加すると、 ブラウザのタブを探さずに1タップで開けます。追加の手順は環境ごとに異なるため、 トップページの「この予報について」にある 「ホーム画面に追加して毎日見る(かんたん案内)」で、 お使いの環境に合った案内を表示します。

この端末に保存されるもの

このサイトは、利用者の識別や行動の追跡をしません。 次のものはお使いの端末の中だけに保存され、サーバーへは送られません (ブラウザの設定でサイトデータを消すと、あわせて消えます)。

現在地(GPS)の座標は保存しません。 「現在地から」を押したときに取得した座標は、その場で小数第2位(約1km四方)へ丸めて 予報の取得だけに使い、端末にもURLにも残しません。 共有リンクに含まれる座標も同じ精度に丸めたものです。

コンディションチェックの回答は、答えた直後の助言を出すためだけに使い、 端末にもサーバーにも保存しません。 アクセス解析にはCookieを使わないCloudflare Web Analyticsを利用しています (個人を識別する情報は収集しません)。

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の仕様

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

表内の要素名の区切りは、並列のフィールドを「・」、いずれか1つを取る値を「/」で表記しています。

レスポンスのトップレベルフィールド
フィールド型説明
locationobject予報地点(latitude・longitude・timezone)。
気象モデルの格子点に丸められた座標
generatedAtstringレスポンス生成時刻
(ISO 8601・UTC、
例: 2026-08-15T09:00:00.000Z)
modelstring使用した気象モデル(通常はjma_seamless(気象庁MSM/GSM)、デモ時はdemo)
attributionobjectデータ出典表記(weatherData・weatherDataUrl・license)。
表示時は出典の明記が必要
noticesstring[]通年の注意事項(活動時の安全に関する文言)
suddenHeatobject・null急な暑さ(暑熱順化前)の注意。初日の最高気温が直近7日の平均最高気温を5℃以上上回り、かつ25℃以上のときにdate(対象日)・recentAverageMax(直近平均、℃)・targetMax(対象日の最高気温、℃)を返す。該当しない・過去データ不足のときはnull
hoursarray1時間ごとの予報(下表)
daysarray日別サマリー(下表)

hours[]の各要素:

時間別予報のフィールド
フィールド型説明
timestringローカル時刻
(Asia/Tokyo、
例: 2026-08-15T09:00)
weatherobject気象値:
  • temperature(℃)
  • humidity(%)
  • apparentTemperature(℃)
  • precipitation(mm)
  • precipitationProbability(%。気象庁モデルにないためOpen-Meteo標準予報APIから補完。取得できない場合・欠測時はnull)
  • weatherCode(WMOコード。欠測時は-1)
  • solarRadiation(W/m²)
  • windSpeed(m/s)
weatherLabelstring天気の日本語ラベル(晴れ・曇りなど)
outdoorobject屋外のきぐるみ判定(下記の判定オブジェクト)
indoorobject屋内の判定。
判定オブジェクトにcooling(none/recommended/required)とcoolingLabelが加わる

判定オブジェクト(outdoor・indoor共通):

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

days[]の各要素:

日別サマリーのフィールド
フィールド型説明
datestring日付(YYYY-MM-DD)
temperatureMin・temperatureMaxnumber最低・最高気温(℃)
weatherCode・weatherLabelnumber・string日中の代表天気
sunrise・sunsetstring・null日の出・日の入り時刻(HH:mm)。上流が提供しない場合・欠測時はnull
outdoorWorst・outdoorBestobject日中(9から18時)の最も厳しい・最も穏やかな屋外判定(level・label・grade)
recommendedHoursstring[]屋外活動に適した時間帯(HH:00形式)。
深刻度1以下かつ降水なしの時間帯が対象
coolingRequiredboolean日中に冷房必須となる時間があるか
maxWbgtnumberその日の素のWBGT(着衣補正前)の最大値(℃)。33以上は環境省の熱中症警戒アラートの発表基準に相当
maxWindSpeednumberその日の最大風速(m/s、1時間平均の最大)。10以上は気象庁の「やや強い風」に相当
laundryobject洗濯乾燥判定:
  • score(0から100)
  • level(noDryRain/noDryCold/indoorDry/fair/good/veryGood/excellent)
  • label
  • fursuitDryingHours(時間)
  • moldWarning(boolean)
  • advice
staticElectricityobject静電気の起きやすさ(level: low/medium/high、label: 低/中/高、advice: 「高」の日の対策の一言・それ以外はnull)。日中の各時間の湿度・気温を個別に判定し最も厳しいレベルを採用(湿度25%未満で「高」、湿度40%未満かつ気温20℃未満で「中」)。帯電対策の一般的な目安に基づく生活指数です
airQualityobject・null空気のよごれ(黄砂・PM2.5。level: low/medium/high、label: 低/中/高、pm25Mean: PM2.5の日平均μg/m³、dustMax: 黄砂の最大濃度μg/m³、advice: 「高」の日の注意・それ以外はnull)。PM2.5の日平均35μg/m³以上または黄砂100μg/m³以上で「中」、PM2.5の日平均70μg/m³以上または黄砂500μg/m³以上で「高」。Open-Meteo Air Quality API(CAMS全球モデル)の推定値に基づく目安で、公式の観測・注意報ではありません。取得できない日はnull

レスポンス例(一部のフィールドと配列要素は省略しています。そのまま整形ツールへ貼り付けられる有効なJSONです):

{
  "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
      },
      "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
      }
    }
  ]
}

GET /api/badge.svg(判定バッジ)

当日(日本時間)の最も厳しい屋外判定を、イベントの告知ページなどに貼れる SVGバッジで返します。地点は主要12都市名(city。トップページの 地点セレクトと同じ名前)か、登録済みイベント名(event。開催地の 判定になります)のどちらか一方で指定します。バッジはブラウザで10分 キャッシュされ、判定の更新もこの周期です。

貼り付け例(都市名で指定):

<img src="https://fursuit-weather.223n.tech/api/badge.svg?city=東京"
     alt="東京の本日の着ぐるみ判定" width="216" height="24">

貼り付け例(イベント名で指定。開催地の判定になります):

<img src="https://fursuit-weather.223n.tech/api/badge.svg?event=けもケット17"
     alt="けもケット17開催地の本日の着ぐるみ判定" width="216" height="24">

イベント名で指定したバッジは、イベントが定義(events.json)から削除されると 表示されなくなります(画像が壊れて見えます)。イベント終了後は告知ページの バッジも合わせて外してください。表示の確認には?demo=1 (上流を呼ばない固定の見本)も使えます。

利用上の注意

  • 予報日数の上限は4日です(気象庁MSMの予報範囲。それ以降は日射量データがなくWBGTを計算できないため)
  • 気象データはエッジで30分キャッシュされます(詳細は次のセクション)
  • 大量アクセスはデータ提供元(Open-Meteo)の無料枠を圧迫するためお控えください
  • フィールドの追加は後方互換として予告なく行うことがあります。未知のフィールドは無視してください

このページで紹介しているのは主要な2エンドポイントです。全7エンドポイント (/api/forecast・/api/geocode・/api/national・ /api/events.ics・/api/badge.svg・/api/alert・ /api/levels)の 完全な仕様は、GitHubリポジトリの API仕様(docs/api.md) を参照してください(機械可読な OpenAPI定義もあります)。

エッジ配信とキャッシュ

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

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

予報データの二段階キャッシュの図。ブラウザとCloudflareエッジの間はブラウザキャッシュ(10分、Cache-Control: max-age=600)、CloudflareエッジとOpen-Meteo APIの間はエッジキャッシュ(30分、cf.cacheTtlByStatus: 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時間ごとのため、実用上の鮮度への 影響はありません。キャッシュされるのは公開の気象データのみで、現在地の座標などが ほかの利用者と共有されることはありません。

免責事項

データ出典・ライセンス

予報トップへ戻る