4
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

開発者の環境や技術Advent Calendar 2019

Day 7

日報スプレッドシートにBacklogAPIから課題データを取得する

Last updated at Posted at 2019-12-27

はじめに

Backlogの課題と日報の紐付けをしたいという要望があり、作成しました。

スクリプトエディタを開く

新しくスプレッドシートを作成し、
ツール > スクリプトエディタ からスクリプトエディタを開く

プログラム作成

スクリプトエディタで下記プログラムを作成


/**
 * 編集時に発動
 **/
function task_action() {
  var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();

  // 日報以外のシートはスルー
  if (sheet.getName() != '日報') {
    return;
  }

  var range = SpreadsheetApp.getActiveRange();

  // A列目以外の編集はスルー
  if (range.getLastColumn() != 1) {
      return;
  }

  // 入力したキーからデータ取得
  var key = range.getDisplayValue();
  set_task_data(key, range);
}

/**
 * BacklogAPIからデータを取得して反映する
 **/
function set_task_data(key, range) {
  if (key == "") {
    return;
  }

  // B(作業日)
  var d = new Date();
  range.offset(0, 1).setValue(Utilities.formatDate(d, 'Asia/Tokyo', 'yyyy/MM/dd'));
  SpreadsheetApp.flush();

  // C(作業者)
  var username = get_name();
  range.offset(0, 2).setValue(username);

  try {
    // Backlog課題取得
    var data = get_api_data(key);

    // D(種別)
    range.offset(0, 3).setValue(data["issueType"]["name"]);
    // E(作業内容)
    range.offset(0, 4).setValue(data["summary"]);

  } catch(e) {
    Browser.msgBox(e.message);
    log(e.message + "\n" + e.fileName + ".gs : " + e.lineNumber + "\nstack:\n" + e.stack);
  }
}

/**
 * BacklogAPIデータ取得
 **/
function get_api_data(key) {
  var HOST = PropertiesService.getScriptProperties().getProperty("BACKLOG_HOST");
  var API_KEY = PropertiesService.getScriptProperties().getProperty("BACKLOG_API_KEY");

  var url = HOST + "/api/v2/issues/" + key + "?apiKey=" + API_KEY;

  var fetch = UrlFetchApp.fetch(url);
  var data = JSON.parse(fetch.getContentText());

  return data;
}

/**
 * 編集者のメールアドレスから名前を取得
 **/
function get_name() {
  var name = '';
  var email = Session.getActiveUser().getEmail();

  switch(email) {
    case 'testA@test.com':
      name = 'テストA';
      break;
    case 'testB@test.com':
      name = 'テストB';
      break;
    default:
  }
  return name;
}

API情報の保持

ファイル > プロジェクトのプロパティ > スクリプトのプロパティ で下記保存

BACKLOG_HOST : [BacklogAPI]
BACKLOG_API_KEY : https://xxxxx.backlog.jp

トリガー追加

編集 > 現在のプロジェクトのトリガー > トリガー追加

image.png

実行する関数を選択 : task_action
デプロイ時に実行 : Head
イベントのソースを選択 : スプレッドシートから
イベントの種類を選択 : 編集時
保存

image.png

実行

A列にBacklogのキーを入力すると、内容をAPIで取得して表示する

image.png

さいごに

毎日日報入れるの面倒だった。
引き継いで使ってくれるのかな。
もっと便利なツールがあればいいなと思った。

4
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?