Webサイト発注虎の巻ダウンロード
Webサイト発注虎の巻ダウンロード

Asanaユーザー必見!GASを使用してデータをスプレッドシートに出力する方法

TSUZU

こんにちは。LIG Technologies Vietnam Company Limited(LIGのベトナム支社です)CEOのTSUZUです。

以前、AsanaのデータをGoogleスプレッドシートに出力してグラフを作成する、という記事を書きました。

こちらの記事では、Asanaの画面上でCSV出力し、スプレッドシートに手動でインポートするという方法を紹介しましたが、このやり方だとデータを更新する際に都度手動での作業が発生してしまいます。

こんな面倒な作業、できれば自動化させたいですよね? というわけで、今回はAsana APIとGAS(Google Apps Script)を使用してGoogleスプレッドシートにAsanaのデータを出力したいと思います。

前提条件

前回の記事と重複しますが、下記のようなボードでの運用を想定します。

このボードから、下記のデータを取得するスクリプトを作成しましょう。

  • タスク名
  • ストーリーポイント
  • 完了日

事前準備

出力先のスプレッドシートを作成

適当なスプレッドシートを作成してください。

今回は「KPI管理」というスプレッドシートに「Asana Data」というシートを作成しました。こちらにAsanaのデータを出力しようと思います。

Asanaのアクセストークンを取得

下記のサイトを参考にアクセストークンを取得してください。

【GAS】Asana APIを使ってタスクを取得する

実装

実装内容は下記となります。

// @ts-nocheck
/**
 * Asanaからタスクを取得する
 */
function getAsanaData() {
  // 出力先シートを指定
  const sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('test');

  // シートをクリア
  sheet.clear();

  // スプレッドシートのヘッダー名を指定
  sheet.getRange(1,1).setValue("Task Name");
  sheet.getRange(1,2).setValue("Completed At");
  sheet.getRange(1,3).setValue("Story Point");

  // リクエストオプションを作成
  var options = {
    // GETメソッド
    'method': 'get',
    // JSON形式
    'contentType': 'application/json',
    // ヘッダ
    'headers': { 
      // 認証情報
      'Authorization': 'Bearer ' + 【アクセストークン】
    }
  }  
  // Asana APIを実行しタスクを取得する
  var response = UrlFetchApp.fetch(`https://app.asana.com/api/1.0/projects/【プロジェクトID】/tasks?opt_fields=name,completed_at,custom_fields,memberships,assignee_section`, options);
  
  // 取得結果をJSONパース
  var result = JSON.parse(response);
    // スプレッドシートにAsanaのデータを出力
  if(result.data){
    for(var i = 0; i < result.data.length; i++){
      
      task_name = result.data[i].name
      completed_at = result.data[i].completed_at
      story_point = result.data[i].custom_fields[0].display_value

      sheet.getRange(i+2,1).setValue(task_name);
      
      if (completed_at != null){
        sheet.getRange(i+2,2).setValue(completed_at.substring(0,10));
      }
      
      sheet.getRange(i+2,3).setValue(story_point);
    }
  }
}

出力結果

出力結果は上記の通りです。

トリガーを作成

作成したスクリプトが日次で実行されるようにトリガーを作成します。これでデータが毎朝最新の状態に更新されます。

おわりに

定期的に発生する業務は自動化して大事な業務に集中することで、より生産性の高いプロジェクトにすることができたりします。

プログラムに任せられる作業はどんどん自動化させたいですね。みなさんの参考になれば幸いです。

以上、TSUZUでした。

参考サイト

本記事を執筆するにあたり下記のサイトを参考にさせていただきました。ありがとうございました。