PowerCMS X ブログ
2025-12-25
「やさしい朝日新聞」は、朝日新聞社が提供するニュース記事をやさしい日本語にして伝えるメディアサイトです。
気象庁地震情報「長期(地震火山)」という気象庁が公開している XMLがあります。
「やさしい朝日新聞」では、12月からこの情報を利用して大きな地震があった時に自動で情報を発信する運用を始めました。
![]()
このしくみは、PowerCMS Xのプラグインとして作成し、5分おきのバッチ処理として動かしています。
自動で発信する震度についてはプラグイン設定で指定できるようにしています。現在の設定は「4(以上)」です。
![]()
以下の処理はすべて自動化されています。
この記事は技術情報ではないので、コードの紹介というよりも、どのように情報を整えているかについてを主題とします (といいつつ、コードもちょっと混ぜるという...)。
$detail = $this->simplexml_load_string( $xml );
$head = $detail->Head;
$body = $detail->Body;
$level = (string) $body->Intensity->Observation->Pref->MaxInt;
数字を変数にセットしつつ、頭に「震度」を付けて、ラベルを作ります。「+」や「-」がついていたら「震度5強」「震度5弱」などとします。
$areaName = (string) $body->Earthquake->Hypocenter->Area->Name;
地域名に都道府県名が含まれない場合は、都道府県を冒頭に追加します。
例 : 「トカラ列島近海」は「鹿児島県トカラ列島近海」にする
$text = (string) $head->Headline->text;
21日10時29分ころ、地震がありました。
全角英数字を半角英数字に揃えてから、なぜか「ころ」になっているので、「ごろ」に修正します。日付に月を追加して、曜日も追加します。時間には午前、午後を付けて12時間表記に揃えます。タイトルには時間は入れず、テキストと概要欄に入れます。
12月21日(日曜日)午前10時29分ごろ、青森県東方沖で地震がありました。
ForecastCommentという項目があり、ここに津波の心配があるかどうかが書かれています。
$comment = (text) $body->Comments->ForecastComment->Text;
津波警報等(大津波警報・津波警報あるいは津波注意報)を発表中です。
コメントには「この地震による津波の心配はありません。」などと入っている場合と、大津波警報、津波警報、津波注意報などのテキストが入っている場合があります。解除の場合もあり得るので「を発表中です。」という文字列が含まれるかどうかで地震の後の津波の有無を判別します。
別途、WarningComment という項目が入ることがありますが、おそらくここについては人の手が入っていると思われ、定型化できないので、その後の人による確認を経て必要に応じて追記します。
震度の情報と、地域名、テキストからタイトルを生成します。タイトルには日付、時間は含めず、日付、時間は概要とテキストに含めます。
コメントが「この地震による津波の心配はありません。」の時のタイトルは次のようにします。
青森県東方沖で、震度4の地震がありました この地震で、津波の心配はありません
「 」を明示的に入れているのは、og:image生成時に、そこで改行されるようにテンプレートを設定しているためです。

続いて概要です。
12月21日(日曜日)午前10時29分ごろ、青森県東方沖で地震がありました。この地震で、津波の心配はありません。
タイトルにふりがなを付けて画像化したものを og:image にセットします。そして、タイトル+この概要に URLを添えて「X」に投稿します。多少のタイムラグはありますが、音声ファイルも同時に生成されるようになっています。
本文には、各地の震度など、さらに情報を加えます。震度1や震度2を加えると、テキスト量が多くなり、音声ファイル生成などに時間がかかるため、設定値(現状は「4」)マイナス1、震度3までの地域を本文に加えます。
12月21日(日曜日)午前10時29分ごろ、青森県東方沖で地震がありました。この地震で、津波の心配はありません。このあとの情報に注意してください。
震度3以上の地域は次のとおりです。
震度4
- 青森県
- 八戸市・五戸町・階上町
- 岩手県
- 軽米町
震度3
- 青森県
- 三沢市・野辺地町・七戸町・六戸町・東北町・おいらせ町・三戸町・青森南部町・平内町・むつ市・東通村
- 岩手県
- 盛岡市・二戸市・八幡平市・久慈市・岩手洋野町
- 北海道
- 函館市
ForecastCommentに津波の情報が入っている時、残念ながらテキストからは大津波警報なのか、津波警報なのか、津波注意報なのか分からないケースがあります。「を発表中です。」文字列を含むときは、津波の危険があります。
各所で散々話していることですが、「津波が来るかもしれません。高台へ避難しましょう。」などのようなテキストは、やさしくないので、やさしい日本語の原則「ハッキリ言う」ことにします。
強く呼びかけるため、タイトルの「地震」を「強い地震」に言い換え、震度5以上の場合は「津波がきます!今すぐ逃げてください!」、震度4以下の場合は「津波がくるかもしれません!」をタイトルに追記します。
青森県東方沖で強い地震がありました 津波がきます! 今すぐ逃げてください!
津波の可能性と震度の関係がイコールなわけではありませんが、過度になりすぎないようにしつつ、最後に「!」を付けるように工夫しています。
本文にも、強い呼びかけを追加します。strongタグを付けて、以下のようなテキストが冒頭に追加されます。
青森県東方沖で強い地震がありました。
津波がきます。今すぐ海からはなれたところ、高いところへ逃げてください!
緊急時に画像の必要性が高いわけではありませんが、「やさしい朝日新聞」では記事に対して画像を一点以上付けています。このとき、都道府県が1つのときは、その都道府県のイメージ画像 (代替テキストは「青森県のニュースです」など)、都道府県が複数にわたっているときは、地震のイメージ画像 (代替テキストは「地震のニュースです」) が記事に表示されるようにします。
![]()
画像の他に、カテゴリ、タグは自動でセットされます。日付は XMLの地震発生時点にセットされるようになっています。
記事が自動生成されると、Slackの #やさしい朝日新聞 チャンネルにメールを通して自動投稿されます。管理画面はスマートフォンでも操作できるため、すばやく対応できるようにしています。ソース情報への参照を簡単にするため、冒頭のスクリーンショットにあるのでお分かりいただけると思いますが、管理画面をプラグインでカスタマイズして元データのXMLへのリンクを追加しています。
試験的に運用している段階では、自動投稿ではなく、下書きの記事が生成された後に Slackで知らせるようにしていました (おかげで青森の大きな地震の発信が遅れたことが残念です)。
試験運用の時点でわかったことは、地域名の読み方やふりがなが間違っていることが往々にしてあることです。自動で作っているので仕方ない部分もあるのですが、そこは何とかしたいと考えました。
行ったことは、正しい地名の読み方を辞書に登録して、辞書に登録しているテキストには明示的にふりがなを付けることです。
住所の読み方の情報源はいくつかありますが、国土地理院のものではなく、気象庁のものを使いました。情報ソースが気象庁のXMLですから、当然ですね。
辞書に登録されているものは、ふりがな生成時に適用されますが、音声を生成する時にも、MeCabによる分ち書きを行い、辞書に登録された固有名詞については、それを適用してから音声を作成するようにしました。
<ruby>八戸市<rt>はちのへし</rt></ruby>
Amazon Pollyに渡すものは、以下のように変換してから音声化します。
<phoneme type="ruby" ph="はちのへし">八戸市</phoneme>
「やさしい朝日新聞」をぜひフォローいただき、災害情報を見かけたときはぜひ拡散をお願いします。
今後は、大雨などの情報やJアラートの情報などを自動化することを検討中です。