気象庁XMLを正しく扱いたい!

テーマの紹介

JX通信社エンジニアのr_uematsuです。
弊社は、日本テレビ放送網株式会社と共同で「日テレ気象・防災サイト」を開発しています。気象警報、地震・津波情報、噴火情報など、防災に関わる情報をまとめて閲覧できるサイトです。 bosai.news.ntv.co.jp

情報源には気象庁から配信されるXML(電文)を使用しています。
気象庁XMLは気象情報や地震情報など様々な情報を配信しており、日テレ防災サイト以外にも社内プロジェクトでも広く利用されています。
今回は気象庁XMLの紹介と正しく扱うためには、どんなことに気を付けるべきかを地震津波関連のXMLを例に掘り下げてみたいと思います。

これから気象庁XMLを使ってみたい方に雰囲気が伝わると幸いです! また掘り下げる内容は、自分自身が気象庁の地震津波関連のXMLに初めて触れた時に、把握が難しかった仕様や重要なポイントなど取り上げてみました。地震津波関連のXMLを既に使ってる方の助けになればと思います。

気象庁防災情報XMLについて

気象庁防災情報XMLとは、気象庁が発表する気象警報や地震津波情報、火山情報などをITサービスに取り入れたい時に便利なデータです。公式情報がXML形式で配信されていてPULL型で取得することができます。
例えば気象警報について以下のようなXMLが配信されます。

<Report xmlns="http://xml.kishou.go.jp/jmaxml1/" xmlns:jmx="http://xml.kishou.go.jp/jmaxml1/" xmlns:jmx_add="http://xml.kishou.go.jp/jmaxml1/addition1/">
<Control>
<Title>気象特別警報・警報・注意報</Title>
<DateTime>2024-07-22T16:11:07Z</DateTime>
<Status>通常</Status>
<EditorialOffice>気象庁本庁</EditorialOffice>
<PublishingOffice>気象庁</PublishingOffice>
</Control>
<Head xmlns="http://xml.kishou.go.jp/jmaxml1/informationBasis1/">
<Title>東京都気象警報・注意報</Title>
<ReportDateTime>2024-07-23T01:11:00+09:00</ReportDateTime>
<TargetDateTime>2024-07-23T01:11:00+09:00</TargetDateTime>
<EventID/>
<InfoType>発表</InfoType>
<Serial/>
<InfoKind>気象警報・注意報</InfoKind>
<InfoKindVersion>1.1_2</InfoKindVersion>
<Headline>
<Text>小笠原諸島では、23日夕方まで急な強い雨や落雷に注意してください。</Text>
<Information type="気象警報・注意報(府県予報区等)">
<Item>
<Kind>
<Name>雷注意報</Name>
<Code>14</Code>
</Kind>
<Areas codeType="気象情報/府県予報区・細分区域等">
<Area>
<Name>東京都</Name>
<Code>130000</Code>
</Area>
</Areas>
</Item>
</Information>
~~~~省略~~~~

<Item>
<Kind>
<Name>雷注意報</Name>
<Code>14</Code>
</Kind>
<Areas codeType="気象・地震・火山情報/市町村等">
<Area>
<Name>千代田区</Name>
<Code>1310100</Code>
</Area>
</Areas>
</Item>
<Item>

~~~~省略~~~~
</Body>
</Report>

配信される情報は数十種類にも及び、それぞれにXMLフォーマットと仕様が存在します。

いざ気象庁XMLを導入しよう!と開発を進めると、このフォーマットと仕様の把握がとても大変でした。。。

地震津波関連を例にXMLの仕様を覗いてみる

XMLの仕様は例えばどんなものかというのを弊社でよく扱う地震津波関連のXMLを例に覗いてみたいと思います。

気象庁が配信する地震津波関連のXMLだけでも種類はこんなにあります。

  • 津波警報・注意報・予報
  • 津波情報
  • 沖合の津波観測に関する情報
  • 緊急地震速報
  • 震度速報
  • 地震情報(震源に関する情報)
  • 地震情報(震源・震度に関する情報)
  • 地震情報(地震の活動状況等に関する情報)
  • 地震情報(地震回数に関する情報)
  • 地震情報(顕著な地震の震源要素更新のお知らせ)
  • 長周期地震動に関する観測情報
  • 南海トラフ地震に関連する情報
  • 地震・津波に関するお知らせ

それぞれに個別の仕様とXMLのフォーマットが存在します。さらに発表条件と順番があります。
参考:地震情報について
参考:津波警報・注意報、津波情報、津波予報について

発令とEventIDについて

気象庁のWebページ地震情報についてによると1回の地震が発生した場合に複数のXMLが配信される可能性があることがわかります。 その地震が震度3以上なのか、津波に関する情報はあるのかなどの条件によりそれぞれのXMLの配信の有無が決まります。

よく使用する種別を簡単に紹介します。

  • 津波警報・注意報・予報
    津波に関する警報の発令の有無に関する情報が載ってます。

  • 津波情報
    津波の到達予想時刻や波の高さなどの情報が載ってます。

  • 震度速報
    震度3以上の揺れを観測した場合に全国各地の地震の揺れを速報として配信されます。速報のため震度観測区域は「東京都23区」のように荒めになります。

  • 震源に関する情報
    津波警報または注意報が出ていない場合に配信されます。地震の発生場所(震源)やその規模(マグニチュード)の情報が載ってます。

  • 震源・震度に関する情報
    震源に関する情報の内容に加えて、震度速報に比べてさらに細かい区域の「東京千代田区」のような単位での観測震度の情報が載ってます。
    参考:緊急地震速報や震度情報で用いる区域の名称

EventIDに関して

地震津波関連XMLでは、ある特定の地震を識別するために地震識別番号(14 桁の数字例:20240101210208)がXMLの<EventID>で与えられます。

<Report xmlns="http://xml.kishou.go.jp/jmaxml1/" xmlns:jmx="http://xml.kishou.go.jp/jmaxml1/">
<Control>
<Title>震度速報</Title>
<DateTime>2024-01-01T07:07:40Z</DateTime>
<Status>通常</Status>
<EditorialOffice>気象庁本庁</EditorialOffice>
<PublishingOffice>気象庁</PublishingOffice>
</Control>
<Head xmlns="http://xml.kishou.go.jp/jmaxml1/informationBasis1/">
<Title>震度速報</Title>
<ReportDateTime>2024-01-01T16:07:00+09:00</ReportDateTime>
<TargetDateTime>2024-01-01T16:06:00+09:00</TargetDateTime>
<EventID>20240101160608</EventID>  <---こちら
<InfoType>発表</InfoType>
<Serial/>
<InfoKind>震度速報</InfoKind>
<InfoKindVersion>1.0_1</InfoKindVersion>
<Headline>
<Text> 1日16時06分ころ、地震による強い揺れを感じました。震度3以上が観測された地域をお知らせします。</Text>
<Information type="震度速報">
~~~~省略~~~~
</Report>

地震には前震、本震、余震とありますが、一般的に震源地や発生時刻が異なるため別々の識別番号(EventID)が与えられます。異なる種別のXMLでEventIDが同じ場合は同一の地震に関するXMLと解読することができます。

XML種別 EventID 説明
震源・震度に関する情報 20240101xxxxx1 前震
震度速報 20240101xxxxx2 本震
震源・震度に関する情報 20240101xxxxx2 本震
震源・震度に関する情報 20240101xxxxx3 余震
津波警報・注意報・予報 20240101xxxxx2 本震によって発令
津波情報 20240101xxxxx2,
20240101xxxxx3
本震,余震によって起きた津波の情報

具体的に以上のようにXMLが配信された場合、以下のように解読できます。

  • 前震、本震、余震があった。
  • 本震では震度速報が配信され震度3以上である。
  • 本震の揺れにより津波警報・注意報・予報が発令された。
  • 本震、余震によって引き起こされた津波がありそう。

取消報について

地震が発生すると気象庁からの公式情報が次々と流れてきますが、ごく稀に誤った情報が配信される場合があります。そのような場合、取消電文というものが配信されます。実際に、2024/01/01に石川県能登で震度7を観測した内容のXMLが誤って配信されました。TVニュースなどでもそのまま発表されて後に訂正されていた記憶があります。まさにあの時、取消報が配信されていました。

実際に配信された取消電文

<Report xmlns="http://xml.kishou.go.jp/jmaxml1/" xmlns:jmx="http://xml.kishou.go.jp/jmaxml1/">
<Control>
<Title>震度速報</Title>
<DateTime>2024-01-01T14:13:46Z</DateTime>
<Status>通常</Status>
<EditorialOffice>気象庁本庁</EditorialOffice>
<PublishingOffice>気象庁</PublishingOffice>
</Control>
<Head xmlns="http://xml.kishou.go.jp/jmaxml1/informationBasis1/">
<Title>震度速報</Title>
<ReportDateTime>2024-01-01T23:13:00+09:00</ReportDateTime>
<TargetDateTime>2024-01-01T23:03:00+09:00</TargetDateTime>
<EventID>20240101230402</EventID>
<InfoType>取消</InfoType>
<Serial/>
<InfoKind>震度速報</InfoKind>
<InfoKindVersion>1.0_1</InfoKindVersion>
<Headline>
<Text>震度速報を取り消します。</Text>
</Headline>
</Head>
<Body xmlns="http://xml.kishou.go.jp/jmaxml1/body/seismology1/" xmlns:jmx_eb="http://xml.kishou.go.jp/jmaxml1/elementBasis1/">
<Text>先ほどの、震度速報を取り消します。</Text>
</Body>
</Report>

この電文は種別「震度速報」のEventIDが「20240101230402」の電文を撤回することを意味します。 DBなどに地震情報を保存していたりする場合何かしらのロールバック処理が必要になると思います。(場合によっては結構厄介ですね。。。)
地震津波関連のXMLを扱うシステムは取消電文を受け取る可能性があることも考慮しておきたいですね。

終わりに

最後までお読みいただき、ありがとうございます。気象庁XMLにはどんな仕様があるかを地震津波関連のXMLを掘り下げてみました。また今回は紹介していない気象、火山、台風などでも地震津波のように固有事情、仕様が存在します。
気象庁から公式情報が配信されてますが、正しく扱うには仕様の深い理解が必要です。防災関連のシステムで利用した場合、重要な場面で想定外の挙動を起こさないよう安定に動作するように心掛けたいですね。 
今回掘り下げた地震津波関連では発令順やEventID、取消報以外にも気を付けるべき点がいくつかあり、さらに気象や火山のXMLを扱う場合はそれぞれの仕様の把握が必要です。弊社は、気象庁XMLをより扱いやすいフォーマットに加工、整理して返却するAPIを開発と提供をしています。災害情報を活用する機会がありましたらぜひお問い合わせください! jxpress.net