QualityForwardのテスト集計を返すSlackコマンドを作ってみた


社内の情報交換にSlackを使っている開発チームは多いと思います。テストがうまく進んでいるかどうかを毎回QualityForwardにログインして確認するのは面倒で、できれば情報が集客できるSlack上で確認したいはずです。

そこでQualityForward APIとGoogleスプレッドシートでサーバレスのSlackボットを作ってみました。

制限について

本来であればSlackからのコマンドを受けてQualityForward APIを実行したいのですが、Googleスプレッドシート側での処理時間もあってタイムアウトしてしまいます。そこで、QualityForward APIでGoogleスプレッドシートに一日の作業件数を記録するで使ったスクリプトを用いて、集計は自動で行っておきます。そこに書かれた情報をSlackメッセージとして返却します。

Slackボットについて

Slackボットは /qf でメッセージを受け付けます。その際、日付を指定するようにしました。これで過去の状態についても確認しやすくなります。

/qf 2019-12-25

リクエストURLはGoogleスプレッドシートのスクリプトエディタで、Webアプリケーションとして公開した際のURLになります。

コードについて

Google Apps ScriptではSlackからのPOSTメソッドを doPost 関数で受け付けます。そして、結果の記録されているシートからデータを抽出して、テンプレートに当てはめて返却します。

コードは以下のようになります。詳細はコメントを参考にしてください。

function doPost(e) {
  // 一日の集計結果が記録されているシートを取得
  var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("TestResult")
  // 最終行を取得
  var lastRow = sheet.getLastRow() - 1;
  // 日付列をまとめて取得(処理高速化のため)
  var dates = sheet.getRange(2, 1, lastRow, 1).getValues();
  var results = {};
  // 上から順番にチェックします
  for (var i = 0; i < dates.length; i++) {
    var date = new Date(dates[i][0]);
    // 指定された日付とマッチするかチェックします
    if (e.parameter.text === Utilities.formatDate(date, 'JST', 'yyyy-MM-dd')) {
      // 指定された日付のデータを取得します
      var values = sheet.getRange(i+2, 2, i+2, 8).getValues()[0];
      // 結果をまとめます
      results = {
        date: Utilities.formatDate(date, 'JST', 'yyyy年MM月dd日'),
        pass: values[0], fail: values[1],  skip: values[2],
        cut: values[3],  block: values[4], na: values[5],
        qa: values[6]
      };
    }
  }
  // Slackメッセージ用テンプレート
  var template = '%date%のテスト作業結果です。パス%pass%件、失敗%fail%件、スキップ%skip%件、カット%cut%件、ブロック%block%件、N/A%na%件、Q&A%qa%件となっています。';
  // 取得した結果でテンプレートを置き換えます
  for (var k in results) {
    template = template.replace('%' + k + '%', results[k]);
  }
  // HTTPレスポンスを作ります
  var out = ContentService.createTextOutput();
  out.setContent(template);
  return out;
}

まとめ

これでSlackのスラッシュコマンドを使ってテストの状況を確認できるようになりました。

トリガーの頻度を細かくすれば、現時点での状況を確認することもできるでしょう。テストが滞りなく行われているか管理する上で便利なコマンドになりますので、ぜひお試しください。

QualityForward