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トークンを取得する
- Asanaにログインして個人設定を開く
Asanaの右上のプロフィールアイコンをクリックし、「マイプロフィール」を選択します。次に「アプリ」タブを開き、「個人アクセストークン」の項目で「新しいトークンを生成」をクリックします。 - トークンに名前を付けてコピーする
任意の名前(例: GoogleSheetsSync)を入力し、生成されたトークンを必ずコピーして安全な場所に保存します。このトークンは一度閉じると再表示できません。
ステップ2: プロジェクトのGIDを確認する
- 同期したいプロジェクトを開く
Asana上で、タスクを取得したいプロジェクトを開きます。ブラウザのアドレスバーに表示されるURLの末尾に、プロジェクトのGID(数値)が含まれています。例えば「https://app.asana.com/0/1234567890123456/board」の場合、GIDは「1234567890123456」です。 - プロジェクトGIDをメモする
この数値を後でスクリプトで使用するため、メモしておきます。
ステップ3: スプレッドシートにスクリプトを追加する
- スプレッドシートを開き、拡張機能メニューからApps Scriptを開く
Googleスプレッドシートで新しいシートを作成し、メニューの「拡張機能」→「Apps Script」をクリックします。エディタが新しいタブで開きます。 - プロジェクトに名前を付ける
左上の「無題のプロジェクト」をクリックして、例えば「AsanaSync」と名前を変更します。
ステップ4: スクリプトコードを記述する
- コード.gsにサンプルコードを貼り付ける
デフォルトのコードをすべて削除し、以下のコードをコピー&ペーストします。ただし、ASANA_TOKEN、PROJECT_GID、SHEET_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]); } } - コードの各変数を実際の値に書き換える
「ASANA_TOKEN」を手順1で取得したトークンに、「PROJECT_GID」を手順2でメモした数値に、「タスク一覧」を出力したいシート名に変更します。シート名は英数字でも日本語でも構いません。 - スクリプトを保存する
Ctrl+S(またはCmd+S)で保存します。初回はプロジェクト名を聞かれますが、そのまま保存してください。
ステップ5: スクリプトを実行する
- 関数を選択して実行する
エディタ上部の関数ドロップダウンから「syncAsanaTasks」を選択し、再生ボタン(▶)をクリックします。初回は権限承認の画面が表示されます。「許可を確認」をクリックし、自分のGoogleアカウントを選択して「許可」をクリックします。このスクリプトはスプレッドシートと外部サービス(Asana)へのアクセスを要求します。 - 実行結果を確認する
承認が完了するとスクリプトが実行され、スプレッドシートに「タスク一覧」シートが作成され、Asanaのタスクが一覧表示されます。エラーが出た場合は、コード内のトークンやGIDが正しいか、またAsana APIの制限(リクエスト数)に引っかかっていないか確認してください。
ステップ6: 自動実行のトリガーを設定する
- Apps Scriptエディタでトリガーを開く
左側の時計アイコン(トリガー)をクリックし、「トリガーを追加」をクリックします。 - トリガーの条件を設定する
「実行する関数」で「syncAsanaTasks」を選択します。「時間主導型」を選び、例えば「時間ベースのタイマー」で「1時間おき」など好みの間隔を指定します。または「日付ベースのタイマー」で毎朝9時などに設定できます。 - 保存する
「保存」をクリックします。初回は再度承認が必要な場合があります。これで、設定した頻度で自動的にタスクが同期されるようになります。
同期時の注意点とよくあるトラブル
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
超解決 第一編集部
疑問解決ポータル「超解決」の編集チーム。正確な検証と、現場視点での伝わりやすい解説を心がけています。
Googleスプレッドシートの人気記事ランキング
- 【Googleスプレッドシート】GOOGLEFINANCE関数で株価・為替を取得!リアルタイムデータの呼び出し
- 【Googleスプレッドシート】印刷範囲を指定して印刷!特定範囲だけPDFや紙に出す手順
- 【Googleスプレッドシート】新しいスプレッドシートを作成する3つの方法!ドライブ・URL・テンプレート
- 【Googleスプレッドシート】数値の連続データを自動入力!オートフィルの活用
- 【Googleスプレッドシート】ダークモードを有効にする!目に優しい配色への切替
- 【Googleスプレッドシート】株価APIで株式データを自動取得!GOOGLEFINANCE超え活用
- 【Googleスプレッドシート】共有相手が編集できない時のチェック!権限と許可状態の確認
- 【Googleスプレッドシート】ページ設定で用紙サイズと向きを調整!印刷レイアウトの基本
- 【Googleスプレッドシート】Excelファイルxlsxをインポートする手順!ドラッグ&ドロップで取り込み
- 【Googleスプレッドシート】条件付き書式をコピーする!書式のみペーストの活用
