【GAS】Backlogの残タスク（課題チケット）をGASで取得してチャットワークに流す

#<i class="fa fa-book" style="font-size:1em;"></i> はじめに

チケット駆動の開発を続けていると、日々の振り返りの中で残りチケット・タスクを確認する機会があると思います。
それが朝会の場であったり、夕会であったりしますが、その都度Backlogを開いて検索かけてーとやっていると面倒です。せっかくAPIが公開されているのなら、定期的にチケットの一覧をチャットワークに投稿すれば、確認も早いんじゃないかと思いました。

チャットワークに投稿するだけでなく、スプレッドシートにも書き込めるようにしています。



雑なGASのスクリプトで申し訳ありませんが、何かの参考になればと。

Backlog APIのリファレンスはこちら
http://developer.nulab-inc.com/ja/docs/backlog


#<i class="fa fa-book" style="font-size:1em;"></i> てかGASって何？

GoogleAppsScriptの略で、簡単に言うとGoogle製のサービスのプログラム環境です。JavaScriptで記述できます。プログラムを作ることで、例えば表計算を自動化したり、サービス間の連携を行うといったことが可能になります。

####簡単に使用する場合

スプレッドシートを新規作成 > ツール　> スクリプトエディタ

オンラインエディタが開かれ、JavaScriptを書いていきます。



#<i class="fa fa-book" style="font-size:1em;"></i> 必要なもの

APIキーはそれぞれのリファレンスを参考に取得します


* BacklogのAPIキー
* ChatWorkのAPIキー
* BacklogのプロジェクトのID


#<i class="fa fa-book" style="font-size:1em;"></i> GASのスクリプト

```js

function task() {

    // スプレットシート取得
    var mySS = SpreadsheetApp.openById("***スプレットシートのID***");
    // スプレットシートの書き込む位置
    var range= mySS.getSheetByName("**シートの名前**").getRange(1, 1);

    // BacklogプロジェクトのID
    var pjid = **PJ ID**;

    // ChatWorkに投稿する本文
    var honbun = "";
    
    // APIキーでBacklog認証&取得
    var resissue = UrlFetchApp.fetch("https://***.backlog.jp/api/v2/issues?apiKey=*******APIキー*******&projectId[]="+pjid+"&statusId[]=1&statusId[]=2&statusId[]=3&order=&count=100"); 
    
    if (resissue.getResponseCode() != 200) {
        return false;
    }
    var issuelist = JSON.parse(resissue.getContentText());
    
    // 一旦、シートをクリアにする 
    mySS.getSheetByName("**シートの名前**").getRange("A2:G"+issuelist.length+"").clearContent();
   
    for(var i=1; i<issuelist.length; i++) {
      
      // スプレッドシートに書き込む
      range.offset(i, 0).setValue(issuelist[i]["issueKey"]);
      range.offset(i, 1).setValue(issuelist[i]["summary"]);
      range.offset(i, 2).setValue(issuelist[i]["description"]);
      range.offset(i, 3).setValue(issuelist[i]["assignee"]["name"]);
      range.offset(i, 4).setValue(issuelist[i]["priority"]["name"]);
      range.offset(i, 5).setValue(issuelist[i]["status"]["name"]);
      range.offset(i, 6).setValue(issuelist[i]["dueDate"]);
      
      // 投稿するメッセージの本文 
      honbun += issuelist[i]["issueKey"] + "  　";  
      honbun += issuelist[i]["summary"] + "  　";  
      honbun += "担当：" + issuelist[i]["assignee"]["name"] + "  　";
      honbun += "優先度：" + issuelist[i]["priority"]["name"] + "  　";
      honbun += "ステータス：" + issuelist[i]["status"]["name"] + "\n";
      honbun += "https://****.backlog.jp/view/" + issuelist[i]["issueKey"] + "\n[hr]";
      
    }

    //ここからはChatWork
    
    var client = ChatWorkClient.factory({token: "***ChatWorkのAPIキー***"}); 

    /* 決められた記法をもとに整形。
　　　　投稿する部屋のIDと共に
　　　　メッセージを投稿します。*/
    client.sendMessage({ 
      room_id:***room ID***, 
      body: "[info][title]残タスク一覧[/title]\n"+honbun+"\n現在の残タスクになります。完了しているタスクについてはステータスを変更してください。\n [/info]"
    }); 

}

```

#課題の一覧の取得

```
https://***.backlog.jp/api/v2/issues?apiKey=*******APIキー*******&projectId[]="+pjid+"&statusId[]=1&statusId[]=2&statusId[]=3&order=&count=100

```

クエリ `status` は課題の状態なので、完了以外の「未対応（ID:1）」「処理中（ID:2）」「処理済み（ID:3）」を指定。
最後のクエリ　`count`　は取得する件数を指定しています。
ここでは100件。

クエリパラメーターの詳細はコチラで
http://developer.nulab-inc.com/ja/docs/backlog/api/2/get-issues

#<i class="fa fa-book" style="font-size:1em;"></i> ChatWorkClientライブラリの追加


ChatWorkにメッセージ投稿するには、GAS側でChatWorkのClientライブラリを追加する必要があります。

スクリプトエディタの
リソース　> ライブラリ

からライブラリを追加します。プロジェクトキーは以下に記述されています。
https://github.com/cw-shibuya/chatwork-client-gas

**拡張子を「ChatWorkClient」にして下さい。**

あとはスクリプトエディタから時計のようなアイコン（トリガー）で好きな時間でこの関数が実行されるように設定。


#<i class="fa fa-book" style="font-size:1em;"></i> 結果

###スプレッドシート

![spsheet.png](https://qiita-image-store.s3.amazonaws.com/0/67591/2c013da8-48b6-5862-e88b-861bf059dd1f.png)

###ChatWork

![lovewg.png](https://qiita-image-store.s3.amazonaws.com/0/67591/8c7acfd8-bab0-f554-ed4c-6169ca27cff2.png)


GASは面白い