Workato：「気象庁防災情報XMLフォーマット」を利用した防災情報の活用を、現在のWorkatoで再実装してみた

# はじめに

4年前に、当社のBlogで以下の記事を書いていました。

https://www.ricksoft.jp/blog/articles/001240.html

上記レシピはステップ（タスク）が多く、かつスケジュールをトリガーに走るため、チェックだけでもタスクを消費する欠点がありました。

Workatoも4年前に比べてだいぶ機能改良が進んでおり、現在ではよりシンプルな実装が可能になっています。そこで、今回は現在のWorkatoで改めてレシピを再実装してみました。

# レシピ

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/64876/600a2a9e-05ff-b068-b28c-abfc31d79571.png)

## コネクション

HTTPコネクタとWorkbot for Slackの２つのコネクションを予め用意（設定）しておきます。

HTTPコネクタは、認証無し、かつBaseURLを指定しない、汎用的なコネクションを用意します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/64876/ac7ebc33-675a-8858-fe0a-0c947c55b0d4.png)

Workbot for Slackコネクタのコネクションは、お使いのSlackワークスペースで利用可能な状態で用意しておきます。


## トリガー

HTTPコネクタをトリガーとします。
（アクションは「New event via polling」のみ選択可能）

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/64876/c0de030a-258e-f2d8-ec23-7e9fbbe756cb.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/64876/9d1bd08f-bd5b-9d73-d249-d471ea669c27.png)

Connectionは、先に準備したものを指定します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/64876/1a0a55fe-f8f0-f481-d3db-010f443d3075.png)

設定は以下を参考に進めます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/64876/5a417495-2134-8e78-c519-ee396bec45f8.png)

### Trigger poll intercal

`5 minutes` を選択

### Event name

任意の名称を入力

### URL

[気象庁防災情報XMLフォーマット形式電文の公開（PULL型）](https://xml.kishou.go.jp/xmlpull.html) で公開されている『地震火山』の「高頻度フィード」(https://www.data.jma.go.jp/developer/xml/feed/eqvol.xml) を指定します。

### Request headers

`application/xml` を入力

### Response content type

`Parse response as XML` を選択

### Response body example

上記高頻度フィードのXMLを貼付する

### Array path

`feed entry`を選択

### ID column

`id` を選択


### Trigger condition

以上を設定後、Set trigger condition を有効化し、次の通り設定します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/64876/9de3bc6e-ead1-26ea-2b73-79d2bc9331b2.png)

#### Trigger data

Step1の `Title` をセット

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/64876/c7c7e259-037c-2afa-ccdf-2935b80f9f4e.png)

#### Condition

`equals` を選択

#### Value

`震源・震度に関する情報` と入力

## アクション

### Step2

HTTPコネクタを選択します。
（アクションは「Send request」のみ選択可能）

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/64876/9900221a-78ee-c4a8-1fca-1ecbd5fd050f.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/64876/b2c478bb-3490-a139-df0f-d468b6298f58.png)

Connectionは、先に準備したものを指定します。

設定は以下を参考に進めます。（以下に記載のない項目はデフォルトのままとします）

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/64876/dde2cdef-648b-348f-a2d8-fb14b13464c5.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/64876/32964c50-ce49-2fe9-9624-0a3bfea3914c.png)

#### Requuest name

任意の名称を入力

#### Request

##### Method

`GET` を選択

##### Request URL

Step1の `ID` をセット

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/64876/343154cb-1640-3d65-833c-61f7f36c9932.png)

#### Response

##### Response content type

`XML` を選択

##### Encoding

`UTF-8` を選択

##### Response schema

以下のxmlをもとにスキーマを生成する
（「詳細」をクリックすると展開されます）

<details>

```xml
<?xml version="1.0" encoding="UTF-8"?>
<Report xmlns="http://xml.kishou.go.jp/jmaxml1/" xmlns:jmx="http://xml.kishou.go.jp/jmaxml1/">
<Control>
<Title>震源・震度に関する情報</Title>
<DateTime>2024-05-29T09:15:39Z</DateTime>
<Status>通常</Status>
<EditorialOffice>気象庁本庁</EditorialOffice>
<PublishingOffice>気象庁</PublishingOffice>
</Control>
<Head xmlns="http://xml.kishou.go.jp/jmaxml1/informationBasis1/">
<Title>震源・震度情報</Title>
<ReportDateTime>2024-05-29T18:15:00+09:00</ReportDateTime>
<TargetDateTime>2024-05-29T18:15:00+09:00</TargetDateTime>
<EventID>20240529181237</EventID>
<InfoType>発表</InfoType>
<Serial>1</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/">
<Earthquake>
<OriginTime>2024-05-29T18:12:00+09:00</OriginTime>
<ArrivalTime>2024-05-29T18:12:00+09:00</ArrivalTime>
<Hypocenter>
<Area>
<Name>茨城県南部</Name>
<Code type="震央地名">301</Code>
<jmx_eb:Coordinate description="北緯３５．９度　東経１４０．３度　深さ　４０ｋｍ" datum="日本測地系">+35.9+140.3-40000/</jmx_eb:Coordinate>
</Area>
</Hypocenter>
<jmx_eb:Magnitude type="Mj" description="Ｍ３．１">3.1</jmx_eb:Magnitude>
</Earthquake>
<Intensity>
<Observation>
<CodeDefine>
<Type xpath="Pref/Code">地震情報／都道府県等</Type>
<Type xpath="Pref/Area/Code">地震情報／細分区域</Type>
<Type xpath="Pref/Area/City/Code">気象・地震・火山情報／市町村等</Type>
<Type xpath="Pref/Area/City/IntensityStation/Code">震度観測点</Type>
</CodeDefine>
<MaxInt>1</MaxInt>
<Pref><Name>茨城県</Name><Code>08</Code><MaxInt>1</MaxInt>
<Area><Name>茨城県南部</Name><Code>301</Code><MaxInt>1</MaxInt>
<City><Name>茨城鹿嶋市</Name><Code>0822200</Code><MaxInt>1</MaxInt>
<IntensityStation><Name>茨城鹿嶋市鉢形</Name><Code>0822201</Code><Int>1</Int></IntensityStation>
</City>
<City><Name>稲敷市</Name><Code>0822900</Code><MaxInt>1</MaxInt>
<IntensityStation><Name>稲敷市江戸崎甲＊</Name><Code>0822920</Code><Int>1</Int></IntensityStation>
</City>
<City><Name>かすみがうら市</Name><Code>0823000</Code><MaxInt>1</MaxInt>
<IntensityStation><Name>かすみがうら市大和田＊</Name><Code>0823032</Code><Int>1</Int></IntensityStation>
</City>
<City><Name>鉾田市</Name><Code>0823400</Code><MaxInt>1</MaxInt>
<IntensityStation><Name>鉾田市汲上＊</Name><Code>0823432</Code><Int>1</Int></IntensityStation>
</City>
</Area>
</Pref>
<Pref><Name>千葉県</Name><Code>12</Code><MaxInt>1</MaxInt>
<Area><Name>千葉県北東部</Name><Code>340</Code><MaxInt>1</MaxInt>
<City><Name>香取市</Name><Code>1223600</Code><MaxInt>1</MaxInt>
<IntensityStation><Name>香取市役所＊</Name><Code>1223630</Code><Int>1</Int></IntensityStation>
<IntensityStation><Name>香取市仁良＊</Name><Code>1223632</Code><Int>1</Int></IntensityStation>
</City>
</Area>
<Area><Name>千葉県北西部</Name><Code>341</Code><MaxInt>1</MaxInt>
<City><Name>成田市</Name><Code>1221100</Code><MaxInt>1</MaxInt>
<IntensityStation><Name>成田市名古屋</Name><Code>1221102</Code><Int>1</Int></IntensityStation>
</City>
</Area>
</Pref>
</Observation>
</Intensity>
<Comments>
<ForecastComment codeType="固定付加文">
<Text>この地震による津波の心配はありません。</Text>
<Code>0215</Code>
</ForecastComment>
<VarComment codeType="固定付加文">
<Text>＊印は気象庁以外の震度観測点についての情報です。</Text>
<Code>0262</Code>
</VarComment>
</Comments>
</Body>
</Report>

```

</details>

### Step 3

Variables by Workatoコネクタを選択し、「Create variable」アクションを選択します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/64876/ccb6441c-64d4-ef7c-0fc7-ec7d05aa7f59.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/64876/13b7b5c9-9b03-dbaa-7864-4a366c393314.png)

次に、date, max_sindo, hypocenter_area, mj, forecast_comment という変数(variable）を追加し、それぞれ値をセットします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/64876/adee1991-883e-0c9d-ffe2-33109c124f5d.png)

#### date

`Response/Report/Body/Earthquake/Arrival time/Content` のデータピルをセットしたうえで、次のformulaを入力する ( `<Content>`は、セットされたデータピルを示しています）

```
<Content>.in_time_zone("Asia/Tokyo").strftime("%Y年%m月%d日 %H時%M分")
```

#### max_sindo

`Response/Report/Body/Intensity/Max int/Content` をセット

#### hypocenter_area

`Response/Report/Body/Earthquake/Hypocenter/Area/Name/Content` をセット

#### mj

`Response/Report/Body/Earthquake/Jmx eb: magnitude` をセット

#### forecast_comment

`Response/Report/Body/Comment/Forecast comment/Text/Content` をセット

### Step 4

Workbot for Slackコネクタを選択し、「Post message」アクションを選択します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/64876/e7888251-53a5-da69-8556-f152a41a85c3.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/64876/f49a698a-f3a1-60be-c359-f397d1f3ccc1.png)

Connectionは、先に準備したものを指定します。

設定は以下を参考に進めます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/64876/1a336083-7f4a-cff7-2433-661b50807983.png)

#### Reply channel

メッセージ送信先のチャンネルあるいはDMを指定

#### Message attachments

以下を参考に進めます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/64876/409a5548-f3a3-c043-a6d7-2a37582b029e.png)

##### Title

「最大震度 `<max_sindo>` の地震が発生」と入力します。
`<max_sindo>`は、Step 3の max_sindoを指定します。

##### Attachment text
次の通り入力します。

`<date>`頃、`<hypocenter_area>`で最大震度`<max_sindo>`(M`<mj>`)の地震が発生しました。
`<forecast_comment>`

`<date>` `<hypocenter_area>` `<max_sindo>` `<mj>` `<forecast_comment>` は、Step 3の 対応するVariableを指定します。

##### Attachment color

`Danger` を選択

# 実行結果

このレシピを実行すると、「震源・震度に関する情報」が新たに発表された際に、次のようなメッセージがSlackに投稿されます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/64876/1add2ab4-4725-eda0-28c6-c080ef61cf7f.png)

# まとめ

今回は、現在のWorkatoの機能をもとに、過去に作成したレシピの改善を行ってみました。Workatoは新機能の追加だけでなく既存機能の改善も進められており、使い勝手やレシピの生産性が向上しています。

また、皆さんが過去に作成されたレシピも見直す（＆新たなWorkatoの機能に置き換える、現在のWorkatoスキルに合わせて最適化する）ことで、冗長なレシピがシンプルになり見通しが良くなる、タスク数の削減に繋がるなど、色々と改善が進むこともあるかもしれませんので、機会がありましたらレシピを見直していただくことをお勧めいたします。