こちらは Livesense Advent Calendar 2025 DAY 20 の記事です。
はじめに
リブセンス経営推進部のSamです。 私はエンジニアではありませんが、RPAやAIを活用して社内業務の効率化に関心があります。
突然ですが、皆さんの会社では地震発生時の「安否確認」はスムーズにできていますか? 私の会社では、すでに専用の安否確認サービスを導入しています。しかし、運用していく中で一つ大きな課題が見つかりました。
それは、「サービス自体に通知機能がなく、地震が起きてもメンバーが気付けない」という点です。 そこで、「全社員が毎日必ず見ているSlackに通知を送れば、初動が早まるはずだ」と考え、ZapierとPythonを使って「震度3以上の地震速報をSlackへ自動通知する仕組み」を構築しました。
今回は、非エンジニアの私でも実装できたその手順をご紹介します。
システム全体像
- Trigger: 気象庁の地震情報フィードをZapierで取得
- Filter:「震源・震度に関する情報」のみを通す
- Formatter: 発生日時を正規表現で抽出
- Code(Python): 詳細データを解析し、「エリア名」と「震度3強以上」のみを抽出
- Action: Slackに通知

実装ステップ
1. 気象庁フィードの取得
Zapierの「RSS by Zapier」アプリでEventを「New Item in Feed」に設定し、気象庁の地震情報フィード「https://www.data.jma.go.jp/developer/xml/feed/eqvol.xml」を取得します。

2. フィルタリング
このフィードには地震以外の情報も含まれているため、「Filter by Zapier」アプリでタイトルが「震源・震度に関する情報」のものだけを次のステップに進めます。

3. 発生日時の抽出
「Formatter by Zapier」アプリでEventを「Text」に設定し、正規表現で地震発生日時を抽出します。
正規表現の例): [0-90-9]{1,2}日[0-9]{2}時[0-9]{2}分

4. Pythonで詳細データを取得
フィードのリンク先XMLファイルに詳細な震度情報が含まれています。
「Code by Zapier」アプリでEvent「Run Python」を設定し、以下のPythonコードを実行して震度3以上の地震情報と該当エリアを抽出します。
【ポイント】
- 震度3以上を抽出
- エリア名と震度をテキスト化

import requests
from xml.etree import ElementTree
# URLからデータを取得
url = input_data['url']
response = requests.get(url)
response.encoding = 'utf-8'
# 取得したデータをXMLとして解析
root = ElementTree.fromstring(response.text)
# outputを初期化
output = {'text': ''}
# XMLの特定のパスにあるアイテムを探す
for item in root.findall('./{http://xml.kishou.go.jp/jmaxml1/body/seismology1/}Body/{http://xml.kishou.go.jp/jmaxml1/body/seismology1/}Intensity/{http://xml.kishou.go.jp/jmaxml1/body/seismology1/}Observation/{http://xml.kishou.go.jp/jmaxml1/body/seismology1/}Pref'):
# 最大震度を取得
MaxInt = item.find('./{http://xml.kishou.go.jp/jmaxml1/body/seismology1/}Area/{http://xml.kishou.go.jp/jmaxml1/body/seismology1/}MaxInt')
# 最大震度3(3)以上を処理
max_intensity = MaxInt.text
if max_intensity in ['3','4','5-','5+', '6-', '6+', '7']:
# 該当エリアの名前を取得
area_name = item.find('./{http://xml.kishou.go.jp/jmaxml1/body/seismology1/}Area/{http://xml.kishou.go.jp/jmaxml1/body/seismology1/}Name')
if area_name is None:
continue
# area_textにテキストを生成
area_text = f'・{area_name.text}で震度{max_intensity}の地震がありました。'
# outputに追加
output['text'] += area_text + "\n"
# 出力を確認
print(output['text'])
5. 追加フィルタリング
抽出したテキスト(text)が空ではない場合のみ、次のステップへ進みます。

6. Slackへの自動投稿
最後に、Pythonステップで生成されたテキスト(text)が存在する場合のみ、Zapierの「Slack」アプリで、Event「Send Channel Message」を設定し、中した地震情報を指定チャンネルに投稿します。

まとめ
既存の安否確認サービスに「通知機能がない」という課題に対し、エンジニアの手を借りずにZapierとPythonで解決策を作ることができました。
この仕組みを導入してから、「Slack通知で地震に気づく」→「安否確認サービスで詳細を確認する」という導線ができ、有事の際の初動に対する不安を減らすことができました。 「ツールを導入して終わり」ではなく、実際の現場でどう使われているか(あるいは使われていないか)に着目して、足りないピースを埋めていく工夫の大切さを改めて感じています。