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のアクセス許可

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

管理者の承認

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

クライアントIDの確認

クロール設定に必要なID情報

アプリのクライアントID以外にも必要になる情報があるので、ここで解説します。

テナントID

Azure Portalの「Microsoft Entra ID」をクリックします。ここで表示されている「テナントID」を確認します。

テナントID

チームID

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

チームID

テキストファイルなどに貼り付け、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ユーザーでログインしているので、権限が一致する結果のみ表示されます。

Teamsの検索結果

* * *

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