5
3

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.

GAS+スプレッドシートを使って、Backlog上のプロジェクト間で課題を複製する

Last updated at Posted at 2019-01-24

#本記事の内容
Google Apps Script(GAS)とスプレッドシートを用いて、Backlog上のプロジェクトを横断して課題を複製します。

#動機
タスク管理ツールとしてBacklogを用いて業務をしています。
ある日、プロジェクトを新しく作成し、旧プロジェクトの残チケットをそのまま新プロジェクトへ複製しなければならなくなりました。
手動でもできないこともないけど、残チケットがかなり多く残っており、自動でできないかと考えました。(実際は半自動)

#方法
プロジェクト間にスプレッドシートを挟んで移行した。

  1. 旧プロジェクトからスプレッドシートに課題を自動抽出
  2. スプレッドシートから新プロジェクトに課題を自動登録

###旧プロジェクトからスプレッドシートに課題を自動抽出

複数スペースのBacklogの課題をspreadsheetで一覧表示を参考にしました。
id:hiroshiweb さんありがとうございます。

####1. Spreadsheetを用意する
Backlog All task - Google スプレッドシートのコピーを作成する。

####2. Backlog API keyなどの設定
1でコピーしたスプレッドシートのシート名configを開く。
backlog_team, backlog_api_key, backlog_assigneeidを入力する。

####3. GASに以下を記述する

function main(action) {
    var IssuesSheet = SpreadsheetApp.getActive().getSheetByName('issues');

    /* 一旦、シートをクリアにする */
    if(IssuesSheet.getLastRow() > 1){
        IssuesSheet.getRange("A2:I"+IssuesSheet.getLastRow()+"").clearContent();
    }

    /* ヘッダをセットする。 */
    IssuesSheet.getRange("A1").setValue("space");
    IssuesSheet.getRange("B1").setValue("url");
    IssuesSheet.getRange("C1").setValue("summary");
    IssuesSheet.getRange("D1").setValue("createUser");
    IssuesSheet.getRange("E1").setValue("priority");
    IssuesSheet.getRange("F1").setValue("status");
    IssuesSheet.getRange("G1").setValue("dueDate");

    var issuelist = get_issues_lists(IssuesSheet);

}

function onGet(event) {
    main('on_manual');
}

/* space分の課題を取得して書き込む */
function get_issues_lists(IssuesSheet) {
    var Confsheet = SpreadsheetApp.getActive().getSheetByName('config');
    var range= Confsheet.getRange(2, 1);
    
    var values = Confsheet.getRange(2, 1, Confsheet.getLastRow()-1, Confsheet.getLastColumn()).getValues();

    var range= IssuesSheet.getRange(2, 1);

    for(var i=0;i<values.length;i++){
    
        var backlog_team = values[i][0]
        var backlog_api_key = values[i][1]
        var backlog_assigneeid = values[i][2]

        res = UrlFetchApp.fetch("https://" + backlog_team + ".backlog.jp/api/v2/issues?apiKey=" + backlog_api_key + "&assigneeId[]=" + backlog_assigneeid+ "&order=&statusId[]=3&statusId[]=2&statusId[]=1&count=100"); 

        if (res.getResponseCode() != 200) {
            return false;
        }
        // Logger.log("res :" + res);

        var issues = JSON.parse(res.getContentText());

        write_issues(backlog_team, range, issues);
        range = range.offset(issues.length, 0);
    
    }

}

/* 課題をシートに書き込む */
function write_issues(backlog_team, range, issues) {

    for(var i=0; i<issues.length; i++) {
    
        range.offset(i, 0).setValue(backlog_team);
        var issue_url = "https://" + backlog_team + ".backlog.jp/view/" + issues[i]["issueKey"]
        range.offset(i, 1).setValue('=HYPERLINK(\"' + issue_url + '\",\"' + issues[i]["issueKey"] + '\")')
        // 抽出したいデータを指定する
        range.offset(i, 2).setValue(issues[i]["summary"]);
        range.offset(i, 3).setValue(issues[i]["createdUser"]["name"]);
        range.offset(i, 4).setValue(issues[i]["priority"]["name"]);
        range.offset(i, 5).setValue(issues[i]["status"]["name"]);
        range.offset(i, 6).setValue(issues[i]["dueDate"]);

    }

}

抽出するデータは、BacklogのAPIドキュメントより、keyを指定することで、好きなように変更することができる。

####4. main関数を実行する
実行すると、1でコピーしたスプレッドシートにデータが抽出できる。

###スプレッドシートから新プロジェクトに課題を自動登録
Google SheetsによるBacklog課題一括登録を参考にしました。

抽出用のスプレッドシートから、登録用のスプレッドシートに手動でデータをコピー&ペースト(ここ自動化したい・・・)

そして、Google SheetsによるBacklog課題一括登録の通りに一括登録を試みる。

#所感
100件くらいあったチケットを半自動で複製できたので、手動で複製するより半分の時間ではできたと思う。
スプレッドシートを挟んで移行した!というアイデアだけの記事です・・・。
業務中の時間のない中だったので半自動ですが、また同じケース(すごいレアケースだけど)に遭遇したときのために忘れないように書きました。

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

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?