スプレッドシートからGitHubのIssueを作成する
これはSOUSEI Technology アドベントカレンダー2020 24日目の記事です。
メリークリスマスイブ
はじめに
スプレッドシートからIssueを作りたいこと、あるよねー!
ということでGASで。
やり方
- 行を選択する(複数行OK)
- GAS→Issueを作成する
- OK押す
スクリプト
こちらをスプレッドシートの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);
}
さいごに
もよければどうぞ😎