見出し画像

【BCP】地震発生時の安否確認プロセスを自作で構築してみた【Google(GAS) × Microsoft(Teams, Forms)】

こんにちは。アウンコンサルティング システム担当の遠藤です。
今回は、国内で大きな地震が発生した際に、自動で社員の安否確認の回答依頼を行い安心して事業を継続させる為の仕組みを、安否確認ツール等の専門のツールを使用せずに構築する事が出来ましたので、その内容を紹介いたします!


はじめに

アウンコンサルティングでは、フルリモートワークを行っている為、日本の各地で各社員が業務を行っております。
そういった環境の中でどのような仕組みで安否確認を行っているのか、フルリモートワークの企業はもちろん、そうでない企業にも、安否確認プロセスを見直す上で参考になるかと思います。
是非最後までご覧ください!

用意・使用したもの

・Googleアカウント
 Google App Script(以下GAS)を使って
地震の検知を行う仕組みを作成しているため、Googleアカウントが必要になります。
 アウンコンサルティングではGoogleWorkSpaceを利用していますが、Googleアカウントがあれば無料で利用できます。
(※無料版は実行回数や時間に制限があります。)

・Microsoftアカウント
 
アウンコンサルティングでは主に、Microsoft 365 を利用しているため、社内周知などの連絡手段は「Microsoft Teams(以下Teams)」安否確認の集計は「Mirosoft Forms」を利用しています。
 また、GASにより、地震の発生・検知をトリガーとして、Teamsにて社内周知を行う為に、「Power AutoMate」を利用しています。

回答フォームの作成(Microsoft Forms)

社員に回答していただく為のフォームを作成します。
なるべくシンプルな作りで簡単に回答できるよう、以下のポイントで作成しました。

・回答時はログイン不要
・自身の名前などの個人情報の入力不要(自動入力)
・回答方法は ラジオボタン or チェックボックス
・設問は5問程度

上記を考慮した結果、Microsoft Formsでフォームを作成し、且つ回答フォームはTeamsのチャネルへタブを追加 する事で実現できました。
(Teams内にフォームを追加する事で、Teamsのログイン状態を引き継いだ状態で回答が可能になります。)
もちろんスマートフォンアプリからの回答も可能です。

地震を検知(Google App Script)

地震の検知は、気象庁より配信される「気象庁防災情報XML」を活用しました。

GASを使ってXMLを読み込み、「震度5強以上の地震が発生していたらMicrosoft 365アカウントへメールを送付する」というプログラムを作成しています。

アウンコンサルティングでは、安否確認を行う基準を、
 震度5強以上の地震発生時としています。
フルリモートワークにより、日本全国各地にメンバーが在籍していたり、
 地震発生時に居住地から移動されている方もいる可能性があるため、
 国内で発生した震度5強以上の地震は、地域問わず全て通知しています。
メールの送付先がMicrosoft 365アカウントの理由は後述します。

詳細なプログラムのコード等は「GAS 気象庁防災情報XML」等と検索すれば多くの詳細な情報を探す事が出来ます。それぞれの環境や運用に合った設定やカスタマイズがあるかと思うので、今回はあえて簡易的に紹介いたします。あくまでベースとして活用ください。

  //気象庁の地震情報のXMLフィードからエントリを取得
  var atom = XmlService.getNamespace('http://www.w3.org/2005/Atom');
  var feedUrl = 'https://www.data.jma.go.jp/developer/xml/feed/eqvol.xml';
  var feedRes = UrlFetchApp.fetch(feedUrl).getContentText();
  var feedDoc = XmlService.parse(feedRes);
  var feedXml = feedDoc.getRootElement();
  //entry要素のタグ名を持つすべての要素を取得
  var feedLocs = getElementsByTagName(feedXml, 'entry');

  feedLocs.forEach(function(value, i) {
    var title = value.getChild('title', atom).getText();
    var link = value.getChild('link', atom).getAttribute('href').getValue();

    //震度3以上の場合は、titleが「震度速報」になります。(3未満の場合は、「震源・震度に関する情報」)
    if('震度速報' == title){
      //xmlの情報を取得
      var dataUrl = link;
      var dataRes = UrlFetchApp.fetch(dataUrl).getContentText();
      var dataDoc = XmlService.parse(dataRes);
      var dataXml = dataDoc.getRootElement();
      var dataLocs = getElementsByTagName(dataXml, 'Pref');
      var dataReportDateTime = getElementsByTagName(dataXml, 'TargetDateTime')[0].getValue();
      
      //xmlデータより、Pref要素を繰り返し探索
      dataLocs.forEach(function(value, i) {
        //Pref要素の文字列を取得(発生地域や震度情報などが含まれています)
        var strPref = value.getValue();
        //震度◯◯の形に文字を整形 ※ご自身の環境に合わせて関数を作成してください。
        strPref = molding(strPref);

          //「震度が5強以上」の場合
          if(strPref.match(/震度[6-9]/) || strPref.indexOf("震度5+") !== -1){
              //メールの送信
              var sendToAddress ="Microsoft365アカウントのメールアドレス";
              var mailTitle = '【安否確認】国内で震度5強以上の強い揺れを検知しました。'; //メールの件名
              var mailMessage = 'メール本文'
              var options = {"htmlBody":mailMessage};
              MailApp.sendEmail(sendToAddress,mailTitle,mailMessage,options);
          }
      });
    }
  });

//指定されたタグ名を持つ要素を取得
function getElementsByTagName(element, tagName) {
  var data = [], descendants = element.getDescendants();
  for(var i in descendants) {
    var elem = descendants[i].asElement();
    if ( elem != null && elem.getName() == tagName) data.push(elem);
  }
  return data;
}

地震の発生を周知(Microsoft Teams・Power Automate)

地震の発生時、Microsoft 365アカウントへメールを送付しました。
その理由は、メールの受信をトリガーにPower Automateを起動させる為です。

「電子メールをチャネルに転送する」というテンプレートを利用し、以下の通り作成しています。

ここで指定した件名のメールを受信した際に、フローが実行されます。
上述のGASで設定した件名を設定します。
通知先のチャネル情報を選択し、
チャネルに投稿するメッセージは、 html形式で入力できます。
ここに回答フォームのURLを記載します。
実際の通知イメージ。
フォームの回答は、地震の発生地域を問わず、全社員を対象としています。

また、現時点(2024年5月現在)で、Power Automateからの投稿では、チャネルやチームへのメンションが出来ませんでした
(厳密には「Microsoft Graph」にて可能ですが別途ライセンスが必要です。)
ですので、社員の方には「99_BCP」チャネルの通知設定を以下の通り設定いただきました。
すべての新しい投稿「バナーとフィード」

上記により、メンションが設定されていなくても、
このチャネル内のすべての投稿に対して通知を受け取れるようになります。

社員の安否を集計(Microsoft Forms)

安否確認フォームへの回答結果は、紐づけられたエクセルに集約されています。予め選任されている社内の災害対策本部のメンバーにて、地震の災害状況の確認に加え、フォームへの回答結果の確認、未回答者のリマインド等といった人的被害の確認など、各種情報収集を行い、適宜対応を行います。

まとめ

いかがでしたでしょうか。
機能やメンテナンスなどの部分を考慮すると、安否確認ツールなどのSaaSサービスには敵わない部分がありますが、GASの部分が上手くカスタマイズ出来れば、震度や地域毎の切り分けも可能です。

是非、今回紹介した内容が、少しでも災害時における社員の安否確認プロセスを構築する際のヒントになればと思います!

さいごに

お知らせです!

弊社では主に、企業の海外進出に向けた、海外向けのSEOWeb広告などといった、Webマーケティング支援を得意としています。
フルリモートワークにより働く場所を問わず、安心かつ生産的な環境で、海外SEOに精通したプロフェッショナルが提供する弊社のサービスにもご興味を持っていただけたら幸いです。
是非、コーポレートサイトもあわせてご覧ください!

また、そんな環境で生産的に仕事がしてみたい方の募集も行っております!
以下の採用サイトもご覧いただき、お気軽にお問い合わせください!

最後までお読みいただき、ありがとうございました!

いいなと思ったら応援しよう!