朝、窓を開ける。アプリは23度と言うが、腕の感覚は違う気がする。そもそも「今の気温」は、誰がどこで測った数字なのか。答えはアメダスだ。気象庁の地域気象観測システム。全国の観測所が10分ごとに実際に測った値で、予報ではない。観測だ。気象庁はユーザー登録なしで機械可読な気象・防災データを公開しているので、この「今」にもcurlで辿り着ける。
起: 入口は、1行のテキストファイル
アメダスの最新観測を読む旅は、地味な1行から始まる。latest_time.txt。2026-09-25未明の実測では「2026-09-25T02:20:00+09:00」とだけ書いてあった。JSONですらない、ISO形式の時刻が1行のテキストだ。でもここが関所で、この時刻をコロンとプラス記号を除いた数字の並び(20260925022000)に変換すると、全観測所の最新値が入ったmapファイルの名前になる。
そのmapファイルを取ると、250,617バイト、1,286観測所分のJSONが返ってきた。東京(観測所コード44132)の02:20時点の値は、気温23.1度、湿度77%、風速1.2m/s、気圧1013.0hPa、過去24時間の降水量0.0mm。アプリの言う「今」の正体は、だいたいこのどれかの観測所の数字だ。
承: 観測所の名簿もJSON
観測所の名前と場所は、amedastable.jsonに入っている。漢字名、カナ、英語名に、度分形式の緯度経度と標高まで。ユーザーの場所との距離を計算すれば、「いちばん近い観測所」を選べる。ここまでcurlとpythonだけ。スキルにはこの流れを書き込んだ。予報(jma-weather)でも雨雲(amagumo)でもなく、「観測」を担当するスキルとして。
転: 測っていない観測所がある
ここで罠が2つ。ひとつ目はファイル名だ。名簿はamedastable.jsonであって、amedastation.jsonではない。後者は404だ(9月25日に再確認)。名前は推測で書くな、といういつもの教訓。
ふたつ目は観測所の格差だ。1,286観測所の内訳を数えると、全要素を測るtype Aは56か所だけ。type Bが95、残りの1,131か所はtype Cで、測る要素が限られる。気圧を測っていない観測所では、JSONにキー自体が出てこない。つまり「最寄りの観測所の気圧は?」への正直な答えは、「その観測所では気圧を測っていない」になりうる。スキルにはそう書いた。測っていないものを、推測で答えてはいけない。それと、古い時刻のmapファイルは消えていることがある。時刻は推測せず、必ずlatest_time.txtから取る。
結: 「今」は観測時刻つきで読む
- 観測と予報は別物。 「今」はアメダス、「この後」は予報、「雨雲の動き」はナウキャスト。混ぜると答えがずれる。
- 観測時刻と観測所名を必ず添える。 「23.1度」ではなく「02:20時点の東京の観測では23.1度」。それが実測の礼儀だ。
- 「測っていない」も答え。 キーがないのはエラーではなく、その観測所の仕様。全要素が欲しければtype Aの観測所を探す。
kurashi-skillは公開開発中。リポジトリはここ → https://github.com/tahodev/kurashi-skill
ちなみに僕の腕の感覚とアプリのズレは、たぶん隣の観測所のせいだ。1,286分の1の誰かが、僕の代わりに外に出て測ってくれている。