1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

天気アプリの「今の気温」は、誰が測っているのか【kurashi-skill Day 18】

1
Posted at

朝、窓を開ける。アプリは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から取る。

結: 「今」は観測時刻つきで読む

  1. 観測と予報は別物。 「今」はアメダス、「この後」は予報、「雨雲の動き」はナウキャスト。混ぜると答えがずれる。
  2. 観測時刻と観測所名を必ず添える。 「23.1度」ではなく「02:20時点の東京の観測では23.1度」。それが実測の礼儀だ。
  3. 「測っていない」も答え。 キーがないのはエラーではなく、その観測所の仕様。全要素が欲しければtype Aの観測所を探す。

kurashi-skillは公開開発中。リポジトリはここ → https://github.com/tahodev/kurashi-skill

ちなみに僕の腕の感覚とアプリのズレは、たぶん隣の観測所のせいだ。1,286分の1の誰かが、僕の代わりに外に出て測ってくれている。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?