Trelloの標準自動化ツール「Butler」を「Microsoft Power Automate」で代替してButlerの月間実行回数上限を回避するまでの顛末

タスク管理ツール[Trello](https://trello.com/home)で、標準のワークフロー自動化ツール[Butler](https://blog.trello.com/butler-power-up-trello-automation)による自動処理の実行を設定したところ、実行回数が月間の上限に早々に達してしまい、そうなると翌月までButlerの自動処理が使えなくなるということが判明したので、この回避方法を検討した結果、Butlerの代替機能として「Microsoft Power Automate」を導入するに至った際のメモ。

## 発端となった事象

TrelloでButlerの機能を利用してルールやカレンダーコマンドをいくつか設定し、ワークフローの自動化を行っていた。

- 設定していたルール
  - "Ready"リストにメール受信によりカードが作成されたら、"受信メール"ラベルを付与する
  - "ブログ"リストにカードが作成されたら、"ブログ"ラベルを付与する
  - カードがボードに作成されたら、タイトルに本日日付をプレフィクスとして付与する。
![image.png](https://image.docbase.io/uploads/d6d48861-3cf0-4bd2-8add-1eedd50f1f0b.png)

- 設定していたカレンダーコマンド
  - 毎日12:00amにタイトルが本日日付の空のリストを作成する
![image.png](https://image.docbase.io/uploads/bdde54a3-5ba1-471a-8166-d9e774d7506f.png)

しかしある時点から、トリガーを満たす操作がTrelloのボード上で行われたにも関わらず、上記のButlerコマンドが動作しなくなってしまった。

## Butlerが動作しなくった原因を調査する

事象が発生したボード上の[Butler]ボタンを良く見ると「！」マークが付いている。
![image.png](https://image.docbase.io/uploads/33e23515-1b09-4f3a-95c6-6f64f8d7753a.png)

ボタンをクリックしてButler画面を開くと何やら注意文のようなものが出ている。
![image.png](https://image.docbase.io/uploads/b2098dfa-63e2-44bd-9b77-92b0ab56fe17.png)

>  The command run quota for your current plan has been reached. Open account details

「あなたのプランのコマンド実行クォータは上限に達しました。」とある。

[Open account details]からリンクを開いてみると、以下のような画面が表示された。
![image.png](https://image.docbase.io/uploads/2978fb8d-432b-4f1c-978f-be15d58579c8.png)

かんたんに訳してみると、

> Butler will use your personal quota for your automations running on this board.

「Butlerはあなた個人の自動実行のクォータを消費します。」

> Butler uses your personal quota for boards that are not part of an enterprise or business class team of which you're a member.

「あなたが所属する"enterpriseや"business class"のチームに属さないボードでは、Butlerはあなた個人のクォータを消費します。」

> If you are part of an enterprise or business class team, you can move this board into it to use the organization's pooled quotas.

「もしあなたが"enterpriseや"business class"のチームのメンバーなら、このボードをそのチームに加えることにより組織のプールクォータを利用することができます。」

> Your personal quota is 200 command runs and 2000 operations. You've used 200 command runs (100%) and 226 operations (11%) so far this period.

「あなた個人のクォータは200回のコマンド実行と2000回の操作です。あなたはこれまでに200回のコマンド実行（100％）と226回の操作（11％）を使用しました。」

> Your account has reached the number of command runs allowed within its quota for the period.

「あなたのアカウントは、期間中のクォータ内で許可されているコマンド実行回数に達しました。」

とのこと。

また、上記画面内のリンクから[Butlerの機能と上限](https://help.trello.com/article/1181-butler-features-and-quotas)を開くと下記のようなアカウントタイプごとのクォータ一覧が見て取れた。
![image.png](https://image.docbase.io/uploads/bdd924bd-52cd-46f0-bb7a-2675b6e14099.png )

要するに、わたしのアカウントのタイプは**個人**（Trello Goldユーザー）なので「ひと月あたりのコマンド実行数」には「200回」という上限があり、今回はこれに抵触したためButlerが突然動作しなくなったことが原因のようだ。

## 回避策の検討

現在のButlerの使い方では月間の実行回数は200回を必ず超えてしまう。しかしTrelloを効果的に活用するために自動化をやめるわけにはいかないため、以下のいずれかの方法によりこの上限の抵触を回避する必要がある。

- 1. アカウントをアップグレードする
- 2. Butlerの機能を使わずに自動化処理を行う

ここではそれぞれの方法での回避方法を検討してみる。

###  「1. アカウントをアップグレードする」方法の検討

先程も確認した[Butlerの機能と上限](https://help.trello.com/article/1181-butler-features-and-quotas)によれば、「ユーザーあたり」の「ひと月あたりのコマンド実行数」はBusiness Classが200、Enterpriseが無制限とのこと。今回は200回の上限をオーバーしてしまったので、Enterpriseオプションが使えないか検討してみる。

#### Enterpriseは一般ユーザーが使えるのか

[価格ページ](https://trello.com/ja/pricing)でオプションごとの価格を見てみる。
![image.png](https://image.docbase.io/uploads/21f0680d-af18-4af8-b698-122c066aaadf.png)

一瞬、ユーザー当たり月額「＄2083」に見えて目玉が飛び出そうになりまったが、良く見ると「$20.83」だった。

そして[Trello Enterpriseページ](https://trello.com/ja/enterprise)で料金の詳細を見てみると、最低利用人数は20人で、
![image.png](https://image.docbase.io/uploads/0899395f-6b5b-4518-9467-b4bc4556c151.png)

それ以下の人数では利用ができないようだ。
![image.png](https://image.docbase.io/uploads/c0825d45-d818-4244-9e1c-2474157bf91d.png)

20人分のEnterpriseオプション（年額$5,000）を契約してまで、ひと月あたりのコマンド実行数を無制限にするのはさすがに割にあわないので、「1. アカウントをアップグレードする」方法の採用はやめておいた。

### 「2. Butlerの機能を使わずに自動化処理を行う」方法の検討

Butlerの代替として利用できそうなTrelloの処理を自動化する機能をいくつか探してみた。

ちなみに、わたしがButlerで自動化していた処理はTrelloボード上での操作（カード作成など）をトリガーにしたものであるため、代替機能も何らかの方法でその操作を検知し、検知されたカードに対して処理を行う仕組みが実現できる必要がある。

#### 代替方法その1. Webhook

Trello公式で提供しているREST API機能の一つとして「Webhook」が利用できる。

- TRELLO REST API [Webhooks](https://developers.trello.com/reference#webhooks)
![image.png](https://image.docbase.io/uploads/e8df3223-d640-4fc7-8659-a4ca03fab925.png)

- [Webhooks](https://developers.trello.com/page/webhooks)
> Webhooks provide a way for application developers to receive notifications when a model changes. Although webhooks are only accessible through the API currently, we hope that developers working on third party apps for Trello find them as useful as we do.

このWebhookを利用すれば、以下のような感じで自動化処理を実装できそう。

1. Trelloのボード上でトリガーとなる処理（カード作成など）が行われる
2. TrelloのWebhookに登録したエンドポイントにコールバックが行われる
3. コールバック先のシステム（AWS Lambda）などからTrelloのAPIを利用して自動化したい処理を行う

参考になりそうな例もちらほらある。

- [Webhook APIを使ってTrelloとchatworkを連携する](https://qiita.com/Andysumi/items/462964bd8249beb067e4)
- [Trello Webhook × GoogleAppsScript の連携してカンバンの分析を楽にして見る](https://qiita.com/yokozawa0701/items/8b98fd69ea401bf260e0)

#### 代替方法その2. Trello Power-Up

Trelloには「Power-Up」というTrello外部のベンダーやユーザーにより作成されたアドオンのような機能がある。

- [Trello Power-Up](https://trello.com/power-ups)
![image.png](https://image.docbase.io/uploads/14d9203b-8651-4441-a6ec-7cabf0b79f2f.png)

Trello上での処理を自動化するためのPower-Upもたくさん用意されており、ちゃんと探せば私がButlerで実装していた処理を代替できるPower-Upも見つかるかもしれない。
![image.png](https://image.docbase.io/uploads/1c57bcc6-edc5-43bb-80ca-b6082ce76815.png)

注意点としては、Goldユーザーであっても１つのボードに最大３つのPower-Upしか追加できず、これが結構痛い。

- [Trello Gold](https://trello.com/ja/gold)
![image.png](https://image.docbase.io/uploads/2433708b-34ae-45f8-9a3e-b711294fdcfb.png)

#### 代替方法その3. Microsoft Power Automate

Power Automateは、コードをほとんど記述することなくGUI操作だけで自動化処理フローを作成・実行できるMicrosoftのSaaSである。フローにはOffice 365やAzureの機能だけでなくMicrosoft以外のサービスとも簡単に接続できるコネクタが標準で用意されており、簡単なOAuth認証で連携をさせて、自動化処理のフローに組み込むことができる。

- [Microsoft Power Automate](https://powerapps.microsoft.com/ja-jp/automate-processes/)
![image.png](https://image.docbase.io/uploads/14d01a2b-f700-44f7-8506-973b7f770c8f.png)

そして用意されている標準のコネクタの一覧にはもちろんTrelloも含まれている。
![image.png](https://image.docbase.io/uploads/e0da3b8e-5b6b-4295-8142-5d1ed1ba5567.png)

## どの方法で代替するか

ここまで「2. Butlerの機能を使わずに自動化処理を行う」方法としてあげた3種類の方法のどれでButlerを代替するか考えてみた。

- Webhook：コールバック先となるAPIバックエンドを実装する必要があるため**実装コストが高い**。
- Trello Power-Up：サードパーティの作成した機能に頼ることになるため**要求にフィットするPower-Upが見つかるか分からない（ないかも知れない）**。
- Microsoft Power Automate：試しに実装してみた（後述）ところButlerで行っていた自動化処理の一つを**簡単に実装できた**。

よって、Butlerの代替手段として「Microsoft Power Automate」を一旦採用してみる。

## Microsoft Power Automateで自動化処理を実装してみる

「カードがボードに作成されたら、タイトルに本日日付をプレフィクスとして付与する」処理を、Microsoft Power Automateで実装してみる。

※Power AutomateはPowerAppsのアカウントがあれば使えるので、未作成の場合は[ここ](https://powerapps.microsoft.com/ja-jp/automate-processes)から作成してください。

Power Automateで自動化処理を実装するには「フロー」というものを作成する必要があるのでこれを作成していく。

- Power Automateの[ホーム](https://japan.flow.microsoft.com/ja-jp/)画面にアクセスし、[作成]-[自動フロー]をクリック。
![image.png](https://image.docbase.io/uploads/4e623dff-d583-45da-b361-19a061287ef0.png)
- [フローのトリガーを選択してください]で「trello」で検索し、[新しいカードがボードに追加されたとき（v2）]を選択する。[作成]をクリックする。
![image.png](https://image.docbase.io/uploads/29fa2bc9-397b-40a2-9bf6-783f585472b6.png)

- まだ一度もTrelloとの接続をしていないフローを作成する場合はサインインを求めれれるので[サインイン]をクリック。
![image.png](https://image.docbase.io/uploads/dae45047-0105-4a19-b4af-560e9d7fa6ad.png)

- Microsoft Power PlatformにTrelloアカウントへのアクセスを許可するかどうかを確認する画面が開くので[許可]をクリック。
![image.png](https://image.docbase.io/uploads/cd31d27b-c7d7-49d3-8702-cbdf723b92a5.png)

- 許可をすると戻ったフローの画面で許可したTrelloアカウントのボードを選択できるようになっている。
![image.png](https://image.docbase.io/uploads/e061d623-34e7-44f4-825c-26fb835d8551.png)

- カードが追加されたときに処理したいボードの名前を選択。
![image.png](https://image.docbase.io/uploads/692f924e-aaf2-49ce-932a-461cc7639060.png)

- これで、「新しいカードが「ボード」ボードに追加されたときにこのフローを実行する」というトリガーを作成できた。
![image.png](https://image.docbase.io/uploads/f0a219b6-ff89-49ab-9144-0253293a3eb4.png)

- 次に実際にカードに対する処理（フローでは「アクション」という）を作成する。[新しいステップ]をクリック。
![image.png](https://image.docbase.io/uploads/f0a219b6-ff89-49ab-9144-0253293a3eb4.png)

- [Trello]で検索してアクション一覧から[カードの更新]をクリック。
![image.png](https://image.docbase.io/uploads/0cd96ab3-a184-49c4-a0dc-8b9336a5d3e1.png)

- [カードの更新]アクションが追加される。
![image.png](https://image.docbase.io/uploads/6e9edf20-a6e5-48fc-ab09-8e9144c22c9c.png)

- [ボードID]で先程選択したのと同じボード名を選択。
![image.png](https://image.docbase.io/uploads/30a09911-93a7-47f8-9cd2-a3cd4832b077.png)

- [カードID]で[v]をクリックして表示されるカード名一覧の一番下の[カスタム値の入力]を選択。
![image.png](https://image.docbase.io/uploads/e7d0242f-4fc5-4dbc-8407-26d1b82ecff1.png)

- 右に[動的なコンテンツ]の選択欄が表示されるので、[カードID]を選択。
![image.png](https://image.docbase.io/uploads/02e93614-0edf-4ef4-9dbd-54c300c4b1f6.png)

- [名前で]入力欄を選択すると右に[動的なコンテンツ]の選択欄が表示されるので、[カード名]を選択。
![image.png](https://image.docbase.io/uploads/488e9c50-93b7-44fa-81ad-0bba0b095e03.png)

- [名前]の入力欄で先程追加された[カード名]の左側を選択すると右に[式]の入力欄が表示されるので、`addHours(utcNow(), 9, 'yyyy-MM-dd ')`と入力して[OK]をクリック。
![image.png](https://image.docbase.io/uploads/4a98d3c3-921c-430d-bf80-304a79e3b022.png)

- [名前]の入力欄は以下のようになる。名前をこのように指定することにより、カードのタイトルが先頭に現在のJSTの日付が付加された「yyyy-MM-dd <元のタイトル>」というタイトルに更新されるようになる。
![image.png](https://image.docbase.io/uploads/d932126c-aa64-41d1-8486-bd7668d03658.png)

- 左上でフロー名を指定し、[保存]をクリックしてフローの作成を完了させる。
![image.png](https://image.docbase.io/uploads/d91549da-c6c1-4ecf-befd-8e3898b9b40a.png)

### 動作検証

ボード上に「てすとカード」というタイトルのカードを作成する。
![image.png](https://image.docbase.io/uploads/318dd68d-7452-4b85-9ce3-70b79b8e5961.png)

数分（だいたい3分以内）すると作成したPower Automateのフローが作動して、
![image.png](https://image.docbase.io/uploads/5b93606c-0f63-40f4-851b-d1cba073c168.png)

今日の日付がタイトル先頭に付加された。
![image.png](https://image.docbase.io/uploads/1214b706-05ef-4759-bf82-20b0dda90c79.png)

#### ちなみに

たまにTrello APIのLimitに抵触して怒られることもある。
![image.png](https://image.docbase.io/uploads/fed7cbd8-6c43-4fbc-b622-18e01a3cf9db.png)
![image.png](https://image.docbase.io/uploads/2819b141-f3e5-4aec-856d-ec95cbaefeba.png)

## その他

そのほか気になった事項を調べてみた。

### GoldとBusiness Classで利用できる機能の違いは？

- [Trello Goldページ](https://trello.com/ja/gold)と[オプションページ](https://trello.com/ja/pricing)のBusiness Classの機能欄を見比べてみるとチームメンバーに関する機能以外は同じ機能が使えそう。

### 個人アカウント（無料またはGold）からEnterpriseに変更する方法は？

調べた結果以下のような理解を得た。

- 個人アカウントでも「チーム」を作成できる。
- チームにはユーザーやボードを所属させられる。
- 「Enterprise」オプションを契約するとチームをEnterpriseにアップグレードできる。
- 変更方法としては、Trelloアカウントでチームを作成し、Enterpriseの機能を使いたいボードとメンバー（自分）をチームに所属させて、そのチームに対してEnterpriseオプションを契約する。その後に不要ならGoldを解約する。

### 個人アカウントで作ったボードをチームのボードに変更するには？

ボード画面の右上の[…ボードメニューを表示]- […もっと見る]-[設定]-[チームを変更]から変更（または新規作成）ができる。

![image.png](https://image.docbase.io/uploads/7d570d04-f76b-4714-8d21-35fdca612769.png)

## おわりに

今回は昔とった杵柄でMicrosoft Power Automateを採用したけど、改めて便利だなと思った。

以上