LoginSignup
3
3

More than 3 years have passed since last update.

スプレッドシートからGitHubのIssueを作成する

Posted at

これはSOUSEI Technology アドベントカレンダー2020 24日目の記事です。
メリークリスマスイブ :santa:

はじめに

スプレッドシートからIssueを作りたいこと、あるよねー!
ということでGASで。

やり方

  1. 行を選択する(複数行OK)
  2. GAS→Issueを作成する
  3. OK押す capture.gif

スクリプト

こちらをスプレッドシートのGASにコピペして {$_〇〇} 部分を書き換えてください。
アクセストークンは公式ドキュメントを参考に作りましょう!

function makeIssues() {

  // GitHubの情報
  var OWNER = "{$_GitHubのアカウント名}";
  var REPO = "{$_Issueを作成するリポジトリ名}";
  var ACCESS_TOKEN = "{$_アクセストークン}";

  // スプレッドシートの情報
  var title_column_no = 1;
  var description_column_no = 2;
  var issue_url_column_no = 3;

  // 選択しているセルの開始行番号を取得
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getActiveSheet();
  var upper_left_cell = sheet.getActiveCell();
  var start_row = upper_left_cell.getRow();

  // 選択しているセルの行数を取得
  var range = SpreadsheetApp.getActiveRange();
  var rows = range.getNumRows();

  // 確認ダイアログ
  var message = '';
  var start_title = sheet.getRange(start_row, title_column_no).getValue();
  message += start_title;
  if (rows > 1) {
    message += ' など' + rows + '';
  }
  var result = Browser.msgBox('Issueを作成します。よろしいですか?', message, Browser.Buttons.OK_CANCEL);

  if (result == 'cancel') {
    return;
  }

  // Issue作成
  for (var i = 0; i < rows; i++) {
    var row = start_row + i;
    var title = sheet.getRange(row, title_column_no).getValue();
    var description = sheet.getRange(row, description_column_no).getValue();

    var payload = {
      "title": title,
      "body": description,
    };

    var response_data = createIssue(payload);
    sheet.getRange(row, issue_url_column_no).setValue(response_data['html_url']);
  }

  function createIssue(payload) {
    var url = "https://api.github.com/repos/"+ OWNER + "/" + REPO + "/issues";

    var header = {
      "Authorization": "Basic " + Utilities.base64Encode(ACCESS_TOKEN),
      "Accept": "application/vnd.github.symmetra-preview+json",
      "Content-Type": "application/json",
    };

    var options = {
      "method" : "post",
      "payload" : JSON.stringify(payload),
      "headers" : header,
    };

    var response = UrlFetchApp.fetch(url, options);
    Logger.log(response);
    var response_data = JSON.parse(response.getContentText());
    return response_data;
  }
}

function onOpen() {
  // メニューバーにカスタムメニューを追加
  var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
  var entries = [
    {name : "Issueを作成する", functionName : "makeIssues"},
  ];
  spreadsheet.addMenu("GAS", entries);
}

さいごに

もよければどうぞ😎

3
3
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
3
3