リモートワークを導入する企業が増えたことに伴い、さまざまな社内コミュニケーションツールが登場し、広く利用されています。その一つが、Microsoftが提供するコラボレーションプラットフォーム「Microsoft Teams」です。Fessでは、このMicrosoft Teams上での会話も検索対象にすることができます。

今回は、MicrosoftのクラウドID基盤「Azure Active Directory (Azure AD)」を使ったSSO環境で、Microsoft Teams内に作成されたチャネルでの会話をクロールして検索する方法を紹介します。チャネルで設定されたアクセス設定をクロール時に取り込めるので、権限が付与されているチャネルの会話のみ検索が可能です。

なお、今回はFess 13.15.0を使用して説明します。

ユーザー認証の設定

会話の閲覧権限があるユーザーだけに検索結果を表示するためには、Azure ADで管理されているユーザー情報を利用します。Azure ADとの連携方法については本連載の第30回の記事を参照してください。

プラグインのインストール

チャネル内の会話をクロールするためには、「fess-ds-office365プラグイン」が必要になります。Fessを起動後、fess-ds-office365プラグインをインストールします。

管理者としてログインし、管理画面の左メニューで「システム」→「プラグイン」をクリックします。画面左上の「インストール」をクリックして、インストールするプラグインを選択します。ここでは、プルダウンメニューから「fess-ds-office365-13.15.1」を選択し、「インストール」ボタンをクリックしてプラグインをインストールしてください。

プラグインのインストールの画面

プラグインのインストールの画面

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

プラグインの一覧画面

プラグインの一覧画面

クロール用アプリの登録

次に、クロール用のアプリをAzure ADに登録します。Azure Portalにログインし、「Azure AD」→「アプリの登録」をクリックします。

アプリの登録

アプリの登録

「新規登録」をクリックして、「名前」欄にアプリの名前を入力します。ここでは、「Fess-Crawl」としました。「サポートされているアカウントの種類」については以下のように設定し、「登録」ボタンをクリックします。

アプリの登録

アプリの登録

左側に表示されている「証明書とシークレット」→「新しいクライアントシークレット」をクリックします。「説明」欄への入力は任意ですが、今回はアプリと同じ名前を入力しておきます。有効期限を選択し、「追加」ボタンをクリックしてください。

新しいクライアントシークレットの追加

新しいクライアントシークレットの追加

追加されたシークレットの値をコピーしておきます。この値は再度表示されないため、別画面に遷移する前に記録しておいください。

クライアントシークレットの値

クライアントシークレットの値

次に「APIのアクセス許可」画面で「アクセス許可の追加」ボタンをクリックします。APIは「Microsoft Graph」を選択します。

APIのアクセス許可

APIのアクセス許可

「APIアクセス許可の要求」で「アプリケーションの許可」を選択し、以下のAPIを検索して追加します。追加後、「(テナント名)に管理者の同意を与えます」をクリックしてアクセス許可を付与します。

  • ChannelMember.Read.All
  • ChannelMessage.Read.All
  • Chat.Read.All
  • ChatMember.Read.All
  • Group.Read.All
  • User.Read.All

上記の設定に加えて、メッセージのAPIアクセスに関しては、Microsoftに利用申請を行う必要があります。公式ドキュメント「Protected APIs in Microsoft Teams」を参照して、フォームより利用申請をしてください。

クロール設定

クロール設定の前に、Azure Portalで「Azure Active Directory」の「テナントID」を確認します。

Azure Portalにログインして「Azure Active Directory」をクリックすると、「概要」画面が表示されます。基本情報に「テナントID」が表示されているので、これをコピーしておいてください。

Azure ADのテナントID

Azure ADのテナントID

次にFessの管理画面にログインします。「クローラ」→「データストア」→「新規作成」を開き、クロール設定を作成します。設定が必要な項目は以下の4つです。

  • 名前
  • ハンドラ
  • パラメータ
  • スクリプト

「名前」には任意の文字列を入力し、「ハンドラ」は「TeamsDataStore」を選択してください。

「パラメータ」は、以下のように入力してください。

  • tenant=テナントID
  • client_id=クロール用アプリのクライアントID
  • client_secret=クロール用アプリのクライアントシークレットの値
  • title_timezone_offset=+9
  • title_dateformat=yyyy/MM/dd HH:mm

「スクリプト」は、以下のように入力してください。

  • title=message.title
  • content=message.content
  • mimetype=”text/plain”
  • created=message.created_date_time
  • last_modified=message.created_date_time
  • url=message.web_url
  • role=message.roles

取得できる値のキーと値の説明は以下の通りです。「message」は投稿した会話を指しています。

キー
message.id messageのID
message.body messageのコンテンツ
message.channel_identity messageのチャネルID情報
message.chat_id messageのチャットID
message.created_date_time messageの作成日時
message.deleted_date_time messageの削除日時
message.etag messageのバージョン番号
message.from messageの送信者の詳細
message.importance messageの重要性
mmessage.last_edited_date_time messageの編集日時
message.last_modified_date_time messageの更新日時
message.locale messageのロケール
message.mentions messageのメンションリスト
message.reply_to_id messageの返信元のメッセージID
message.subject messageの件名
message.summary messageの概要
message.web_url messageのURL
message.roles messageのアクセス可能なロール
message.parent messageの返信元のメッセージ

クロールの実行

クロール設定ができたらクロールを実行してみましょう。

管理画面の左メニューの「システム」→「スケジューラ」で「Default Crawler」のジョブを開きます。「今すぐ開始」をクリックしてクローラを開始し、ジョブの状態が「実行中」から「有効」になるまで待ちます。

検索

検索画面には、「http://localhost:8080/sso/」でログインしてからアクセスできます。Microsoftのサインイン画面が表示されるので、Azure ADに登録されているアカウントでサインインしてください。

サインイン

サインイン

認証が成功すると検索画面が表示されるので、検索フォームに検索語を入れて検索してみましょう。検索結果には、ログインしているユーザーがアクセス権限を持っているドキュメントだけが表示されます。

検索結果画面

検索結果画面

今回は、Azure ADを用いたSSO環境で、Microsoft Teams内の閲覧権限があるメッセージを検索する方法を紹介しました。社内の共有フォルダなども含めて横断検索できるようにすると、より利便性は高まると思います。Microsoft Teamsを利用している場合は、Fessを使った検索環境の構築を検討してみてください。

著者紹介

菅谷 信介 (Shinsuke Sugaya)

Apache PredictionIOにて、コミッター兼PMCとして活動。また、自身でもCodeLibs Projectを立ち上げ、オープンソースの全文検索サーバFessなどの開発に従事。

本連載の内容やFessに関するご質問は公式フォーラムまで。