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

3 min read読了の目安(約3200字

はじめに

今の会社ではタスク管理ツールとしてAsanaを使っています。
元々チーム内でTrelloを使ってたので、使い勝手としてはその上位互換といった感じです。
※拡張のしやすさで良し悪しはあるかと思いますが。

ただ既存のUIだと「自分が関係しているタスク」や「自分が所属するプロジェクトのタスク」だけを参照するのにちょっと難がある印象です。

そこで今回はAsana APIを利用して「対象のプロジェクト内のタスク」を取得するコードをGASで書いてみた場合の例を紹介したいと思います。

Asanaとは

以下引用

Asana は、小さなタスクから全体像まで、仕事のすべてを整理します。チームが取り組む仕事、それが大切な理由、それを完成させる方法を明確に把握できるようになります。

「カンバン形式」や「リスト形式」「ガンとチャート」など、さまざまなフォーマットでタスクの進捗を管理することができるサービスです。

競合にはTrelloRedmineの他に、最近よくYoutubeの広告を打っているJootoなどが挙げれられます。

Asana APIとは

Asanaが用意してくれているREST APIです。
公式ドキュメントにはSlackとAsanaといった感じで、有名どころのサービスとの連携方法の紹介まで記載があり、非常に親切です。

Asana APIを利用するための準備

続いてAsana APIを利用するための準備をしていきます。
具体的にはAccess Tokenを取得します。

Developer Consoleへアクセス

まず開発者コンソールへAsanaアカウントでアクセスします。
URLは下記の通りです。

メニューの 【個人アクセストークン】 のセクションから 【新規アクセストークン】 を選択します(下図参照)。
※赤で隠れている部分は既に作成してあるトークンなので、初回は表示されません。

asana1

トークン名を聞かれるので、任意の値を入力してください。
【API利用規約に同意します】 にチェックを入れて 【トークンを作成】 を押してください。

asana2

正常にトークンが作成された場合、下記のようにトークンが表示されるのでコピーします。

asana3

これで前準備は完了です。

GASからAsana APIを実行

続いてGASで実装していきます。
エンドポイントはhttps://app.asana.com/api/1.0/projects/【プロジェクトID】/tasksです。

この 「プロジェクトID」 は、Asanaプロジェクトをブラウザで表示させた時にURLに含まれる15桁くらいの数字です。
ここで取得するタスクはあくまで一覧なので、より細かい情報を参照するには別なエンドポイントを利用する必要があります。

もしくは、パラメータとしてopt_filedsを付けることで取得したい項目を指定できます。
今回は「タスク名、期限、最終更新日、完了しているか」を取得するためname,due_on,modified_at,completedを指定します。

リクエストヘッダのAuthorizationに、先ほど取得した 「アクセストークン」 を付けるのを忘れないようにしましょう。

/**
 * Asanaからタスクを取得する
 */
function getAsanaTasks() {
  
  // リクエストオプションを作成
  var options = {
    // GETメソッド
    'method': 'get',
    // JSON形式
    'contentType': 'application/json',
    // ヘッダ
    'headers': { 
      // 認証情報
      'Authorization': 'Bearer ‘ +【アクセストークン】
    },
  }
    
  // Asana APIを実行しタスクを取得する
  // ?opt_fields=でタスク名、期限、最終更新日、完了しているかを指定して取得する
  var response = UrlFetchApp.fetch(`https://app.asana.com/api/1.0/projects/【プロジェクトID】/tasks?opt_fields=name,due_on,modified_at,completed`, options);
  // 取得結果をJSONパース
  var result = JSON.parse(response);

  // 取得結果を配列に格納
  var list = [];  
  if(result.data){
    for(var i = 0; i < result.data.length; i++){
      list.push(result.data[i]);
    }
  }
  
  console.log(list);

  return list;
}

コンソールに取得したデータ(list)が表示されます。
内容は以下のようになっています。

[
  {
    git: "1234567890",
    completed: false,
    due_on: "2020-11-30",
    modified_at: "2020-11-30T00:00:00.000Z",
    name: "タスク①"
  },
  // ...
]

まとめ

今回はタスク管理ツールAsana上のタスクデータをAsana APIを使って取得するGASのコードを紹介しました。
本来はここからあれこれと加工して自チーム内で利用できるようにしています。

Asanaを導入してまだ日が浅いため、十全に使いこなしているとは言い難いですが、今のところ使い勝手も良く、チーム内のタスクを管理する分には一通りの機能が揃っているのではないかなと思います。

今回はAsanaの細かい内容については紹介しなかったので、それはいずれ行いたいと思います。