スプレッドシートに特定の文字列が出現したらSlackに通知するGoogleAppScript

スプレッドシートで試算などを行っているときに、「いつの間にか数式が壊れてることに気づかずそのまま作業を進めてしまい死…」みたいなことがあるので、防止する仕組みを作ってみることにした。

仕組み

  1. 検算用のセルを用意しておき、数値が合わないときは特定の文字列を出すようにしておく
    • このセルとこのセルの数値は必ず一致するという部分に =if(A1=B1,"OK","NG【要確認】") を仕込んでおく
  2. 特定文字列(ここではNG【要確認】)がスプレッドシート内にあるということは、何かしら問題が起きているということなので、Slackで自分宛てにmentionする
    • 手動で実行だと実行すること自体を忘れてしまうので、GASのトリガーでn分おきにスクリプトを実行する設定をしておくことで自動化する

特定文字列をチェックするスクリプト

function checkCell() {
  // スプレッドシートを指定
  var spreadshseet = SpreadsheetApp.openById('***********')
  var numSheets    = spreadshseet.getNumSheets();

  //チェックする文字列を定義
  var reg = "NG【要確認】";

  loop:
  for(var sheetNo = 0; sheetNo <= numSheets-1; sheetNo++) {
    SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
    var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheets()[sheetNo];
    var sheetName = SpreadsheetApp.getActiveSpreadsheet().getSheets()[sheetNo].getSheetName();
    var range = sheet.getDataRange();
    var values = range.getValues();

    for (var i = 0; i < values.length; i++) {
      var row = "";
      for (var j = 0; j < values[i].length; j++) {      
        if (values[i][j]) {    
          row = row + values[i][j];
          if (row.match(new RegExp(reg))) {
            var messageBody = "<@U8LPZ1BBP>" + sheetName + "シートの" + i + "行目でセルの差異チェックがNGになってるよ";
            sendSlackMessage(messageBody);
            break loop;
          }
        }
      }
    }
  }
}

function sendSlackMessage(message) {
  var postUrl = 'https://hooks.slack.com/services/******';
  var username = 'bot';  
  var icon = ':hatching_chick:';  
  var jsonData =
  {
     "username" : username,
     "icon_emoji": icon,
     "text" : message
  };
  var payload = JSON.stringify(jsonData);
  var options =
  {
    "method" : "post",
    "contentType" : "application/json",
    "payload" : payload
  };
  UrlFetchApp.fetch(postUrl, options);
}

スクリプトのトリガーを設定する

これで10分おきにチェックするようになり、特定文字列を発見したら、Slackに通知してくれるようになった。

GASとSlackの連動は便利だなあ。

参考にしたサイト

スピンバイク買った

去年の夏頃からランニングを始めて割と習慣化できていたのだけど、年初から右膝の痛みが出てしまいランニングが億劫になってしまった。

膝に負担がかからない水泳にするかーと思いプールにいくも、梅雨時期で外出も面倒…。
プールは泳いでる間考え事くらいしかできないし、何往復したかすぐ忘れるしであんまり続かなかった。

こうなりゃ室内で運動できるようにしてやると思い、スピンバイクを注文。

設置から2週間経過したくらいだけど、ほぼ毎日30分以上は乗っている。
ランニングと比べると景色が変わらない単調さがあるが、

  • 膝痛くならない
  • 天候に左右されない
  • ながら運転ができる

ってあたりがメリットだとおもう。
なんとなく気になってたけど未消化だったアニメや映画を見ながら運動できるし、いい感じなのではなかろうか。

minneでtergenさんのdaypackをカスタムオーダーした

オール黒でオーダーした新しいマイバッグ。ああ、大変愛おしい。

最近、MBPとiPadを持ち歩く生活になったこともあって、カバンを新調したい欲が高まり色々物色していたところ、 minneで tergenさんのデイパックを発見。

DAYPACK Camouflage Gray | ハンドメイドマーケット minne

形は最高なのだが、カバンは黒が好みなので「オール黒で作っていただけますか?」と伺ったら、快く対応してくださった。数週間後、無事手元に届いた。

イメージどおりの仕上がりなのと、背中側の独立した収納スペースが本当に便利。