初めてのPython勉強会 タスク管理ツールAsanaをPythonで操作してみた 2026年5月21日(木) まさやん
自己紹介 ⚫ 名前:まさやん ⚫ 仕事:営業支援を行う部門で業務改善 ⚫ ITサービス活用歴 2022年:サイト管理者になったため、SharePoint Online学習 2023年:Power Apps、Power Automateを活用してアプリを展開 2024年:Power Automate for Desktop、Power Apps活用 2025年:BI活用(ETL:Python) 2026年:Power Automate for Desktopの改善提案 @Masayan_power ⚫最近はまっていること マインドフルネス瞑想 (C)XXXXXX INC. All Rights Reserved.
目次 1. Asanaとは • 概要 • Asanaの構成 • 操作のデモ 2. Asana-APIとは • Asana-APIとは • Asanaライブラリ追加(Python) • トークンID取得 • 代表的な関数 • IDの取得 • 操作のデモ (C)XXXXXX INC. All Rights Reserved. 3
注意事項 個人的見解や認識違いが含まれている場合が ありますので、その場合はご指摘ください。 また、資料は26年5月時点の内容になります。 (C)XXXXXX INC. All Rights Reserved.
目次 1. Asanaとは • 概要 • Asanaの構成 • 操作のデモ 2. Asana-APIとは • Asana-APIとは • Asanaライブラリ追加(Python) • トークンID取得 • 代表的な関数 • IDの取得 • 操作のデモ (C)XXXXXX INC. All Rights Reserved. 5
概要 Asanaはタスクやプロジェクトを管理するためのツールです。 ①仕事の見える化ができる。 ②コラボレーションがスムーズ ③進捗管理と改善に繋げやすい。 Power Apps等ローコードツールでカスタムアプリを作らなくても Asanaを使えばタスク管理ができる。 (C)XXXXXX INC. All Rights Reserved. 6
Asanaの構成 5つの構成がAsanaではあります。 階層 GOALS 内容 組織全体やチーム全体の包括的な 優先事項を現す目標を管理 PORTFOLIOS 関連するプロジェクトをグループ化する コンテナ PROJECTS 特定の取り組みに関連する仕事を整理 管理するためのもの TASKS SUBTASKS プロジェクト内の個々のアクションアイテム タスク内の小さな作業単位 Asana の仕組み PROJECTはStarterプラン(有償)から PORTFOLIOS、GOALSはAdvancedプラン(有償)から使用可能 (C)XXXXXX INC. All Rights Reserved. 7
デモします。
目次 1. Asanaとは • 概要 • Asanaの構成 • 操作のデモ 2. Asana-APIとは • Asana-APIとは • Asanaライブラリ追加(Python) • トークンID取得 • 代表的な関数 • IDの取得 • 操作のデモ (C)XXXXXX INC. All Rights Reserved. 9
Asana-APIとは 人がしているAsanaの操作を、プログラムから行う仕組み Asana-API Reference Goals、Portfolilos、Projects、Tasksを発見。 Tasksを展開して、複数タスクを取得する方法とそのPythonコードを確認。 (C)XXXXXX INC. All Rights Reserved. 10
Asanaライブラリ追加(Python) 仮想環境上でpip install asanaと入力してAsanaライブラリをPythonに追加 Pip listでasana 5.2.4が表示されることを確認。 (C)XXXXXX INC. All Rights Reserved. 11
トークンIDを取得 デベロッパーコンソールを表示から、個人アクセストークンを取得 ①ユーザマーク→「 設定」をクリック (C)XXXXXX INC. All Rights Reserved. ②アプリ→デベロッパーコンソール表示 ③トークンを新規作成 →トークン名入力→トークンを作成 12
トークンIDを取得 デベロッパーコンソールを表示から、個人アクセストークンを取得 <Asana APIを呼び出すためのコード4行>※必ず必要 # Asana APIを呼び出すための準備 import asana # Python SDK(python-sdk-5)読込 configuration = asana.Configuration() # API接続設定用のオブジェクト作成 configuration.access_token = '<TOKEN>' # Asanaにアクセスする認証情報設定 api_client = asana.ApiClient(configuration) # HTTP通信を行うクライアント生成 ④トークンの「コピー」ボタンを押下 ⑤<TOKEN>を置換え Visual Code Editorなどを使用してTokenを置き換え (C)XXXXXX INC. All Rights Reserved. 13
代表的な関数(get_tasks_for_project)
get_task_for_project関数…プロジェクトから複数タスクを取り出す
Asana公式ページ
引数
No
第1(必須)
第2(任意)
指定
project_gid
opts
内容
備考
プロジェクトID
プロジェクトIDの取得方法は別途スライドに記載
opt_fields
取得するフィールド※name, gid等
custom_fieldsでカスタムフィールドも取得可能
completed_since
Now または日時(UTC)
Nowで未完了のタスクのみ。指定日時以降に完了したタスク
limit
取得件数※50等
取得する件数
opt_pretty
true または false
trueで適切な改行やインデントを挿入。falseで挿入無し
サンプル
戻り値
# Tasks APIオブジェクト生成
tasks_api = asana.TasksApi(api_client)
# プロジェクトに属するタスクを取得
# 各タスクのnameとgidだけを取り出してtasksに格納
tasks = tasks_api.get_tasks_for_project(
'project_gid
opts={"opt_fields": "name, gid"}
)
tasks = [
{
"gid": "1111111111",
"name": "設計レビュー"
},
{
"gid": "2222222222",
"name": "実装"
},
{
"gid": "3333333333",
"name": "テスト"
}
例:Tasks[0][name]などでアクセス可能。
]
※この場合は、設計レビュー
(C)XXXXXX INC. All Rights Reserved.
14
代表的な関数(update_task)
update_task関数…既に存在するタスクの項目を更新する
No
指定
Asana公式ページ
内容
備考
第1(必須)
data
更新するフィールドと更新内容
※assignee、due_on、noteなどの標準フィールドのほかカスタムフィールド
カスタムフィールドID別途スライド記載
第2(必須)
task_gid
タスクID
タスクIDは別途スライドに記載
第3(任意)
opt_fields
取得するフィールド
通常は{}で省略
# 既存タスクのフィールドとカスタムフィールドを更新
updated_task = tasks_api.update_task(
{ "data": {
"assignee": "charge_ID",
"due_on": "2026-05-21",
"notes": "TeamsトリガーとTeamsアクション学習する",
"custom_fields": {
"Progress_Field_ID": "SingleOptionID",
"Tool_Field_ID": ["MultiOptionID1", " MultiOptionID2"],
"Time_Field_ID": 210,
"Risk_Field_ID": "Python勉強不足",
"Update_Field_ID": {"date": "2026-05-10" },
}}
},task_ID","opt_fields"
)
(C)XXXXXX INC. All Rights Reserved.
15
IDの取得 Asanaには管理する情報(例:タスク)に一意の番号=IDが付いていて Asana-APIではIDを定義する。 プロジェクトには プロジェクトIDが存在 (C)XXXXXX INC. All Rights Reserved. タスクにはタスクIDが存在 選択肢には選択子IDが存在 担当者には担当者IDが存在 カスタムフィールドには カスタムフィールドIDが存在 16
IDの取得(プロジェクトID・タスクID) プロジェクトID、タスクIDはタスクのURLリンクから取得する。 タスクを右クリック タスクのリンクをコピーをクリック URLリンク:https://app.asana.com/1/XXXXXXXXXXXXXXXX/project/XXXXXXXXXXXXXXXX/task/XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXXは数字 (C)XXXXXX INC. All Rights Reserved. プロジェクトID (project/の後) タスクID (task/の後) 17
IDの取得(担当者ID) 担当者IDはプロフィール表示URLから取得する。 URLを確認 丸アイコンにマウス カーソルを合わせる プロフィールを表示を クリック タスクのリンクをコピーをクリック URL:https://app.asana.com/1/XXXXXXXXXXXXXXXX/profile/XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXXは数字 (C)XXXXXX INC. All Rights Reserved. 担当者ID (profile/の後) 18
IDの取得(カスタムフィールドID) カスタムフィールドIDはURLをたたいて取得する。 →ここはPython API内で動的に取得する方法を考えてみます。 URL:https://app.asana.com/api/1.0/tasks/XXXXXXXXXXXXXXXX?opt_fields=custom_fields.gid,custom_fields.name タスクID (tasks/の後) XXXXXXXXXXXXXXXXは数字 プリティプリントにチェック ファイル名を指定して実行に上記URLを入力 gid…カスタムフィールドID Name…タスク名 (C)XXXXXX INC. All Rights Reserved.
IDの取得(カスタムフィールドの選択肢ID) カスタムフィールドの選択肢IDはURLをたたいて取得する。 →ここはPython API内で動的に取得する方法を考えてみます。 URL:https://app.asana.com/api/1.0/tasks/XXXXXXXXXXXXXXXX?opt_fields=custom_fields.name,custom_fields.enum_options XXXXXXXXXXXXXXXXは数字 タスクID (tasks/の 後) プリティプリントにチェック ファイル名を指定して実行に上記URLを入力 gid…カスタムフィールドID Name…タスク名 (C)XXXXXX INC. All Rights Reserved.
デモします。
ご清聴ありがとうございました。