Microsoft Teamsは、チャットやビデオ会議、ファイル共有などを統合したコラボレーションツールとして、多くの企業で利用されています。しかし、日々蓄積されるチャットメッセージの中から必要な情報を探し出すのは困難です。Fessを使用することで、Teams内のメッセージを横断的に全文検索できるようになります。
今回は、Microsoft Teamsをクロールする方法について説明します。解説に使用するバージョンは、Fess 15.3.2です。
ユーザー認証の設定
Teamsの利用者が検索できるようにするには、Microsoft Entra IDで管理されているユーザー情報を利用します。Entra IDを使った認証については第69回 Microsoft Entra ID での認証方法を参照してください。
クロール用アプリの登録
次に、FessがTeamsにアクセスするためのクロール用アプリを作成します。
Teamsで使用する「APIのアクセス許可」以外は、アプリの登録は第70回 Microsoft SharePoint Online のクロールと同様ですので、手順はこちらを参照してください。
「APIアクセス許可の要求」で「アプリケーションの許可」をクリックし、必要なアクセス許可を検索して、チェックボックスにチェックを入れます。クロール対象によって必要な権限は異なるので、fess-ds-microsoft365 のREADMEを参考にしてください。
- Team.ReadBasic.All
- Group.Read.All
- Channel.ReadBasic.All
- ChannelMessage.Read.All
- ChannelMember.Read.All
- User.Read.All
チェックを入れ終わったら「アクセス許可の追加」をクリックします。

APIのアクセス許可画面に戻ったら「xxxxに管理者の同意を与えます」をクリックします。確認ダイアログ画面が表示されるので「はい」をクリックしてください。

左側に表示されている「概要」をクリックし、「アプリケーション(クライアント)ID」を確認してください。このアプリケーションIDはFessでのクロール設定で使用しますので控えておいてください。

クロール設定に必要なID情報
アプリのクライアントID以外にも必要になる情報があるので、ここで解説します。
テナントID
Azure Portalの「Microsoft Entra ID」をクリックします。ここで表示されている「テナントID」を確認します。

チームID
Teamsで対象チーム名の「…」>「リンクのコピー」をクリックします。

テキストファイルなどに貼り付け、URL内の groupId= を探してください。下記の <team-id> の部分がチームIDになります。
https://teams.microsoft.com/l/team/<channel-id>/conversations?groupId=<team-id>&tenantId=<tenant-id>
チャネルID
チームIDと同様に、対象チャネル名の「…」>「リンクのコピー」をクリックします。コピーしたリンクをテキストファイルなどに貼り付け、URL内の/channel/の直後にある部分を確認してください。下記の <channel-id> の部分がチャネルIDになります。
https://teams.microsoft.com/l/channel/<channel-id>/[channel-name]?groupId=<team-id>&tenantId=<tenant-id>
<channel-id> はURLエンコードされているので、クロール設定ではデコードした値を設定してください。
【デコード前】19%3A123456789%40thread.tacv2
【デコード後】19:123456789@thread.tacv2
プラグインのインストール
Fessの管理画面にログインし、管理画面の左メニューで「システム」→「プラグイン」をクリックします。画面左上の「インストール」をクリックして、インストールするプラグインを選択します。ここでは、プルダウンメニューから「fess-ds-microsoft365-15.3.0」を選択し、「インストール」ボタンをクリックしてプラグインをインストールしてください。

インストール後、プラグインの一覧画面を表示して「fess-ds-microsoft365-15.3.0」が表示されていることを確認します。

クロール設定
Fessの管理画面にログインし、「クローラ」→「データストア」→「新規作成」をクリックします。設定が必要な項目は以下の5つです。
- 名前
- ハンドラ
- パラメータ
- スクリプト
- パーミッション
「名前」にはこのクロール設定名として任意の文字列を入力し、「ハンドラ」は「TeamsDataStore」を選択してください。
パラメータ
Teamsに存在するすべてのチャネルをクロール
「パラメータ」は、以下を入力します。この場合、Teamsに存在するアクセス可能なチャネルをクロールします。
tenant=テナントID
client_id=クロール用アプリのクライアントID
client_secret=クロール用アプリのシークレットの値
チームを指定する
指定したチーム内のメッセージをクロールする場合は、チームIDを指定します。複数指定する場合は、カンマ区切りでIDを指定できます。以下はチームを指定する場合のクロール設定です。
tenant=テナントID
client_id=クロール用アプリのクライアントID
client_secret=クロール用アプリのシークレットの値
team_id=チームID
チャネルを指定する
チャネルを指定する場合は、チームIDとチャネルIDを指定します。以下はチャネルを指定する場合のクロール設定です。
tenant=テナントID
client_id=クロール用アプリのクライアントID
client_secret=クロール用アプリのシークレットの値
team_id=チームID
channel_id=チャネルID
スクリプト
「スクリプト」は、以下を入力してください。
title=message.title
content=message.content
created=message.created_date_time
last_modified=message.last_modified_date_time
url=message.web_url
role=message.roles
パーミッション
「パーミッション」は、デフォルトで「{role}guest」が入っています。このままだと、権限を持たないユーザーも検索できてしまうので、「{role}guest」を削除して、空欄にします。
入力後は「作成」ボタンをクリックして、設定を保存してください。
検索
管理画面の左メニュー「システム」→「スケジューラ」で「Default Crawler」のジョブを開きます。「今すぐ開始」をクリックしてクローラを開始し、ジョブの状態が「実行中」から完了状態に戻るまで待ちます。
クロール完了後、管理画面からログアウトして、Entra IDユーザーでFessにログインします。ログイン後に、検索画面から検索語を入力して検索してください。Entra IDユーザーでログインしているので、権限が一致する結果のみ表示されます。

* * *
今回は、FessでMicrosoft Teamsのメッセージをクロールし、全文検索できるようにする方法を紹介しました。FessとTeamsを連携させることで、複数のチームやチャネルに散在するメッセージを横断的に検索できるようになり、必要な情報をすばやく見つけることができます。また、Teamsのアクセス権限も取得できるため、ユーザーごとに適切な検索結果のみを表示することが可能です。Teamsを活用している環境で検索性に課題を感じている場合は、ぜひFessによる全文検索をお試しください。