😆

AsanaからDevinにタスクを依頼できるようにしたら見える化が捗った

に公開

dotDでプロジェクトマネージャーを担当している立田です。
今回は当社で取り組んでいるAI活用の一例として、タスク管理ツール「Asana」とAIエージェント「Devin」を連携させた自動化の取り組みを紹介します。

きっかけ

当社ではAIエージェントDevinを活用して開発効率の向上、プロセスの改善に取り組んでいます。
そんな中、Devinがプロジェクト管理ツールLinearとの連携を発表しました。

https://x.com/cognition_labs/status/1909655681072087456

めっちゃ便利そう!!だが我々はAsanaでプロジェクトを管理していて簡単には乗り換えられない...
Asanaが連携するまで待てない!ということで自動化ツールを活用して近い挙動を実現する事にしました。

やりたいことと前提条件

以下が実現したかったことです:

  • Asanaに起票したチケットを自動でDevinに処理させる
  • Devinの処理結果をAsanaのチケットに自動でコメントさせる
  • Linearに近い挙動が実現できたらmore better

実現するための前提条件も決めました:

  • 自前でサーバを構築せずに実現できること
  • 極力コストがかからないこと
  • 短期間で実現できること
  • 今回はDevinへ依頼した内容のチェックは行わないこと

実現手段

Slack-Devinの連携処理を活用し、AsanaとSlackを自動化ツールで連携することにしました。
今回はAsanaとSlackのコネクタを持っているMakeを使います。
https://www.make.com/en

コネクタを持っている他の自動化ツールでも実現できると思います。

事前に設定しておくこと

連携にあたり事前に設定しておく項目になります。やり方は検索するとすぐ出てくるので難しくないと思います。

  • SlackからDevinを呼び出せること
  • AsanaのPersonal Access Tokenをmakeに設定している事
  • Slackとmakeの連携設定が完了している事

連携の流れ

以下の流れで連携しています:

  1. Asanaでチケットを作成する
  2. チケットのタグにDevinと設定するとチケットの内容を自動でSlackに転記
  3. SlackからDevinを自動で実行
  4. Devinの実行結果が記載されたSlack返信リストを取得し、Asanaのコメントに自動で追記

Linearに近づけるためにAsanaのタグ機能を使ってみました。

実装概要

自動化の流れは次のとおりです:

  • Asanaで「devin」タグを付けたタスクを作成
  • Make.comがAsanaのタスク更新を監視
  • 新規タスクを検出するとSlackでDevinに指示を送信
  • Devinがタスクを処理(例:コードレビュー、環境設定など)
  • Devinの処理結果をSlackで受け取り
  • Make.comが処理結果をAsanaのタスクにコメントとして記録

やってみた

Make.comでの具体的な設定は以下の通りです。キャプチャを貼るので参考にしてください(一部モザイクをかけています):

Makeの設定

1.Asana: Watch Tasks or Subtasks

特定のAsanaプロジェクト、セクション内で「devin」タグが付いたタスクを監視

項目
Watch Modified Tasks
Resource Subtype Default Task
Workspace 所属している組織
Project 監視するAsanaプロジェクト
Sections 監視するAsanaセクション
Tags 監視するタグ

2.Slack: Create a Message

タグが付いたタスク情報をDevinと連携するSlackチャネルに整形して通知
Devinを呼び出すためにDevinのSlackユーザーメンションに追加します

項目
Enter a channel ID or name Select from the list
Channel type Public channel
Public channel 投稿するslackチャネル名
Text 以下参照
<@user_id>
*新しいタスクが割り当てられました*
*Task ID:* {{1.gid}}
*Task Name:* {{1.name}}
*Notes:* {{1.notes}}
*Due :* {{1.due_date}}
👉 <{{1.permalink_url}}|Asanaで表示>

SlackのユーザーIDの取得方法はこちらを参照してください
https://zenn.dev/shown_it/articles/4fdec84cba4034

3.Tools: Sleep

Devinの処理が完了するまで待機します。Make.comでは最長180秒までしか設定できないので最大値を入力します

項目
Delay 180

4.Slack: List Replies

DevinがSlackにポストしたメッセージのリストを取得します

項目
Channel type Public channel
Public channel 投稿するslackチャネル名
Parent message ID 2で投稿したSlack MessageのTimestampを指定
Limit 10

5.Filter

Slackの返答内容からAsanaに記載が不要なメッセージを除外します

項目
Label 任意の名称
Condition 4で取得したSlackのTextを指定
Text operations Does not contain (case insensitive)
TEXT SLEEP

今回例はDevinが処理を完了させた時に出力するメッセージを除外対象に加えます。

Devin is awaiting your response. Type 'SLEEP' to put Devin to sleep. Devin will auto-sleep in 30 minutes.

6.Asana: Add a Story Comment

Slackの返信リスとをAsanaタスクのコメントとして記載します

項目
Enter a Task ID Enter manually
Task ID 1で取得したAsanaのTask IDを指定
Comment 4で取得したSlackのTextを指定

実行結果

Asanaの出力結果を添付します (プロジェクト固有の情報を含むため、モザイクが多くてすみません)。

導入の効果

まだ試験段階ではありますが、以下のような効果を実感しています:

  • タスクの見える化: 人間とDevinの進捗をAsanaで管理できることで、よりDevinを1エンジニアとして扱えるようになりました(気分的に)
  • ナレッジ蓄積: Asanaに情報が集約されることで情報が分散しなくなりました
  • 外部SlackユーザーがDevinを使えるようになった: Slack Connectで接続している外部のメンバーはSlackからDevinを呼び出せず、Web経由で直接呼び出すしかなかったのですが、Asanaから利用可能になりました

現状の課題

一方でいくつかの課題も見えてきました:

  • Asanaのチケットを更新するたびにDevinを呼んでしまう
  • Devinの処理が180秒以上かかると処理の完了を待たずに処理が進んでしまう
  • 同一のAsanaチケット内でDevinに追加の指示を出せない
  • Make.comの無料版は月1000回(インテグレーション数は2つ) の実行制限がある

Devinにはどんどん複雑な処理を任せたいので、180秒の待機時間は実用性で問題がありそうです。
異なるツールも含めて改善できればと考えます。
その前にAsanaがDevinに正式対応するのが先だったりして。

終わりに

当社ではdotDでは常に新しい技術に挑戦し、革新的なプロダクト開発に取り組むエンジニアを募集しています。私たちと一緒にテクノロジーの新たな可能性を探求してみませんか?詳しくは採用ページをご覧ください。

https://hrmos.co/pages/dotd/jobs/0000004

https://hrmos.co/pages/dotd/jobs/0000002

https://hrmos.co/pages/dotd/jobs/0000003

https://dotd-inc.com/

dotD Tech Blog

Discussion