ADVERTISEMENT

【Googleスプレッドシート】Asanaのタスクを同期!プロジェクト連携の手順

【Googleスプレッドシート】Asanaのタスクを同期!プロジェクト連携の手順
🛡️ 超解決

Asanaで管理しているタスクをGoogleスプレッドシートでも確認したいと思ったことはありませんか。特にチームメンバーがスプレッドシートを共有している場合、Asanaの更新を自動で反映できれば便利です。この記事では、Google Apps Scriptを使ってAsanaのタスクをスプレッドシートに自動同期する方法を詳しく解説します。

手順を実践すれば、Asanaのプロジェクトタスクをスプレッドシートに一覧表示し、最新の状態に保つことができます。非エンジニアの方でも、コピー&ペーストでスクリプトを設定できるように説明します。

【要点】Asanaとスプレッドシートを自動連携する3つのポイント

  • Apps Scriptのカスタム関数: Google Apps ScriptでAsana APIを呼び出し、タスクデータを取得してスプレッドシートに書き込む自動化を実現します。
  • トリガーの定期実行: スクリプトに時間主導型トリガーを設定することで、決まった時間に自動でデータを同期し、手動更新の手間を省きます。
  • ヘッダー行の固定と列マッピング: タスク名、担当者、期限日などの列をあらかじめ定義し、同期時のデータが正しく並ぶようにします。

ADVERTISEMENT

Asanaとスプレッドシートを連携する仕組み

Asanaのタスクをスプレッドシートに同期するには、主に3つの方法があります。手動でCSVエクスポート・インポートする方法、ZapierやWorkatoなどの連携ツールを使う方法、そしてGoogle Apps Scriptで直接APIを呼び出す方法です。この記事では、費用をかけずにカスタマイズ性の高いApps Scriptを使った方法を採用します。

Apps Scriptはスプレッドシートに組み込まれたスクリプト環境で、AsanaのREST APIと通信できます。APIトークンを発行し、特定のプロジェクトのタスクをJSONで取得した後、スプレッドシートのセルに書き出します。トリガーを使えば、1時間ごとや毎朝9時など、好きな間隔で自動実行できます。

Asanaタスクをスプレッドシートに同期する手順

以下では、Google Apps Scriptを使ってAsanaのタスクをスプレッドシートに自動同期する具体的な手順を説明します。スクリプトの作成からトリガー設定まで、ステップごとに進めてください。

ステップ1: AsanaのAPIトークンを取得する

  1. Asanaにログインして個人設定を開く
    Asanaの右上のプロフィールアイコンをクリックし、「マイプロフィール」を選択します。次に「アプリ」タブを開き、「個人アクセストークン」の項目で「新しいトークンを生成」をクリックします。
  2. トークンに名前を付けてコピーする
    任意の名前(例: GoogleSheetsSync)を入力し、生成されたトークンを必ずコピーして安全な場所に保存します。このトークンは一度閉じると再表示できません。

ステップ2: プロジェクトのGIDを確認する

  1. 同期したいプロジェクトを開く
    Asana上で、タスクを取得したいプロジェクトを開きます。ブラウザのアドレスバーに表示されるURLの末尾に、プロジェクトのGID(数値)が含まれています。例えば「https://app.asana.com/0/1234567890123456/board」の場合、GIDは「1234567890123456」です。
  2. プロジェクトGIDをメモする
    この数値を後でスクリプトで使用するため、メモしておきます。

ステップ3: スプレッドシートにスクリプトを追加する

  1. スプレッドシートを開き、拡張機能メニューからApps Scriptを開く
    Googleスプレッドシートで新しいシートを作成し、メニューの「拡張機能」→「Apps Script」をクリックします。エディタが新しいタブで開きます。
  2. プロジェクトに名前を付ける
    左上の「無題のプロジェクト」をクリックして、例えば「AsanaSync」と名前を変更します。

ステップ4: スクリプトコードを記述する

  1. コード.gsにサンプルコードを貼り付ける
    デフォルトのコードをすべて削除し、以下のコードをコピー&ペーストします。ただし、ASANA_TOKENPROJECT_GIDSHEET_NAMEは各自の値に書き換えてください。
    function syncAsanaTasks() {
      var token = 'ASANA_TOKEN'; // 取得したAPIトークン
      var projectGid = 'PROJECT_GID'; // プロジェクトのGID
      var sheetName = 'タスク一覧'; // 書き込み先のシート名
      
      var url = 'https://app.asana.com/api/1.0/projects/' + projectGid + '/tasks?opt_fields=name,assignee,due_on,completed';
      var options = {
        'method': 'get',
        'headers': {'Authorization': 'Bearer ' + token}
      };
      
      var response = UrlFetchApp.fetch(url, options);
      var json = JSON.parse(response.getContentText());
      var tasks = json.data;
      
      var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(sheetName);
      if (!sheet) {
        sheet = SpreadsheetApp.getActiveSpreadsheet().insertSheet(sheetName);
      }
      
      // ヘッダー行を設定
      var headers = ['タスク名', '担当者', '期限日', '完了状態'];
      sheet.clear();
      sheet.appendRow(headers);
      
      // 各タスクを行に追加
      for (var i = 0; i < tasks.length; i++) {
        var task = tasks[i];
        var name = task.name;
        var assignee = task.assignee ? task.assignee.name : '';
        var dueOn = task.due_on || '';
        var completed = task.completed ? '完了' : '未完了';
        sheet.appendRow([name, assignee, dueOn, completed]);
      }
    }
  2. コードの各変数を実際の値に書き換える
    「ASANA_TOKEN」を手順1で取得したトークンに、「PROJECT_GID」を手順2でメモした数値に、「タスク一覧」を出力したいシート名に変更します。シート名は英数字でも日本語でも構いません。
  3. スクリプトを保存する
    Ctrl+S(またはCmd+S)で保存します。初回はプロジェクト名を聞かれますが、そのまま保存してください。

ステップ5: スクリプトを実行する

  1. 関数を選択して実行する
    エディタ上部の関数ドロップダウンから「syncAsanaTasks」を選択し、再生ボタン(▶)をクリックします。初回は権限承認の画面が表示されます。「許可を確認」をクリックし、自分のGoogleアカウントを選択して「許可」をクリックします。このスクリプトはスプレッドシートと外部サービス(Asana)へのアクセスを要求します。
  2. 実行結果を確認する
    承認が完了するとスクリプトが実行され、スプレッドシートに「タスク一覧」シートが作成され、Asanaのタスクが一覧表示されます。エラーが出た場合は、コード内のトークンやGIDが正しいか、またAsana APIの制限(リクエスト数)に引っかかっていないか確認してください。

ステップ6: 自動実行のトリガーを設定する

  1. Apps Scriptエディタでトリガーを開く
    左側の時計アイコン(トリガー)をクリックし、「トリガーを追加」をクリックします。
  2. トリガーの条件を設定する
    「実行する関数」で「syncAsanaTasks」を選択します。「時間主導型」を選び、例えば「時間ベースのタイマー」で「1時間おき」など好みの間隔を指定します。または「日付ベースのタイマー」で毎朝9時などに設定できます。
  3. 保存する
    「保存」をクリックします。初回は再度承認が必要な場合があります。これで、設定した頻度で自動的にタスクが同期されるようになります。

同期時の注意点とよくあるトラブル

APIのレート制限に達してしまう

Asana APIには1分あたりのリクエスト数に制限があります。プロジェクトに非常に多くのタスクがある場合、一度のリクエストで全件取得できないことがあります。その場合は、opt_fieldsで取得する項目を最小限に絞るか、ページネーション処理を追加して複数回に分けて取得する必要があります。

タスクの追加・更新が反映されない

このスクリプトは実行時のスナップショットを取得するため、Asana上でタスクが更新されても次回のスクリプト実行まで反映されません。トリガーの間隔を短くすることで、よりリアルタイムに近づけられます。また、スクリプト内で既存行をクリアしているため、手動で追加した行は消えてしまうので注意してください。

担当者名が取得できない

コードではassignee.nameで担当者名を取得していますが、タスクに担当者が未設定の場合はエラーになります。assignee ? assignee.name : '' のように、nullチェックを行っているので問題ありません。ただし、担当者が削除されたユーザーの場合、assignee.nameが空文字になる可能性があります。

ADVERTISEMENT

連携方法の比較

連携方法 費用 自動化の可否 カスタマイズ性
手動CSVエクスポート 無料 不可 低い
Zapierなどの連携ツール 月額課金(無料枠あり) 中程度
Google Apps Script 無料 可(トリガー設定) 高い

手動エクスポートは最も簡単ですが、最新状態を保つのが難しいです。Zapierなどのツールは設定が簡単でノーコードですが、コストがかかります。Apps Scriptは無料で柔軟性が高く、今回はこちらを採用しました。ただし、スクリプトの知識が少し必要です。

まとめ

この記事では、Google Apps Scriptを使ってAsanaのタスクをGoogleスプレッドシートに自動同期する手順を解説しました。Asana APIトークンの取得から、スクリプトの記述、トリガーによる定期実行までの流れを理解できたはずです。この仕組みを応用すれば、担当者ごとのシートに振り分けたり、完了タスクを別シートに移動するなどのカスタマイズも可能です。まずはサンプルコードをそのまま使って、同期の動作を確認してみてください。


ADVERTISEMENT

この記事の監修者
✍️

超解決 第一編集部

疑問解決ポータル「超解決」の編集チーム。正確な検証と、現場視点での伝わりやすい解説を心がけています。