Webプロデューサーのノート

デジタルマーケティング、Webサイト開発を生業としているWebプロデューサーのTipsとかポエムとか

複数スペースのBacklogの課題をspreadsheetで一覧表示

Backlog、便利ですよね。

筆者もここ数年、プロジェクト管理ツールはBacklogを使っています。 ツール自体が素晴らしいのは言わずもがなですが、Backlog自体が普及しているということが一番の理由かなと思います。 筆者の場合は付き合っているベンダーさんもBacklogを利用していて、現在は3~4スペースのBacklogで10以上のプロジェクトのタスク管理を行っています。

※Backlogのスペースは、プロジェクトの上位概念で1スペースで複数のプロジェクト管理が出来ます。 スペースが複数となってしまうのは、契約者が違うからです。 自社のBacklogやベンダーさんのBacklogが存在するので複数スペースになってしまいます。

スペースの説明はこちら。 スペース ID とは? - Backlog(Japanese)

複数スペースのしんどいこと

複数のスペースがあると、筆者自身のスペックの問題もありますが、正直チェックがしんどいです。

理由を考えてみましたが、

  • スペース各々でログインしないとタスクがチェック出来ない。
  • 全体を俯瞰出来ないので、自分はどれから取り掛かるべきかがわからない。
  • 個人の問題が大きいが、好きなプロジェクトばっかり見がち。
  • Backlogはタスクの更新があればアラートメールが飛ぶからいいじゃんという話もあるが、全プロジェクトを見る立場になってくると、アラートの数が大量で、とても追いきれない。

複数スペースの課題をチェック出来るツールを作りました!

ネットで似たようなことを考えているか人がいるか探しまして、下記の記事にたどり着きました。

cloudpack.media

この記事のツールの場合は1スペースにある複数プロジェクトを俯瞰してみるのには良いんですが、やりたいのは複数スペースの全プロジェクトの中で私がやるべきタスクを俯瞰して見たいわけです。

ただ、Google Apps Scriptで結構簡単にBacklogのAPIを利用できるのと、Google Spread Sheetは使いやすい!というのがわかりましたので、作ってみました!

Google Apps Script

とりあえず、コードを張り付けておきますね。大分、さきほどの参照記事のコードを参考にしています。

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"]);

    }

}

どんな感じで使うか

見た目はこんな感じです。

f:id:hiroshiweb:20180310165042p:plain

モザイク掛かっているのでわかりにくいですが、複数スペースの自分の課題が一覧で取得できました。 これでいちいち各スペースにログインする手間が省けます。 更新は[update]ボタンで行います。

シートに色がついてますが、これはGoogle Spread Sheetの条件付き書式を使っているだけです。 筆者の場合は優先度が「高」のものを目立つように、「低」のものは目立たないようにしました。 これは個人の好みですね。 納期で色分けしてもアリかと思います。

設定はどうしてるか、ですが、別のシートにconfigをまとめています。

f:id:hiroshiweb:20180310165549p:plain

ここで、各パラメータについてですが、

  • 「backlog_team」はスペース名になります。

  • 「backlog_api_key」とはBaklogのメニューから「個人設定」>「API」でAPIキーを新規登録すればすぐに作れます。 こんな画面です。 f:id:hiroshiweb:20180310165956p:plain

  • 「backlog_assigneeid」は各スペースでの自分のIDになります。確認方法ですが、課題の検索画面で自分担当の課題を表示したときにurlに「backlog_assigneeid=*****」みたいなパラメータを確認出来ると思うので、それを入れます。

すぐに使えるSpreadSheetをご用意しました

いろいろ説明しましたけど、使い勝手は使ってみて確認するのが一番です。 すぐに使えるSpreadSheetをご用意しましたのでご自由にどうぞ。

Backlog All task - Google スプレッドシート

必ずコピーして使ってください。 Google Apps Scriptもコピーしないと参照出来ないと思いますし。

あと、ご使用は自己責任で!