TeamsとPower Automate連携でファイル検索とリンク共有を自動化する!
「あの資料、どこに保存したっけ?」「キーワードで検索したいけど、どこから探せばいいの?」「見つけたファイルをチームに共有するのに手間がかかる」。こんな悩み、ありませんか?必要なファイルがすぐに見つからず、共有にも時間がかかると、業務効率は大きく低下してしまいますよね。
Power AutomateとTeams、そしてファイルを保管しているSharePointやOneDriveを組み合わせることで、特定のキーワードでファイルを検索し、そのリンクをTeamsに自動で共有する仕組みを構築できます。これにより、ファイル探しにかかる時間を大幅に削減し、チームの情報共有を格段にスムーズにできます
なぜキーワード検索とリンク共有の自動化が大切なの?
必要なファイルに素早くアクセスし、共有することは、チームの生産性を高める上で非常に重要です。この自動化がもたらす具体的なメリットについて、一緒に見ていきましょう。
ファイル探しの手間と時間を大幅に削減できるから
「あの時の議事録どこだっけ?」「あの顧客の提案書、最新版は?」。ファイルを探すのに、いくつものフォルダを開いたり、検索窓にキーワードを入力したりする作業は、意外と時間がかかります。自動化システムがあれば、Teamsで簡単な指示を出すだけで、Power Automateが裏でファイルを検索し、結果を提示してくれます。これで、ファイル探しにかかる無駄な時間をなくせますね。
欲しいファイルがすぐに見つかり、共有漏れも防げるから
情報が散在していると、必要なファイルを見つけ出すのが難しくなります。また、見つけたとしても、そこからダウンロードしてTeamsにアップロードしたり、リンクをコピーして貼り付けたりするのは手間がかかり、共有漏れの原因にもなりかねません。自動共有システムは、検索からリンク共有までを一貫して行うため、必要なファイルに素早くアクセスでき、共有漏れも防げます。
チームの情報連携がスムーズになり、生産性が向上するから
チームメンバーが個々にファイルを探すのではなく、共通のTeamsチャネルで検索結果が共有されることで、情報連携が格段にスムーズになります。誰かが探しているファイルを、他のメンバーも簡単に確認できるため、協力体制が生まれやすくなります。結果として、チーム全体の情報活用能力が高まり、生産性もぐっと上がりますよ。
人的ミスを減らし、常に最新の情報を共有できるから
手動でファイルを共有する場合、間違ったバージョンのファイルを送ってしまったり、古い情報を提供してしまったりするリスクがあります。自動検索・共有システムは、常に最新のインデックス情報に基づいてファイルを検索し、直接リンクを共有するため、このような人的ミスを減らし、チームが常に正確な最新情報にアクセスできる状態を保てます。
構築システムの準備を始めよう
ファイル検索とリンク共有の自動化システムを作る前に、いくつか確認し、準備しておくべきことがあります。これらを事前に整理しておくことで、スムーズに自動化を進められます。
検索対象の「ファイル置き場」を決めよう
Power Automateがファイルを検索するためには、そのファイルがどこに保存されているか、そしてPower Automateからアクセスできる必要があります。Microsoft 365環境では、SharePointやOneDrive for Businessが最適です。
- SharePointドキュメントライブラリ:
- チームやプロジェクトの共有ファイルを管理している場所ですね。Teamsの「ファイル」タブの裏側もSharePointです。
- 検索したいファイルがあるドキュメントライブラリのURLを控えておきましょう。
- OneDrive for Business:
- 個人のファイルや、特定のユーザーが共有しているファイルを検索する場合に使います。
ファイル検索の「トリガー」を決めよう
どのようにファイル検索プロセスを開始したいかを決定します。Teams上から操作するのが便利ですね。
- Teamsチャネルのメッセージにキーワードが含まれたとき:
- 特定のチャネルで「/検索 [キーワード]」のように、スラッシュコマンドや特定のキーワードを含むメッセージが投稿されたら、検索を開始します。
- これが最もTeamsとの連携が自然で使いやすい方法です。
- TeamsのPower Automateアプリからの手動トリガー:
- TeamsにPower Automateアプリを追加し、そこに作成したフローのボタンをクリックして、検索キーワードを入力します。
- Formsからの入力:
- Microsoft Formsで検索キーワードを入力するフォームを作成し、その回答をトリガーにします。
検索結果を共有するTeamsの「場所」を決めよう
検索結果のリンクをどこに表示したいのかを決定します。
- 検索が実行されたチャネル: 検索を依頼したチャネルに直接結果を返します。これが最も一般的で、会話の流れに沿っています。
- 検索を依頼したユーザーへの個人チャット: 検索結果がプライベートな内容の場合や、他のチャネルを汚したくない場合に利用します。
- 特定の情報共有チャネル: 検索結果を広く共有したいチャネルに投稿します。
共有する「メッセージ内容」を考えよう
自動でTeamsに投稿されるメッセージは、簡潔かつ分かりやすく、ファイルの内容が把握しやすいように工夫しましょう。
- 検索キーワード: 何のキーワードで検索したのか。
- 見つかったファイルの名前: 検索にヒットしたファイルの名前。
- ファイルの最終更新日時: ファイルの鮮度を示す情報。
- ファイルの最終更新者: 誰が最後に更新したのか。
- ファイルへの直接リンク: クリック一つでファイルを開けるように。
- 見つからなかった場合のメッセージ: 検索結果が0件の場合のメッセージも準備しましょう。
必要な「権限」を確認しよう
Power Automateでフローを作成し、SharePoint/OneDriveのファイルを検索し、Teamsにメッセージを送信するためには、フローを実行するアカウントが適切な権限を持っている必要があります。
- SharePoint/OneDriveへのアクセス権: 検索対象のファイルがあるライブラリ/フォルダに対して、「読み取り」権限が必要です。
- Teamsチャネル/チャットへのメッセージ投稿権: 投稿先のTeamsチャネルまたは個人チャットへのメッセージ投稿権限が必要です。
Power Automateで自動化を設定しよう(基本編)
ここからはいよいよ、Power Automateを使ってファイル検索とリンク共有の自動化フローを作成していきます。Teamsチャネルで特定のキーワードを含むメッセージが投稿されたことをトリガーに、SharePointのファイルを検索し、そのリンクをTeamsに自動で投稿する基本的なフローから見ていきましょう。
フローを作成する場所を決めよう
Power Automateのウェブサイトにアクセスし、左側のメニューから「作成」を選択します。今回は、特定のイベント(Teamsメッセージの投稿)が発生したときに自動的に実行されるフローなので、「自動化したクラウド フロー」を選択します。
トリガーを設定しよう
フローのトリガーとは、「いつ」このフローを実行するかを決定するものです。ここでは、Teamsのチャネルに特定のキーワードを含む新しいメッセージが投稿されたときにフローを実行したいので、トリガーには「新しいチャネル メッセージが追加されたとき (V2) (Microsoft Teams)」を選択します。
作成例1:TeamsチャネルメッセージのキーワードでSharePointファイルを検索しリンク共有
このフローは、Teamsの特定のチャネルに「検索: [キーワード]」のような形式のメッセージが投稿された際に、SharePoint内のファイルを検索し、そのリンクを元のチャネルに自動で投稿します。
- Power Automateにサインインします。お使いのMicrosoft 365アカウントでPower Automateのウェブサイト(https://make.powerautomate.com/)にアクセスし、サインインします。
- 「作成」から「自動化したクラウド フロー」を選択します。左側のナビゲーションペインにある「作成」をクリックし、表示されるオプションの中から「自動化したクラウド フロー」を選択します。
- フロー名を指定し、トリガーを選択します。フロー名には「Teams_ファイル検索&共有」など、分かりやすい名前を付けます。「フローのトリガーを選択してください」の検索ボックスに「Teams」と入力し、「新しいチャネル メッセージが追加されたとき (V2) (Microsoft Teams)」を選択して「作成」をクリックします。
- トリガーの詳細を設定します。
- チーム: 監視したいTeamsのチームを選択します(例:
プロジェクトA)。 - チャネル: 監視したいチャネルを選択します(例:
一般、ファイル検索)。 - 含める: 「件名」や「本文」で特定のキーワードを検知する場合には、詳細オプションで「本文」に特定のキーワードパターン(例:
検索:)を設定できます。
- チーム: 監視したいTeamsのチームを選択します(例:
- 新しいステップを追加し、メッセージ本文から検索キーワードを抽出します。ユーザーが投稿するメッセージが「検索: [キーワード]」という形式だと仮定します。
- 「作成」アクションを追加します。
- 名前:
SearchKeyword - 入力:
replace(triggerOutputs()?['body/plainTextBody'], '検索:', '')- 補足:
plainTextBodyはメッセージの本文からHTMLタグを取り除いたプレーンテキストです。replace関数で「検索:」という部分を空の文字列に置き換え、キーワードだけを抽出します。必要に応じてtrim()関数で前後のスペースを削除します。
- 補足:
- 名前:
- 「作成」アクションを追加します。
- 新しいステップを追加し、SharePointでファイルを検索します。検索ボックスに「SharePoint」と入力し、「ファイルを検索する (SharePoint)」アクションを選択します。
- サイトのアドレス: ファイルを検索したいSharePointサイトのURLを選択します。
- 検索クエリ:
@{outputs('SearchKeyword')}(抽出したキーワード)- 補足: これにより、SharePointサイト全体からキーワードを含むファイルが検索されます。特定のドキュメントライブラリやフォルダ内のみを検索したい場合は、検索クエリに
Path:https://yourcompany.sharepoint.com/sites/yoursite/Shared%20Documents/YourFolder/のようにパスを追加します。
- 補足: これにより、SharePointサイト全体からキーワードを含むファイルが検索されます。特定のドキュメントライブラリやフォルダ内のみを検索したい場合は、検索クエリに
- 新しいステップを追加し、検索結果を処理するためのループを設定します。ファイルが複数見つかる可能性があるため、「アプライ トゥー イーチ」コントロールを使います。
- 「アプライ トゥー イーチ」コントロールを追加します。
- 以前の手順からの出力を選択: 「ファイルを検索する」アクションの
body/valueを選択します。
- 以前の手順からの出力を選択: 「ファイルを検索する」アクションの
- 「アプライ トゥー イーチ」コントロールを追加します。
- 「アプライ トゥー イーチ」の中にTeamsへのメッセージ投稿アクションを追加します。
- 「+ アクションの追加」をクリックし、検索ボックスに「Teams」と入力し、「チャットまたはチャネルにメッセージを投稿する (Teams)」を選択します。
- 投稿者: 「Flow bot」を選択します。
- 投稿先: 「チャネル」を選択します。
- チーム: トリガーで指定したTeamsのチームを選択します。
- チャネル: トリガーで指定したチャネルを選択します。
- メッセージ: ここに検索結果のメッセージ内容を記述します。検索されたファイルの情報を動的なコンテンツとして挿入します。
🔍ファイル検索結果(キーワード: @{outputs('SearchKeyword')}) 見つかりました: @{items('アプライ_トゥー_イーチ')?['Name']} 最終更新: @{formatDateTime(items('アプライ_トゥー_イーチ')?['LastModified'], 'yyyy/MM/dd HH:mm')} 更新者: @{items('アプライ_トゥー_イーチ')?['Editor']?['DisplayName']} ▼ファイルを開く [ファイルリンク]@{items('アプライ_トゥー_イーチ')?['Link']} ---- 補足:
Nameはファイル名、LastModifiedは最終更新日時、Editor/DisplayNameは最終更新者、Linkはファイルへの直接リンクです。formatDateTime関数は、日付と時刻の表示形式を整えるために使用します。---はTeamsで区切り線を表示します。
- 補足:
- 新しいステップを追加し、検索結果が0件だった場合のメッセージを設定します。
- 「条件」アクションを追加します。
- 左側の値:
length(outputs('ファイルを検索する')?['body/value'])(検索結果の件数) - 演算子: 「次の値と等しい」
- 右側の値:
0 - 「はい」のパス(検索結果が0件の場合)に、Teamsへのメッセージ投稿アクションを追加します。
- 投稿者: Flow bot
- 投稿先/チーム/チャネル: 基本編と同じ。
- メッセージ:
@{triggerOutputs()?['body/from']?['displayName']}さん、申し訳ありません。「@{outputs('SearchKeyword')}」のキーワードではファイルが見つかりませんでした。キーワードを変えて再度お試しください。
- フローを保存してテストします。画面右上の「保存」をクリックします。保存後、「テスト」をクリックし、「手動」を選択して「テスト」をクリックします。指定したTeamsチャネルに、「検索: [ファイル内のキーワード]」という形式のメッセージを投稿します。
Power Automateのフロー実行履歴を確認し、Teamsに検索結果のリンク、または0件通知が届いていることを確認します。
アクションを設定しましょう
トリガーが発動したら、次に「何を」するのかを設定します。これがアクションです。
- Teamsアクション:
- 「新しいチャネル メッセージが追加されたとき (V2)」: 特定のTeamsチャネルに新しいメッセージが投稿されたことを検知するトリガー。
- 「チャットまたはチャネルにメッセージを投稿する」: 検索結果のファイルリンクや、検索結果がなかった旨のメッセージをTeamsに送信します。
- データ操作アクション:
- 「作成」: メッセージ本文から検索キーワードを抽出したり、一時的な文字列を生成したりするために利用します。
- 「アプライ トゥー イーチ」: 検索結果が複数あった場合に、各ファイルに対して同じ処理を繰り返すために使用します。
- SharePointアクション:
- 「ファイルを検索する」: SharePointサイト内のファイルを指定したキーワードで検索します。
通知メッセージのカスタマイズをしましょう
メッセージの内容は、動的なコンテンツを利用して、ファイル名、最終更新日時、更新者、そして元のファイルへのリンクなどを自動的に埋め込むことができます。
- 検索キーワード:
SearchKeyword(作成アクションの出力) - ファイル名:
Name(ファイルを検索するアクションの出力) - 最終更新日時:
LastModified - 更新者:
Editor/DisplayName - ファイルへのリンク:
Link(ファイルを検索するアクションの出力)
これらの情報をメッセージ本文に適切に配置することで、Teamsのメンバーが、何のファイルが、いつ、誰によって更新されたのか、そしてどこから開けるのかを、一目で把握できるように工夫しましょう。簡潔で分かりやすいメッセージと、すぐにアクセスできるリンクが重要です。
Power Automateで自動化を設定しましょう(応用編)
基本編で作成したフローをさらに便利にするための応用テクニックを見ていきましょう。
検索対象のフォルダやライブラリを限定する
全社サイトから検索するのではなく、特定のプロジェクトフォルダやドキュメントライブラリ内のみを検索対象とすることで、より関連性の高い結果を得られます。
作成例2:検索対象のフォルダやライブラリを限定するPower Automateフロー
SharePointの「ファイルを検索する」アクションの「検索クエリ」を修正します。
- 基本編のフロー(Teams_ファイル検索&共有)を開きます。
- ステップ6の「ファイルを検索する (SharePoint)」アクションを修正します。
- サイトのアドレス: 検索したい特定のSharePointサイトのURLを選択します。
- 検索クエリ:@{outputs(‘SearchKeyword’)} Path:https://yourcompany.sharepoint.com/sites/yoursite/Shared%20Documents/プロジェクト資料/
- 補足:
Path:の後に検索したいフォルダやドキュメントライブラリのURL(エンコードされている場合はデコードして)を指定します。これで、そのパス配下のみを検索対象とできます。 - 特定のファイルタイプに限定したい場合は、
@{outputs('SearchKeyword')} FileType:pdfのように追加します。
- 補足:
- フローを保存してテストします。指定したフォルダ内のファイルのみが検索結果として表示されることを確認します。
検索結果をアダプティブカードでリッチに表示し、次のアクションに繋げる(高度)
検索結果を単なるテキストで表示するだけでなく、Teamsのアダプティブカードを使って、ファイル名、概要、最終更新日時などをカード形式で表示し、カード内に「ファイルを開く」「このファイルについて質問する」といったアクションボタンを埋め込みます。
作成例3:検索結果をアダプティブカードでリッチに表示し、次のアクションに繋げるPower Automateフロー(高度)
この機能は、アダプティブカードのJSON構築や、Teamsの「応答を待機する」アクションの利用が必要です。
- 基本編のフロー(Teams_ファイル検索&共有)を開きます。
- ステップ8のTeamsへのメッセージ投稿アクションを「チャットまたはチャネルにアダプティブ カードを投稿して応答を待機する (Teams)」に変更します。
- 投稿先/チーム/チャネル: 基本編と同じ設定。
- メッセージ: アダプティブカードのJSONをここに貼り付けます。
- アダプティブカードのJSON例(「アプライ トゥー イーチ」の中に追加):
JSON
{ "type": "AdaptiveCard", "body": [ { "type": "TextBlock", "text": "🔍検索結果: @{outputs('SearchKeyword')}", "wrap": true, "size": "Medium", "weight": "Bolder" }, { "type": "FactSet", "facts": [ { "title": "ファイル名:", "value": "@{items('アプライ_トゥー_イーチ')?['Name']}" }, { "title": "最終更新:", "value": "@{formatDateTime(items('アプライ_トゥー_イーチ')?['LastModified'], 'yyyy/MM/dd HH:mm')}" }, { "title": "更新者:", "value": "@{items('アプライ_トゥー_イーチ')?['Editor']?['DisplayName']}" } ] } ], "actions": [ { "type": "Action.OpenUrl", "title": "ファイルを開く", "url": "@{items('アプライ_トゥー_イーチ')?['Link']}" }, { "type": "Action.Submit", "title": "このファイルについて質問する", "data": { "action": "ask_question", "fileName": "@{items('アプライ_トゥー_イーチ')?['Name']}", "fileLink": "@{items('アプライ_トゥー_イーチ')?['Link']}", "requestedBy": "@{triggerOutputs()?['body/from']?['displayName']}" } } ], "$schema": "http://adaptivecards.io/schemas/adaptive-card.json", "version": "1.4" } - 補足: アダプティブカードのデザインは
https://adaptivecards.io/designer/で作成・テストできます。
- 新しいステップを追加し、アダプティブカードからの応答を処理します。
- 「アダプティブ カードへの応答の待機」アクションが自動で追加されます。
- 「条件」アクション: ユーザーが「このファイルについて質問する」ボタンを押したかどうかをチェックします(
triggerBody()['data']['action']がask_questionと等しいか)。 - 「はい」のパスに、質問内容を収集し、担当者に通知するアクションを追加します。
- 例: 「チャットまたはチャネルにメッセージを投稿する」アクションで、ファイルの担当者や、情報管理担当者へ「〇〇ファイルについて質問がありました」と通知。
メリット: ユーザーはTeams内で情報を確認し、次のアクション(ファイルを開く、質問する)を直接実行できるため、ユーザーエクスペリエンスが大幅に向上し、情報活用がよりシームレスになります。
エラー対策とトラブルシューティングを確認しよう
Power Automateフローは、確実に動作することが求められます。特にファイル検索は、必要な情報を素早く提供するため、信頼性が非常に重要です。よくあるエラーとその対策、そしてトラブルシューティングのポイントをご紹介します。
権限不足のエラーが出た場合
「アクセスが拒否されました」といったエラーメッセージが表示される場合、Power AutomateがSharePoint/OneDriveのファイルを検索したり、Teamsにメッセージを送信したりするための権限が不足している可能性があります。
対策: フローを実行するアカウントが、検索対象のSharePointサイト/OneDriveのファイルに対して「読み取り」権限、そしてTeamsチャネルへのメッセージ投稿権限を持っていることを確認してください。
トリガーが動作しない場合
フローが全く実行されない場合、設定したトリガーの条件が満たされていない可能性があります。
対策
- Teamsチャネルの選択ミス: トリガーで選択したTeamsチームとチャネルが、実際にメッセージが投稿される場所と一致しているか確認しましょう。
- キーワードの誤り: メッセージ本文からキーワードを抽出するロジック(
replace関数など)が、ユーザーの入力形式と合致しているか確認しましょう。大文字/小文字、全角/半角、スペースなどの違いに注意してください。 - テストメッセージの投稿: フローを保存後、実際にトリガー条件に合致するテストメッセージをTeamsに投稿し、Power Automateの「実行履歴」でフローが起動したかを確認しましょう。
検索結果が0件または意図しない結果の場合
ファイル検索アクションが期待通りの結果を返さないことがあります。
対策
- 検索クエリの正確性: 「ファイルを検索する」アクションの検索クエリが正確か確認しましょう。特定のパスやファイルタイプに限定する場合は、そのクエリが正しい構文か確認してください。
- SharePointの検索インデックス: SharePointの検索インデックスが最新でない場合、最近追加・更新されたファイルが検索結果に反映されないことがあります。
- アクセス権限: フローを実行するアカウントが、検索対象のファイルに対して閲覧権限を持っているか再確認しましょう。権限がないファイルは検索結果に表示されません。
通知がTeamsに届かない場合(フローは成功しているのに)
Power Automateの実行履歴ではフローが「成功」しているのに、Teamsに通知が届かない場合があります。
対策
- Teamsの通知設定: 受信側のTeamsで、Flow botからの通知がブロックされていないか、ミュートされていないかなどを確認してください。
- チャネルの選択ミス: 「チャットまたはチャネルにメッセージを投稿する」アクションで、意図したチャネルが正しく選択されているか、タイプミスがないかを再確認しましょう。
- 接続の正常性: Power Automateの「データ」→「接続」で、Teamsへの接続が正常に確立されているかを確認しましょう。
フローの履歴を確認しましょう
エラーが発生した場合や、フローが意図通りに動作しない場合は、Power Automateのフロー実行履歴を確認することが最も重要です。
手順
- Power Automateの「マイ フロー」から、該当のフローを選択します。
- 「実行履歴」タブをクリックします。
- 失敗した実行、または成功したものの動作が怪しい実行を選択すると、フローの各ステップがどのように実行されたか、どこでエラーが発生したか、そして入力/出力データやエラーメッセージの詳細を確認できます。
ポイント: 各アクションの「入力」と「出力」を確認することで、どのデータがどのように処理され、どこで問題が発生したのかを詳細に把握できます。特に検索アクションの入力クエリと出力結果、Teamsへの投稿メッセージが期待通りに構成されているかを確認しましょう。
セキュリティとアクセス管理を確認しましょう
ファイル検索とリンク共有システムは、会社のファイルへのアクセスに関わるため、セキュリティとアクセス管理に十分な配慮が必要です。
ファイルの共有範囲と権限設定を適切にしましょう
Teamsでファイルリンクが共有されることで、そのチャネルのメンバー全員がファイルにアクセスできるようになります。
- SharePoint/OneDriveの権限: 検索対象のファイルが保存されているSharePointサイトやOneDriveのドキュメント、フォルダに対して、適切なアクセス権限が設定されていることを確認してください。フローが共有するリンクは、そのファイルに設定されている共有設定に準じます。
- 機密情報の取り扱い: 機密性の高いファイルは、検索対象から除外するか、検索結果が特定の人にしか通知されないようにフローを調整するなど、特別な配慮が必要です。
Teamsチャネルの権限設定を適切にしましょう
ファイル検索結果が送信されるTeamsチャネルのメンバーシップも適切に管理しましょう。
- プライベートチャネルの利用: 機密性の高いファイルに関する検索を行う場合は、必ず「プライベート」チャネルとし、必要なメンバーのみがアクセスできるようにしましょう。
- パブリックチャネルの利用: 広く共有しても問題ないファイルに関する検索であれば、パブリックチャネルも有効です。
フローの作成と実行権限を管理しましょう
この自動化フローは、会社のファイルへのアクセスに関わるため、不用意に作成・変更・実行できないように、適切な権限管理が必要です。
- フロー作成者の制限: 重要なフローの作成権限は、ファイル管理の責任者や特定のシステム管理者にのみ付与することを検討しましょう。
- 共有の最小化: フローを他のユーザーと共有する際は、実行のみの権限に限定し、共同所有者としての共有は慎重に検討しましょう。共同所有者はフローを編集できるため、意図しない変更のリスクがあります。
- サービスアカウントの利用: フローの実行アカウントが個人アカウントではなく、専用のサービスアカウントであれば、個人の人事異動や退職の影響を受けにくく、権限管理も一元化しやすいでしょう。
まとめ
Power AutomateとTeamsを組み合わせることで、特定のキーワードでのファイル検索とリンク共有を自動化する方法について、基本的な設定から応用、エラー対策、そしてセキュリティとアクセス管理まで、詳細に解説してきました。
この自動化されたファイル検索・共有システムは、ファイル探しにかかる時間を大幅に削減し、情報共有のスピードを格段に上げ、見落としを防ぐための強力なツールとなるでしょう。結果として、チームの情報活用能力が向上し、生産性もぐっと上がります。

