Microsoft SharePoint Onlineは、多くの企業でドキュメント管理やチーム間の情報共有に活用されています。しかし、蓄積されるファイルやページが増えるにつれて、必要な情報を素早く見つけ出すことが難しくなることがあります。Fessを利用すれば、SharePoint Online内のサイトページ、リスト、ドキュメントライブラリを横断的に全文検索でき、さらにSharePointで設定された権限に基づいてユーザーごとに適切な検索結果を表示できます。
今回は、SharePoint Onlineをクロールする方法について説明します。解説に使用するバージョンは、Fess 15.3.2です。
ユーザー認証の設定
SharePoint Onlineの利用者が検索できるようにするには、Microsoft Entra IDで管理されているユーザー情報を利用します。Entra IDを使った認証については第69回 Microsoft Entra ID での認証方法を参照してください。
クロール用アプリの登録
次に、FessがSharePoint Onlineにアクセスするためのクロール用アプリを作成します。
Azure Portalにログインして「Microsoft Entra ID」をクリックします。左メニュー「管理」→「アプリの登録」をクリックし、上部に表示されている「新規登録」をクリックします。
「名前」を入力し、サポートされているアカウントの種類で「この組織ディレクトリのみに含まれるアカウント」を選択して「登録」をクリックします。
左側に表示されている「証明書とシークレット」→「新しいクライアントシークレット」をクリックします。
「説明」への入力は任意ですが、ここではアプリと同じ名前を入れておきます。「有効期限」を選択して「追加」をクリックします。
追加された行の値をコピーしておきます。このキーの値は再度表示されないため、別画面に遷移する前に必ず控えておいてください。この値はFessでのクロール設定で使用します。
次に左側に表示されている「APIのアクセス許可」をクリックし、「アクセス許可の追加」をクリックします。
APIは「Microsoft Graph」を選択します。
「APIアクセス許可の要求」で「アプリケーションの許可」をクリックし、必要なアクセス許可を検索して、チェックボックスにチェックを入れます。クロール対象によって必要な権限は異なるので、fess-ds-microsoft365のREADMEを参考にしてください。
- Files.Read.All
- Group.Read.All
- Sites.Read.All
チェックを入れ終わったら「アクセス許可の追加」をクリックします。
APIのアクセス許可画面に戻ったら「[テナント名]に管理者の同意を与えます」をクリックします。確認ダイアログが表示されるので、「はい」をクリックしてください。
左側に表示されている「概要」をクリックし、「アプリケーション(クライアント)ID」を確認してください。このIDはFessでのクロール設定で使用しますので、控えておいてください。
クロール設定に必要なID情報
アプリのクライアントID以外にも必要になる情報がありますので、ここで解説します。
テナントID
Azure Portalの「Microsoft Entra ID」をクリックします。ここで表示されている「テナントID」を確認します。
GUID
Azure Portalの「Microsoft Entra ID」→左メニューの「管理」→「グループ」をクリックします。「すべてのグループ」をクリックして、サイト名と同じグループ名を探してクリックしてください。
ここで表示されたオブジェクトID(GUID)をコピーしておきます。Fessのパーミッションとして指定する場合は、GUIDの先頭に「{group}」を付与して設定することで、Fess上でグループの権限として扱われます。
サイトID
Graph Explorerを使用します。 右上の「Sign in」ボタンをクリックし、対象テナントの管理者アカウントでサインインしたら、リクエスト入力欄に以下を入力します。
https://graph.microsoft.com/v1.0/sites/{hostname}:/sites/{site-name}
- {hostname}:SharePointのドメイン名(例:
contoso.sharepoint.com) - {site-name}:サイトのURLの最後の部分(例:
sales)
「Run Query」をクリックして、下部に表示された結果を確認します。"id"に出力される値がサイトIDです。
リストID
リストIDの取得もGraph Explorerを使用します。 リクエスト入力欄には以下を入力します。
https://graph.microsoft.com/v1.0/sites/{hostname}:/sites/{site-name}:/lists
- {hostname}:SharePointのドメイン名(例:
contoso.sharepoint.com) - {site-name}:サイトのURLの最後の部分(例:
sales)
「Run Query」をクリックして、下部に表示された結果を確認します。"id"に出力される値がリストIDです。
プラグインのインストール
Fessの管理画面にログインし、管理画面の左メニューで「システム」→「プラグイン」をクリックします。画面左上の「インストール」をクリックして、インストールするプラグインを選択します。ここでは、プルダウンメニューから「fess-ds-microsoft365-15.3.0」を選択し、「インストール」ボタンをクリックしてプラグインをインストールしてください。
インストール後、プラグインの一覧画面を表示して「fess-ds-microsoft365」が表示されていることを確認します。
クロール設定
クロールはデータストアクロールで行います。以下のデータストアタイプを使ってSharePoint Onlineをクロールできます。
| 項目 | 説明 |
|---|---|
| sharePointPageDataStore | サイトページ、ニュース記事などをクロールする |
| sharePointListDataStore | リストをクロールする |
| sharePointDocLibDataStore | ドキュメントライブラリ情報(メタデータ)をクロールする |
| oneDriveDataStore | ドキュメントライブラリ内のファイルをクロールする |
サイト内にあるページをクロールする
以下は指定したサイト内にあるページ、ニュース記事などをクロールする場合の設定例です。
Fessの管理画面にログインし、「クローラ」→「データストア」→「新規作成」をクリックします。設定が必要な項目は以下の5つです。
- 名前
- ハンドラ
- パラメータ
- スクリプト
- パーミッション
「名前」にはこのクロール設定名として任意の文字列を入力し、「ハンドラ」は「sharePointPageDataStore」を選択してください。「パラメータ」は、以下を入力してください。
tenant=テナントID
client_id=クロール用アプリのクライアントID
client_secret=クロール用アプリのシークレットの値
site_id=サイトID
default_permissions={group}GUIDの値
「スクリプト」は、以下を入力してください。
title=page.title
content=page.content
mimetype=page.mimetype
created=page.created
last_modified=page.last_modified
url=page.url
role=page.roles
「パーミッション」は、デフォルトで「{role}guest」が入っています。このままだと、権限を持たないユーザーも検索できてしまうので、「{role}guest」を削除して、空欄にします。
入力後は「作成」ボタンをクリックして、設定を保存してください。
管理画面の左メニュー「システム」→「スケジューラ」で「Default Crawler」のジョブを開きます。「今すぐ開始」をクリックしてクローラを開始し、ジョブの状態が「実行中」から完了状態に戻るまで待ちます。
クロール完了後、管理画面からログアウトして、Entra IDユーザーでFessにログインします。ログイン後、検索画面から検索語を入力して検索してください。Entra IDユーザーでログインしているので、権限が一致する結果のみ表示されます。
リストをクロールする
リストをクロールする場合は、以下を設定します。
Fessの管理画面にログインし、「クローラ」→「データストア」→「新規作成」をクリックします。
「名前」にはこのクロール設定名として任意の文字列を入力し、「ハンドラ」は「sharePointListDataStore」を選択してください。
「パラメータ」は、以下を入力してください。
tenant=テナントID
client_id=クロール用アプリのクライアントID
client_secret=クロール用アプリのシークレットの値
site_id=サイトID
list_id=リストID
default_permissions={group}GUIDの値
「スクリプト」は、以下を入力してください。
title=item.title
content=item.content
created=item.created
last_modified=item.modified
url=item.url
role=item.roles
「パーミッション」は「{role}guest」を削除して、空欄にします。
入力後は「作成」ボタンをクリックして、設定を保存してください。
ページクロールと同様にクロールジョブを実行し、クロール完了後にEntra IDユーザーで検索してみてください。サイト内に作成されたリストのアイテムが検索できます。
ドキュメントライブラリ情報をクロールする
ドキュメントライブラリ情報をクロールする場合は、以下を設定します。
「名前」は任意の文字列を入力し、「ハンドラ」は「sharePointDocLibDataStore」を選択してください。
「パラメータ」は、以下を入力してください。
tenant=テナントID
client_id=クロール用アプリのクライアントID
client_secret=クロール用アプリのシークレットの値
「スクリプト」は、以下を入力してください。
title=doclib.name
content=doclib.content
mimetype=doclib.mimetype
created=doclib.created
last_modified=doclib.last_modified
url=doclib.web_url
role=doclib.roles
「パーミッション」は「{role}guest」を削除して、空欄にします。
入力後は「作成」ボタンをクリックして、設定を保存してください。
先ほどと同様に、クロールジョブを実行してインデックスを作成してください。
ドキュメントライブラリ内のファイルをクロールする
ドキュメントライブラリ内のファイルをクロールする場合は、以下を設定します。
「名前」は任意の文字列を入力し、「ハンドラ」は「oneDriveDataStore」を選択してください。
「パラメータ」は、以下を入力してください。
tenant=テナントID
client_id=クロール用アプリのクライアントID
client_secret=クロール用アプリのシークレットの値
exclude_pattern=.*PersonalCacheLibrary.*
shared_documents_drive_crawler=true
user_drive_crawler=false
group_drive_crawler=false
以下はパラメーターに関する補足です。その他のパラメーターについては、fess-ds-microsoft365のREADMEを参照してください。
| パラメーター | 説明 |
|---|---|
| exclude_pattern | 除外するライブラリ名の正規表現パターンを指定 |
| shared_documents_drive_crawler | 共有ドキュメントをクロール対象とするか |
| user_drive_crawler | ユーザードライブをクロール対象とするか |
| group_drive_crawler | グループドライブをクロール対象とするか |
「スクリプト」は、以下を入力してください。
title=file.name
content=file.description + "\n" + file.contents
mimetype=file.mimetype
created=file.created
last_modified=file.last_modified
url=file.web_url
role=file.roles
「パーミッション」は「{role}guest」を削除して、空欄にします。
入力後は「作成」ボタンをクリックして、設定を保存してください。
設定保存後、クロールジョブを実行してインデックスを作成してください。
* * *
今回は、FessでSharePoint Onlineのサイトページ、リスト、ドキュメントライブラリをクロールする方法を紹介しました。FessとSharePoint Onlineを連携させることで、散在する情報を一元的に検索できるようになり、業務効率の向上が期待できます。SharePoint Onlineを活用している環境で検索性に課題を感じている場合は、ぜひFessによる全文検索をお試しください。



















