AsanaからDevinにタスクを依頼できるようにしたら見える化が捗った
dotDでプロジェクトマネージャーを担当している立田です。
今回は当社で取り組んでいるAI活用の一例として、タスク管理ツール「Asana」とAIエージェント「Devin」を連携させた自動化の取り組みを紹介します。
きっかけ
当社ではAIエージェントDevinを活用して開発効率の向上、プロセスの改善に取り組んでいます。
そんな中、Devinがプロジェクト管理ツールLinearとの連携を発表しました。
めっちゃ便利そう!!だが我々はAsanaでプロジェクトを管理していて簡単には乗り換えられない...
Asanaが連携するまで待てない!ということで自動化ツールを活用して近い挙動を実現する事にしました。
やりたいことと前提条件
以下が実現したかったことです:
- Asanaに起票したチケットを自動でDevinに処理させる
- Devinの処理結果をAsanaのチケットに自動でコメントさせる
- Linearに近い挙動が実現できたらmore better
実現するための前提条件も決めました:
- 自前でサーバを構築せずに実現できること
- 極力コストがかからないこと
- 短期間で実現できること
- 今回はDevinへ依頼した内容のチェックは行わないこと
実現手段
Slack-Devinの連携処理を活用し、AsanaとSlackを自動化ツールで連携することにしました。
今回はAsanaとSlackのコネクタを持っているMakeを使います。
コネクタを持っている他の自動化ツールでも実現できると思います。
事前に設定しておくこと
連携にあたり事前に設定しておく項目になります。やり方は検索するとすぐ出てくるので難しくないと思います。
- SlackからDevinを呼び出せること
- AsanaのPersonal Access Tokenをmakeに設定している事
- Slackとmakeの連携設定が完了している事
連携の流れ
以下の流れで連携しています:
- Asanaでチケットを作成する
- チケットのタグにDevinと設定するとチケットの内容を自動でSlackに転記
- SlackからDevinを自動で実行
- 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の取得方法はこちらを参照してください
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では常に新しい技術に挑戦し、革新的なプロダクト開発に取り組むエンジニアを募集しています。私たちと一緒にテクノロジーの新たな可能性を探求してみませんか?詳しくは採用ページをご覧ください。
Discussion