NTTドコモR&Dの技術ブログです。

流れて消えるSlackの「アイデア」を、Miroで「使える資産」に変化させる自動化術​

はじめに

本記事は、NTTドコモ R&D Advent Calendar 2025の12月13日の記事です。
Advent Calendar 2025も終盤戦に入ってきていますね🌲クリスマスがもうそこまで迫ってきているのをひしひしと感じます🎅
申し遅れましたが、ドコモ・テクノロジの小林と申します。
普段は、クラウドCoEとしてドコモグループのクラウド活用を推進する取り組みに携わっています。
今年の4月に入社し、今回がAdvent Calendarへの初参加となります。 「読んでよかった」と思っていただけるような記事をお届けできればと思います。

背景

前置きが長くなりましたが、ここからが本題です。
今回、Advent Calendarを執筆することにしたきっかけはもちろん自分自身のスキルアップもありましたが、あるクラウドサービスを知っていただきたいと思い執筆を決意しました。先ほども書きましたが、業務としてクラウド活用を推進しており、あるクラウドサービスを担当しております。入社して初めて担当することになったということもあり、愛着が湧いています。本記事を通じてそのサービスの魅力をお伝えし、「こんな使い方もあるのか」という新たな発見をしていただければ幸いです。
ここまで引っ張ってきましたが、本記事でメインとなるサービスは、オンラインホワイトボードツール「Miro」です。あまり使ったことのない方もいらっしゃると思うので、Miroの紹介とMiroとSlackを連携させた新たなツールをご紹介します。

Miroとは何か?

「Miro」は、世界中で利用されているオンラインのビジュアルコラボレーションプラットフォームです。簡単に言えば、時間や場所に捉われず、チームでアイデアを出し合い、整理し、プロジェクトを進めることができる無限に広がるデジタルのホワイトボードです。

リモートワークやハイブリッドワークが一般的になった現代において、Miroは物理的なホワイトボードの代替としてだけでなく、それ以上の価値を提供しています。

Miroの主な特徴

Miroが世界中の企業やチームで採用されている理由は、その強力な機能と使いやすさにあります。

Miroは、単なるデジタルホワイトボードという枠を超え、チームの思考を可視化し、次のアクションへと繋げるための強力なハブとなるツールです。まだ使ったことのない方もいらっしゃるかと思いますので、まずはこの優れたツールの基本を知っていただきたいと思います。

  • 無限のキャンバス(インフィニットキャンバス): 物理的なホワイトボードとは異なり、キャンバスのサイズに制限がありません。これにより、プロジェクトの全体像から詳細なタスクまで、関連するすべての情報を一箇所に集約し、整理することができます。
  • 豊富なテンプレート: ブレインストーミング、マインドマップ、カンバンボード、フローチャート、アジャイルのスクラムボード、カスタマージャーニーマップなど、さまざまな用途に応じた100種類以上のテンプレートが用意されています。これにより、アイデア出しや議論をすぐに、かつ効果的に開始できます。
  • リアルタイムコラボレーション: 複数人が同時に、同じボード上で作業を行うことができます。付箋の追加、図の作成、コメントの書き込みなどがリアルタイムで共有され、チームでの共同作業を強力にサポートします。
  • 視覚的なコミュニケーション: テキストだけでなく、画像、ドキュメント、動画などを貼り付けられるため、複雑な情報やアイデアも直感的かつ視覚的に共有・理解することができます。
  • 160種類以上の外部ツールとの連携可能: APIやSDKを活用することで、Slack、Jira、Google Workspaceなど160種類以上の外部ツールとシームレスに連携させることが可能です。これにより、異なるアプリ間でのデータ同期や通知の自動化を実現し、ツールを切り替えることなくMiro上で一元化された効率的なワークフローを構築できます。

流れるSlackの投稿内容を、Miroで「使える資産」へ

前節でMiroの魅力をお伝えしましたが、実際の業務に目を向けてみましょう。 普段は連絡や報告がメインのSlackですが、ふとした「相談」や「雑談」の中に、開発の重要なヒントが隠れていることも少なくありません。

皆さんも、業務の合間にこんな経験をしたことはありませんか?

  • 「技術記事のURLがシェアされた。『お、これは参考になる!』とブックマークしたけど……正直、それ以来一度も開いていない
  • 「ちょっとした相談から良いアイデアが出たのに、次の連絡事項が入ってきて埋もれてしまい、見失った

Slackは「今」を話す連絡ツールとしては最高ですが、情報を「溜める」のは苦手です。 私も「あとで確認しよう」と思ってSlackのブックマーク機能を使いますが、悲しいことにそこは、ただ情報が積み上がるだけの「情報の墓場」になりがちです。

なぜ「リスト」では思考が止まるのか?

なぜ、ブックマークした情報は見返されないのでしょうか? それは、Slackのブックマークが単なる「リスト(箇条書き)」だからです。

リストに格納された情報は、関連性や文脈が見えにくく、活用されないまま留まる傾向があります。縦一列に並んだURLやメッセージを眺めても、そこには文脈もなければ、関連性もありません。「ただ置いてあるだけ」の倉庫です。そこから新しい発想を生むのは至難の業です。

Miroを使う意味は「散らかせる」ことにある

ここでMiroの出番です。 リスト(1次元)に対して、Miroはキャンバス(2次元)です。この「空間がある」ということが決定的に重要なのです。

Miroという広い机の上なら、情報を「ただ置く(倉庫)」のではなく、「作業」することができます。

  • 似たような情報を近くに集めてグルーピングする。
  • 過去の相談内容と、今の技術記事を矢印で繋いでみる。
  • 付箋の余白に、「これ、あの案件に使えるかも?」とメモを書き殴る。

こうして情報を配置し、動かし、触れることで初めて、単なる連絡ログが「意味のある情報」へと変わっていきます。 つまり、必要なのは、情報をしまい込む「倉庫」ではなく、情報を広げていじり倒せる「作業場」だったのです。


いざ実装!...と思いきや、セキュリティの壁

コンセプトが決まったので、さっそく実装に入ります。 構成はシンプルです。Slack APIから情報を取得し、Google Apps Script (GAS) で加工して、Miro APIに投げる。これだけです。

当初は、Slackのイベント検知(Webhook)を使って、リアクションされた瞬間に爆速でMiroに反映させるつもりでした。しかし、ここで「企業エンジニアあるある」の壁にぶつかります。

「GASのWebアプリURL、社外(Slack)からのアクセス許可NG問題」

Webhookを受け取るにはGASを「全員(匿名ユーザーを含む)」に公開する必要がありますが、会社のセキュリティポリシー上、それが難しかったのです。「詰んだ……」と一瞬思いましたが、ここで諦めるわけにはいきません。

発想の転換:プッシュがだめならプルでいく

そこで、「GASのトリガー機能(時間主導)」を使ったポーリング方式に切り替えました。

  • Before (Webhook): Slack「リアクションされたよ!」→ GAS「OK!」(※セキュリティでブロック)
  • After (Polling): GAS「5分経ったけど、新しいリアクションある?」→ Slack「あるよー」

これならGASを外部公開する必要がなく、社内のセキュリティ環境内で完結できます。リアルタイム性は少し落ちますが、思考の整理には5分程度のラグは誤差の範囲です。

実装のこだわりポイント

単にテキストを転送するだけでは面白くありません。Miroという「ビジュアル」なツールを使うからには、見た目にもこだわりたいところです。そこで、2つの工夫を凝らしました。

1. リアクションの「色」で意味を変える

これが今回一番の実装ポイントです。 Slackで付与されたリアクションの種類によって、Miroに生成される付箋の色を自動で変えるようにしました。

  • 💡 (アイデア) → Yellow
  • 🙌 (重要) → Blue

これにより、Miroボードをパッと見ただけで「あ、ここはアイデアが集まっているエリアだな」「ここは重要な情報だな」と直感的にわかるようになります。

2. 「bulb」って何? APIの罠

実は開発中、コードは合っているはずなのに「💡」のリアクションしてもGASが反応しないという現象にハマりました。

「もしかして、絵文字のデータが違うのか?」 そう思い、Slack上のリアクションがAPIでどう見えているかを調べるための調査用コードを別途書いて、ログを出力してみました。

その結果がこちらです。

ログを見て愕然としました。APIは絵文字そのものではなく、"bulb" という文字列(エイリアス) を返してきていたのです。

  • 💡 (見た目) → "bulb" (API上の名前)
  • 🙌 (見た目) → "raised_hands" (API上の名前)

「見た目は絵文字でも、裏側では英語のエイリアス名で動いている」。これはAPIを叩いてログを見ないとなかなか気づけない罠でした。

完成したコード(ダイジェスト)

最終的に完成したGASのコードがこちらです。 セキュリティを考慮し、トークン類はすべて PropertiesService(環境変数)に逃がしています。

/**
 * Slackのリアクションを検知してMiroに付箋を貼るメイン関数
 */
function checkSlackReactions() {
  // 1. Slack APIから直近1時間のメッセージを取得
  // ... (省略) ...

  // 2. メッセージを走査
  for (const message of data.messages) {
    // 既に処理済みならスキップ
    if (processedIds.includes(message.ts)) continue;

    // 対象のリアクション(💡,🙌)があるかチェック
    const foundReaction = message.reactions.find(r => 
      TARGET_REACTIONS.includes(r.name) && r.users.includes(MY_SLACK_USER_ID)
    );
    
    if (foundReaction) {
      // 3. Miro APIを叩いて付箋を作成(色指定付き)
      createMiroStickyNote(message.text, message.user, message.ts, foundReaction.name);
      
      // 処理済みIDとして記録
      newProcessedIds.push(message.ts);
    }
  }
  // ... (省略) ...
}

※実際の運用では、過去に処理したメッセージを再度転送しないよう、GAS側にIDを保存する「重複防止ロジック」も組み込んでいます。


SlackからMiroへ、思考が繋がる瞬間

実際の挙動をご覧ください。

まず、Slack側での操作はこれだけです。 流れてきた事務連絡には「🙌 (確認)」、思いついたアイデアや振り返りの投稿には「💡 (アイデア)」のリアクションをします。

すると、数分後(トリガーが走った後) Miroのボード上には、Slackの投稿内容が付箋となって自動的に生成されました!

miro_付箋

コードで実装した通り、「🙌」は水色、「💡」は黄色と、リアクションの種類に応じてしっかりと色分けされています。これなら、後でボードを見返した時に「どれがアイデアで、どれが連絡事項か」が一目瞭然です。

「保存」から「創造」へ

しかし、付箋が生成されただけでは、まだ「Slackのブックマーク」と変わりません。ここからがMiroの本領発揮です。

自動生成された付箋を動かし、関連する情報をグルーピングし、矢印で繋ぎ、新たなメモを書き加える……。 そうして「創造」した結果がこちらです。

miro_作成物

いかがでしょうか? 単なる時系列の「チャットログ」だった情報が、関係性を持った「意味のある図解」へと生まれ変わりました。 これこそが、情報をリスト(倉庫)ではなく、キャンバス(作業場)に送る最大のメリットなのです。


まとめ

こうして、「Slackでリアクションするだけ」で、アイデアの種がMiroに自動で溜まる仕組みが完成しました。 ロボットに「情報の運搬」を任せることで、私たちは本来やるべき「情報を創造する(クリエイティブな)時間」に没頭できるようになります。

今回はSlack連携でしたが、カレンダーやGitHubなど、MiroのAPIを使えば可能性は無限大です。「💡がbulbになる」ような小さな罠も楽しみながら、ぜひ皆さんも自分だけの「最高の相棒」を作ってみてください。

本記事が、皆さんのチームのコラボレーションを加速させるヒントになれば幸いです。 最後までお読みいただき、ありがとうございました!