TrelloとSlackを「神経直結」させる。Webhooksで実現する究極の自動化戦略
こんにちは。アジャイルコーチとして数多くの現場を見てきましたが、チームのベロシティを削ぐ最大の要因は「ツールの分断」です。Trelloでカードを動かし、Slackで報告する。この「コンテキストスイッチ(切り替え)」が、エンジニアのフロー状態をいとも簡単に破壊します。
Trello標準の「Butler」は便利ですが、複雑な条件分岐や他システム(DBやGitHubなど)との連携には限界があります。今日は、Trello Webhooksを使って、あなただけの「最強の専用Bot」を構築するステップを伝授します。
これは単なる技術的な実装ではありません。チームの「認知負荷」を劇的に下げ、開発に集中するためのインフラ構築です。
—
1. なぜ「Webhooks」が必要なのか?
Webhooksとは、Trelloで何かが起きた瞬間に、あなたのサーバーへ「おい、カードが動いたぞ!」と通知を飛ばす仕組みです。
- Butler: GUIで完結するが、ロジックの可搬性や外部連携に欠ける。
- Webhooks + 自作Bot: どんな複雑なロジックも実装可能。通知の文面も自由自在。
今回は、最も手軽でメンテナンスコストの低い Python (Flask) を使い、Google Cloud FunctionsやAWS Lambda等の「サーバーレス環境」でも動かせる実装例を紹介します。
—
2. 準備:Trello APIの鍵を手に入れる
まず、Trelloからデータを受け取るための「通行証」が必要です。
1. [Trello Power-Up Admin Portal](https://trello.com/power-up/admin) にアクセスし、APIキーを取得します。
2. 以下のURLをブラウザで叩き、あなたのTrelloアカウントで許可すると「APIトークン」が発行されます。
`https://trello.com/1/authorize?key=[あなたのAPIキー]&name=MyBot&scope=read&expiration=never&response_type=token`
※ APIキーとトークンは絶対に公開リポジトリ(GitHubなど)にコミットしないでください。 環境変数で管理するのが鉄則です。
—
3. HelloWorld:イベントをキャッチするサーバー
今回は、Webhookの受け皿となる極めて軽量なスクリプトを書きます。
from flask import Flask, request, jsonify
app = Flask(__name__)
TrelloはWebhook登録時にHEADリクエストを送って生存確認をしてくるため、対応が必要
@app.route(‘/trello-webhook’, methods=[‘POST’, ‘HEAD’])
def trello_webhook():
if request.method == ‘HEAD’:
return ”, 200
# ここにTrelloから送られてきたJSONデータが入る
data = request.json
print(f”受信したイベント: {data[‘action’][‘type’]}”)
# TODO: ここでSlackへの通知ロジックを実装する
return jsonify({‘status’: ‘ok’}), 200
if __name__ == ‘__main__’:
app.run(port=5000)
—
4. Webhookの登録(重要:ここが一番の難所)
サーバーを立ち上げたら(ローカルなら `ngrok` を使ってトンネルを開通させてください)、Trelloに対して「通知はここに送れ」と登録します。
curl -X POST \
-d “key=[API_KEY]” \
-d “token=[API_TOKEN]” \
-d “callbackURL=[公開URL]/trello-webhook” \
-d “idModel=[監視したいボードのID]” \
“https://api.trello.com/1/tokens/[API_TOKEN]/webhooks/”
成功するとTrelloから `200 OK` が返ってきます。これで、ボード上でカードが移動したり、コメントがついたりするたびに、あなたのサーバーがイベントをキャッチするようになります。
—
5. 現場で震えるほど役立つ「次のステップ」
ここから先が、あなたを「単なるエンジニア」から「チームをリードするエンジニア」に変えるポイントです。
- SlackのIncoming Webhookと連携: 受け取ったJSONから `data[‘action’][‘data’][‘card’][‘name’]` を抽出し、SlackのAPIを叩いてリッチな通知を送る。
- フィルタリングの実装: 「特定のリストに移動した時だけ通知する」「特定のメンバーがアサインされた時だけSlackでメンションを飛ばす」といったロジックを加える。
- 情報のサイロ化を防ぐ: 例えば、GitHubのPRがマージされたらTrelloのカードを自動移動させるなど、Trelloを「情報のハブ」として機能させる。
先輩からのアドバイス
このシステムを構築する際、「通知のノイズ」には細心の注意を払ってください。 全てを通知するのは悪手です。本当に必要なのは「次に何をすべきか」を判断するためのトリガーだけです。
「これを設定すれば、チームは確認のためにTrelloを開く回数を減らせるか?」と常に自問自答してください。それが、アジャイルの真髄である「無駄の排除」です。
さあ、コードを書いて、チームの時間を創造的な作業のために取り戻しましょう!何か詰まったら、いつでも聞いてくださいね。応援しています。