みなさん、こんにちは!うえはら(@tifoso_str)です。
今回のシリーズでは、Google Apps ScriptでTrelloのAPIを利用して、1ヶ月の執筆数をメンバーごとに集計することを目標にしています。
その中で、前回は、Trelloのボードに登録しているメンバー情報を取り出す方法を紹介しました。
前回と前々回でカード情報とメンバー情報を取得していますので、今回はこれらの情報を元にTrelloのリストにある担当カードの数を集計する方法をお伝えします。
前回の復習
まずはカード情報とメンバー情報がどのような形で返ってくるか復習します。
カード情報は下記のように1つのカードの担当者と期限が対となって、それが纏まった2次元配列の形をしています。
[[idMembers,due],[idMembers,due],[idMembers,due],・・・・] (カード1) , (カード2) , (カード3) ,・・・・
メンバー情報は下記のように、メンバーIDと氏名で別々の配列を合せて2次元配列にした形になっています。
[[idMembers,idMembers,idMembers,idMembers],[fullname,fullname,fullname,fullname]]
これらの情報を元に、Trelloの特定のリストにあるカードの担当者を集計していきます。
メンバー毎に集計する方法
スクリプトの解説の前に集計する方法をお伝えします。
まず、集計用にメンバーIDをKEY、カウント(執筆)数を値としたオブジェクトを作成します。
次に、カード情報配列に入っている、各カードのメンバーIDを取り出します。
取り出したメンバーIDを元に、集計用のオブジェクトのKEYを特定して、メンバーの執筆数を「+1」します。
これをカードの数だけ繰り返すことで集計できます。
メンバーIDをKEYとするオブジェクトの作成
それでは、実際のスクリプトについて解説していきます。
まず、下記二つのオブジェクトを作成する部分です。
- メンバー情報を元にメンバーIDをKEY、氏名を値としたオブジェクト
- 集計用にメンバーIDをKEY、カウント(執筆)数を値としたオブジェクト
function trelloMain(){ var scriptProperties = PropertiesService.getScriptProperties(); const Trello_KEY = scriptProperties.getProperty('Trello_KEY'); const Trello_TOKEN = scriptProperties.getProperty('Trello_TOKEN'); const BOARD_ID = scriptProperties.getProperty('BOARD_ID'); const LIST_ID = scriptProperties.getProperty('LIST_ID'); var members = getBoardMembers(Trello_KEY,Trello_TOKEN,BOARD_ID); //ボードのメンバー取得 var membersId = members[0]; var membersFullName=members[1]; var objMembers = {}; //メンバーIDをキー、氏名を値とするオブジェクト作成 var objCounter={}; //メンバーIDをキー、執筆数を値とするオブジェクト作成 for (var i=0; i<membersId.length;i++){ var memberId = membersId[i]; objMembers[memberId] = membersFullName[i]; objCounter[memberId] = 0; } }
オブジェクトを作成するときは波括弧({})でくくります。
オブジェクトにプロパティを追加するときは下記のようになります。
16行目でKEY:メンバーID,Value:氏名のオブジェクトを追加し、17行目でKEY:メンバーID,Value:0のオブジェクトを追加しています。
カード情報とメンバー情報の配列を元に、集計用の配列を操作する
次は今回のメインとなるこの部分です。
スクリプトは下記のようになります。
//カードのメンバーを検索して集計用に足して行く var cards = getCards(Trello_KEY,Trello_TOKEN,LIST_ID); //カード取得 for (i=0;i<cards.length;i++){ var card = cards[i]; //カードを1枚ずつ取り出し var idmember = card[0]; //カードのメンバーIDを取り出し objCounter[idmember] ++; //カウンターの該当するメンバーIDの値を+1 }
メインの部分ですが、スクリプトはシンプルですね。
7行目でobjCounterの該当のKEY:メンバーIDをさがして、Valueを「+1」しています。
5~7行目は下記のようにまとめて書くこともできますので、さらにシンプルになりますね。
objCounter[cards[i][0]] ++;
スプレッドシート転記用の配列作成
最後にスプレッドシートに一度で書き込む為の配列を作成します。
//スプレッドシート書き出し用の配列作成 var monthAchieve=[]; for (var key in objCounter) { if (objCounter[key]){ //執筆数が「0」は除く monthAchieve.push([key,objMembers[key],objCounter[key]]); } }
オブジェクトの全てのプロパティに対して、繰り返し処理するときはfor…in文を使用します。
//ループ内で実行する処理
}
ブログの執筆が無かった場合は記録しないようにするので、カウンター配列の値が「0」のときを除いています。
これで、「メンバーID、氏名、執筆数」の順でmonthAchieve配列に追加されました。
まとめ
今回のスクリプトをまとめると、下記のようになります。
function trelloMain(){ var scriptProperties = PropertiesService.getScriptProperties(); const Trello_KEY = scriptProperties.getProperty('Trello_KEY'); const Trello_TOKEN = scriptProperties.getProperty('Trello_TOKEN'); const BOARD_ID = scriptProperties.getProperty('BOARD_ID'); const LIST_ID = scriptProperties.getProperty('LIST_ID'); var members = getBoardMembers(Trello_KEY,Trello_TOKEN,BOARD_ID); //ボードのメンバー取得 var membersId = members[0]; var membersFullName=members[1]; var objMembers = {}; //メンバーIDをキー、氏名を値とするオブジェクト作成 var objCounter={}; //メンバーIDをキー、執筆数を値とするオブジェクト作成 for (var i=0; i<membersId.length;i++){ var memberId = membersId[i]; objMembers[memberId] = membersFullName[i]; objCounter[memberId] = 0; } //カードのメンバーを検索して集計用に足して行く var cards = getCards(Trello_KEY,Trello_TOKEN,LIST_ID); //カード取得 for (i=0;i<cards.length;i++){ var card = cards[i]; //カードを1枚ずつ取り出し var idmember = card[0]; //カードのメンバーIDを取り出し objCounter[idmember] ++; //カウンターの該当するメンバーIDの値を+1 } //スプレッドシート書き出し用の配列作成 var monthAchieve=[]; for (var key in objCounter) { if (objCounter[key]){ //執筆数が「0」は除く monthAchieve.push([key,objMembers[key],objCounter[key]]); } } }
今回は、Google Apps ScriptでTrelloのリストにある担当カードの数を集計する方法をお伝えしました。
これで、特定のリストにあるカードの担当者ごとの集計ができますが、期日に関係なく集計されています。
今回のシリーズでは、1ヶ月の執筆数を集計するので、次回は期限の条件を追加してスプレッドシートに転記する部分をお伝えします。
最後までありがとうございました!