はじめに
TeamsのAsanaアプリを用いて、チャットやチャネル、会議からAsanaにタスクを追加し、「マイタスク」一覧に表示されるタスクを期日ごとに自動的にセクションへ振り分ける方法を備忘録としてまとめます。
対象読者
以下に、当てはまる方に役立ちます。
- TeamsでAsanaアプリが利用できる方(弊社では申請により利用可能)
- 会社のDLPポリシーの関係で Power Automate のHTTPリクエストやAsanaコネクタが利用できない方
(※Power Automateが利用できる場合は、そちらを使う方が簡単です) - WindowsのタスクスケジューラをDLPポリシーに違反せず利用できる方
実現したいこと
AsanaではTeams経由で追加されたタスクは、常にプロジェクトの一番上のセクション(本稿では「Teamsから作成されたタスク」)に追加されます。
そこで以下のルールで自動振り分けを行います。
- 期日が 今日から2日以内 → 「今日の作業」セクションへ移動
- 期日が 今日から2日以降 → 「明日以降の作業」セクションへ移動
実装の流れ
- Python環境をローカルPC上(例:Cドライブ内)に作成
- タスク情報をGETし、振り分けたいセクションにPUTするHTTPリクエストのスクリプトを記述
- Windowsタスクスケジューラで定期的にPythonスクリプトを実行
必要なアプリ
- コマンドプロンプト
- Asana
- Python(ダウンロードはこちら)
- メモ帳
必要な変数の定義
- PAT(Asanaの個人アクセストークン)
- project_gid(プロジェクトID)
-
section_gid(移動元や移動先のセクションID)
- source_section_gid #移動元セクションID(Teamsから作成されたタスク)
- today_section_gid #移動元セクションID(今日の作業)
- future_section_gid #移動元セクションID(明日以降の作業)
変数の取得方法
PAT(個人アクセストークン)
- Asana開発者コンソール にアクセス
- 「個人アクセストークン」セクションで「+トークンを新規作成」
- トークンに名前(例:
TaskSchedulerIntegration)を付ける - トークンを発行(※一度しか表示されないので必ずコピーして保管)
project_gid(プロジェクトID)
- Asana開発者コンソール の右上からAsanaを起動
- リストから
マイタスクを選択したのちURLを確認https://app.asana.com/1/**************/project/1209********7487/list/1209********7496 - 上記の
1209********7487の部分がproject_gidなので保管
section_gid(セクションID)
-
コマンドプロンプトを開き、以下のコマンドを入力({PAT},{project_gid}は自分で編集)
curl -k -H "Authorization: Bearer {PAT}" https://app.asana.com/api/1.0/projects/{project_gid}/sections -
以下のようなレスポンスを確認したのち、移動元および移動先セクションのgidの値を保管
{ "data": [ { "gid": "1234567890123456", "name": "Teamsから作成されたタスク", "resource_type": "section" }, { "gid": "2345678901234567", "name": "今日の作業", "resource_type": "section" } ] }
Python環境構築
-
コマンドプロンプトでフォルダ内にPythonの仮想環境を構築(フォルダを作成)
python -m venv asana_move -
asana_moveフォルダに移動
cd C:\Users\***\asana_move -
フォルダ内にrequestsライブラリをインストール
pip install requests -
以下のコマンドを入力し、メモ帳でスクリプトファイルを開く
notepad asana_move.py -
以下のファイルをメモ帳に開いて保存
Pythonスクリプト例import requests from datetime import datetime, timedelta, UTC PAT = "自分で編集" # セクションID source_section_gid = "自分で編集" # 移動元のgid(Teamsから作成されたタスク) today_section_gid = "自分で編集" # 移動先のgid(今日の作業) future_section_gid = "自分で編集" # 移動先のgid(明日以降の作業) # APIエンドポイント get_tasks_url = f"https://app.asana.com/api/1.0/sections/{source_section_gid}/tasks?opt_fields=name,due_on" move_today_url = f"https://app.asana.com/api/1.0/sections/{today_section_gid}/addTask" move_future_url = f"https://app.asana.com/api/1.0/sections/{future_section_gid}/addTask" headers = { "Authorization": f"Bearer {PAT}", "Content-Type": "application/json" } today = datetime.now(UTC).date() two_days_later = today + timedelta(days=2) response = requests.get(get_tasks_url, headers=headers) if response.status_code == 200: tasks = response.json().get("data", []) for task in tasks: task_name = task["name"] task_gid = task["gid"] due_on = task.get("due_on") # 判定ロジック if due_on: due_date = datetime.strptime(due_on, "%Y-%m-%d").date() if today <= due_date <= two_days_later: # 今日から2日以内 → 今日の作業 print(f"移動対象: {task_name} (期日: {due_on}) → 今日の作業") move_url = move_today_url else: # 2日以降 → 明日以降の作業 print(f"移動対象: {task_name} (期日: {due_on}) → 明日以降の作業") move_url = move_future_url else: # 期日なし → 今日の作業 print(f"移動対象: {task_name} (期日なし) → 今日の作業") move_url = move_today_url # タスク移動API呼び出し move_response = requests.post(move_url, headers=headers, json={"data": {"task": task_gid}}) if move_response.status_code == 200: print(f"タスク '{task_name}' を移動しました。") else: print(f"移動失敗: {move_response.status_code}, {move_response.text}") else: print(f"エラー: {response.status_code}, 詳細: {response.text}")ここまで完了すればPythonスクリプトの実行で、セクション間でタスクの移動は自動化されている状態なので、Asanaで「Teamsから作成されたタスク」に任意のタスクを作成し、コマンドプロンプトでasana_moveフォルダにいることを確認して、以下のコマンドでPythonスクリプトを実行。
Python3 asana_move.py「タスク '{task_name}' を移動しました。」と表示されれば成功です。
次に、Windowsで自動的にPythonスクリプトが実行されるようにタスクスケジューラに設定を行います。
タスクスケジューラの設定
-
操作タブの「タスクの作成」を選択
-
名前を入力(例:AsanaTaskScheduler)
-
トリガータブで
新規作成を押し、以下のように設定
(例:毎日午前8時50分に起動し、30分ごとに更新)
※更新頻度を多くしすぎるとPCが重くなるので注意

-
操作タブで
新規作成を押し、以下のように設定- 操作
プログラムの開始 - プログラム/スクリプト
C:\Users\***\AppData\Local\Microsoft\WindowsApps\pythonw.exe
(pythonw.exeは、ウィンドウを開かずに実行するため) - 引数の追加(オプション)
C:\Users\***\asana_move\asana_move.py
- 操作
-
完了をクリック
お疲れさまでした。
これで毎日指定時間にPythonスクリプトが実行され、タスクが自動的に振り分けられます。
まとめ
• Teamsから追加されたタスクはAsanaの最上位セクションに入る仕様
• Python+Asana API+Windowsタスクスケジューラを組み合わせることで、期日ごとに自動振り分け可能
• Power Automateが使えない環境でも、ローカルPCで簡易的に自動化できる
この方法を応用すれば、さらに細かいルール(例:担当者別、タグ別)での振り分けも可能です。




