SharePoint 5000件問題とは?原因から解決策まで徹底解説

プログラミング・IT

SharePointのリストやライブラリを使っていると、ある日突然「リスト ビューのしきい値を超えています」というエラーメッセージに遭遇することがあります。
この問題は「SharePoint 5000件問題」として知られており、多くの管理者やユーザーを悩ませています。

この記事では、SharePoint 5000件問題の原因、影響、そして具体的な解決策を分かりやすく解説します。

スポンサーリンク
  1. SharePoint 5000件問題とは
    1. 重要な誤解の解消
  2. なぜ5000件の制限があるのか
    1. SQL Serverのロックエスカレーション
    2. マルチテナント環境の保護
  3. 5000件を超えるとどうなるのか
    1. 1. ビューの表示エラー
    2. 2. リスト設定へのアクセス制限
    3. 3. PowerApps・Power Automateへの影響
    4. 4. 並べ替えやフィルタリングの制限
  4. SharePoint 5000件問題の解決方法
    1. 方法1: インデックス列を作成する【最も効果的】
    2. 方法2: フィルタリングされたビューを作成する
    3. 方法3: フォルダーで整理する
    4. 方法4: 古いアイテムを削除またはアーカイブする
    5. 方法5: 複数のリストに分割する
    6. 方法6: モダンエクスペリエンスを使用する
    7. 方法7: ページングを調整する
  5. PowerApps・Power Automateでの対策
    1. PowerAppsでの対策
    2. Power Automateでの対策
  6. SharePoint Onlineではしきい値を変更できない
    1. オンプレミス版では変更可能
  7. 自動インデックス作成機能
    1. 自動インデックス作成の条件
    2. 自動インデックスに頼らない
  8. 5000件問題の予防策
    1. 1. 設計段階でインデックスを計画する
    2. 2. データ構造を見直す
    3. 3. 定期的なメンテナンス
    4. 4. ユーザー教育
    5. 5. メタデータの活用
  9. よくある質問
    1. Q1. リストには何件まで保存できますか?
    2. Q2. すでに5000件を超えてしまった場合、インデックスを作成できますか?
    3. Q3. インデックスはいくつ作成すればいいですか?
    4. Q4. ルックアップ列にインデックスを作成できますか?
    5. Q5. フォルダーとメタデータ、どちらを使うべきですか?
  10. まとめ
  11. 参考情報

SharePoint 5000件問題とは

SharePoint 5000件問題とは、リストビューのしきい値(List View Threshold)による制限のことです。
既定では、1回のクエリで処理できるアイテム数が5000件に制限されています。

この制限を超えると、以下のようなエラーメッセージが表示されます。

このリスト内の項目の数が、リスト ビューのしきい値 (5,000 項目) を超えています。
サーバーの負荷が過度に発生するタスク (すべてのリスト アイテムを含むタスクなど) は現在禁止されています。

または

このビューは、管理者が設定したリスト ビューのしきい値 (アイテム 5000 個) を超えるため、表示できません。

重要な誤解の解消

多くの人が誤解していますが、SharePointリストに5000件までしか保存できないわけではありません

実際には、SharePointリストには最大3000万件のアイテムを保存できます。
問題は「保存」ではなく、「表示」や「クエリ処理」にあります。

なぜ5000件の制限があるのか

5000件の制限は、サーバーのパフォーマンスを保つために設けられています。

SQL Serverのロックエスカレーション

SharePointのデータは、バックエンドのSQL Serverデータベースに保存されています。
SQL Serverは通常、データの正確性を保つために「行レベルロック」を使用します。

しかし、5000行以上のデータを一度に処理すると、個別の行ロックではなく「テーブル全体のロック」に切り替わります。
これをロックエスカレーションと呼びます。

テーブル全体がロックされると、その処理が終わるまで他のユーザーの操作がブロックされてしまいます。
これを防ぐため、SharePointは5000件を超える処理を最初から制限しているのです。

マルチテナント環境の保護

SharePoint Onlineは、複数の組織が同じインフラを共有するマルチテナント環境です。
1つの組織の大量データ処理が、他の組織のパフォーマンスに影響しないよう、しきい値が設定されています。

5000件を超えるとどうなるのか

リストのアイテム数が5000件を超えると、以下のような問題が発生します。

1. ビューの表示エラー

5000件以上のアイテムを返すビューにアクセスすると、エラーメッセージが表示されデータが表示されません。

2. リスト設定へのアクセス制限

リスト全体が5000件を超えている場合、リストの設定画面にアクセスできなくなることがあります。
設定の変更や新しい列の追加ができなくなります。

3. PowerApps・Power Automateへの影響

SharePointリストをPowerAppsやPower Automateから利用している場合、ある日突然アプリが動かなくなることがあります。

PowerAppsでFilter関数やSortByColumns関数を使って委任の問題を回避していても、SharePointリスト側で5000件を超えるとエラーが発生します。

4. 並べ替えやフィルタリングの制限

インデックスが設定されていない列での並べ替えやフィルタリングができなくなります。

SharePoint 5000件問題の解決方法

5000件問題を解決するには、いくつかの方法があります。
状況に応じて、適切な方法を選択してください。

方法1: インデックス列を作成する【最も効果的】

インデックスを作成することで、5000件を超えるリストでも効率的にデータを取得できるようになります。

インデックスとは

インデックスは、データベースで検索を高速化する仕組みです。
本の索引のように、指定した列の値を事前に整理しておくことで、データの検索や並べ替えが効率的になります。

インデックスを作成できる列の種類

インデックスは、すべての列に作成できるわけではありません。
以下の列タイプではインデックスを作成できます。

  • 1行テキスト
  • 選択肢(単一選択)
  • 数値
  • 通貨
  • 日付と時刻
  • ユーザーまたはグループ(単一選択)
  • Yes/No
  • ルックアップ列(制限あり)

インデックスを作成できない列の種類

以下の列タイプではインデックスを作成できません。

  • 複数行テキスト
  • 選択肢(複数選択可)
  • ハイパーリンクまたは画像
  • 計算列
  • カスタム列
  • ユーザーまたはグループ(複数選択可)
  • 外部データ

インデックスの作成手順

  1. SharePointリストまたはライブラリを開く
  2. 設定アイコン(歯車マーク)をクリック
  3. 「リストの設定」または「ライブラリの設定」を選択
  4. 「列」セクションの「インデックス付き列」をクリック
  5. 「新しいインデックスの作成」をクリック
  6. 「このインデックスのプライマリ列」からインデックスを作成したい列を選択
  7. 「作成」をクリック

インデックスの制限と推奨事項

  • 1つのリストまたはライブラリに最大20個のインデックスを作成できます
  • ルックアップ列のインデックスは最大8個までです
  • 頻繁にフィルタリングや並べ替えに使用する列にのみインデックスを作成してください
  • すべての列にインデックスを作成する必要はありません

推奨されるインデックス列

以下の列にはインデックスを作成しておくことをお勧めします。

  • Title(タイトル)
  • Modified(更新日時)
  • Created(作成日時)
  • Modified By(更新者)
  • Created By(作成者)

これらの列にインデックスがあれば、基本的なビューを構成できます。

複合インデックス

プライマリ列とセカンダリ列を組み合わせた複合インデックスを作成することもできます。
これにより、2つの列を組み合わせた条件でのフィルタリングが効率化されます。

方法2: フィルタリングされたビューを作成する

インデックス付き列を使用してフィルタリングされたビューを作成すれば、5000件を超えるリストでも表示できます。

フィルタリングされたビューの作成手順

  1. リストまたはライブラリを開く
  2. 「すべてのアイテム」または「すべてのドキュメント」の横にある下矢印をクリック
  3. 「ビューの作成」を選択
  4. ビュー名を入力(例: 「2025年作成」)
  5. 「フィルター」セクションで、インデックス付き列を使用した条件を設定
  • 例: 「作成日時」が「2025年1月1日以降」
  1. 「OK」をクリック

フィルター設定の重要なポイント

フィルターを複数設定する場合、最初のフィルター条件はインデックス付き列を使用する必要があります

インデックスが設定されていない列を最初のフィルター条件にすると、エラーが発生します。

正しい例:

  1. 作成日時(インデックス付き) が 2025年1月1日以降
  2. ステータス(インデックスなし) が 「進行中」

誤った例:

  1. ステータス(インデックスなし) が 「進行中」
  2. 作成日時(インデックス付き) が 2025年1月1日以降

方法3: フォルダーで整理する

フォルダーを使用してアイテムを分類し、各フォルダー内のアイテム数を5000件未満に抑える方法もあります。

フォルダー整理のメリット

  • 視覚的に分かりやすい
  • ユーザーが目的のデータに素早くアクセスできる
  • フォルダーごとに権限を設定できる

フォルダー整理の注意点

  • 各フォルダー内のアイテム数を5000件未満に保つ必要がある
  • フォルダーもアイテム数にカウントされる
  • フォルダー階層が深くなりすぎないよう注意

フォルダーの作成例

年度ごと、部署ごと、プロジェクトごとなど、業務に合わせた分類でフォルダーを作成します。

  • 2023年度
  • 2024年度
  • 2025年度

または

  • 営業部
  • 開発部
  • 総務部

方法4: 古いアイテムを削除またはアーカイブする

不要になった古いデータを定期的に削除または別のリストに移動することで、アイテム数を5000件未満に保ちます。

手動削除のリスク

手動削除には以下のリスクがあります。

  • 誤って必要なデータを削除してしまう
  • 削除し忘れる
  • 作業に時間がかかる

SharePointの保持ポリシーを使用した自動削除

SharePointの保持ポリシー機能を使えば、一定期間経過したアイテムを自動的に削除できます。

  1. リストまたはライブラリの設定を開く
  2. 「情報管理ポリシー設定」を選択
  3. 保持ポリシーを設定
  4. 削除の条件(例: 作成から1年後)を指定

Power Automateを使用した自動削除

Power Automateで定期的に古いアイテムを削除するフローを作成する方法もあります。

この方法は、SharePointの機能だけでは実現できない複雑な条件での削除に適しています。

方法5: 複数のリストに分割する

1つのリストに大量のデータを集約せず、用途や種類ごとに複数のリストに分割します。

分割の例

元のリスト: 全社員の勤怠記録(15000件)

分割後:

  • 2023年度勤怠記録(4000件)
  • 2024年度勤怠記録(4500件)
  • 2025年度勤怠記録(3000件)

または

  • 営業部勤怠記録(3000件)
  • 開発部勤怠記録(4000件)
  • 総務部勤怠記録(2000件)

方法6: モダンエクスペリエンスを使用する

SharePointには「クラシックエクスペリエンス」と「モダンエクスペリエンス」の2つのインターフェースがあります。

モダンエクスペリエンスは、大規模なリストやライブラリを扱う際のパフォーマンスが向上しています。
クラシックエクスペリエンスで発生するエラーが、モダンエクスペリエンスでは発生しないことがあります。

モダンエクスペリエンスへの切り替え

  1. リストまたはライブラリを開く
  2. 設定アイコンをクリック
  3. 「リストの設定」を選択
  4. 「詳細設定」をクリック
  5. 「リスト操作」で「モダンエクスペリエンス」を選択

方法7: ページングを調整する

ビューに表示するアイテム数を少なくすることで、パフォーマンスを改善できます。

ページングの設定手順

  1. ビューの編集画面を開く
  2. 「アイテムの制限」セクションで表示するアイテム数を設定
  3. 既定値は30件ですが、100件程度に設定することも可能

大量のアイテムを一度に表示する必要がない場合は、この方法で読み込み時間を短縮できます。

PowerApps・Power Automateでの対策

PowerAppsやPower Automateを使用している場合は、追加の対策が必要です。

PowerAppsでの対策

1. インデックスが必要な列を特定する

以下の関数で使用している列にインデックスを作成します。

  • Filter
  • LookUp
  • Sort
  • SortByColumns
  • GroupBy

2. インデックス作成の実務的な手順

  1. アプリ完成後にデータ数が5000以上になる可能性のあるリストをリストアップ
  2. PowerAppsの開発画面左の検索機能でそのリスト名を検索
  3. 上記の関数内の引数を確認
  4. SharePointリストで該当する列にインデックスを作成

Power Automateでの対策

Power Automateでも、大量のアイテムを取得する際はインデックス付き列でフィルタリングします。

「SharePointから複数の項目を取得」アクションでは、必ずインデックス付き列を使用したフィルタークエリを設定してください。

SharePoint Onlineではしきい値を変更できない

重要なポイントとして、SharePoint Onlineではリストビューのしきい値を変更することはできません

5000という数値はMicrosoftによって固定されており、管理者でも変更できません。
これは、マルチテナント環境のパフォーマンスを保つための仕様です。

オンプレミス版では変更可能

SharePoint Serverのオンプレミス版では、サーバー全体管理からしきい値を変更できます。
ただし、変更は慎重に行う必要があり、安易にしきい値を上げることは推奨されません。

自動インデックス作成機能

SharePoint Onlineには、自動的にインデックスを作成する機能があります。

自動インデックス作成の条件

  • リストのアイテム数が2500件以上20000件未満の場合
  • ユーザーがフィルターや並べ替えを使用した場合

自動インデックスに頼らない

自動インデックスは便利ですが、以下の理由から計画的な手動インデックス作成を推奨します。

  • 20000件を超えると自動作成されない
  • 必要な列に必ずしもインデックスが作成されるとは限らない
  • 5000件を超えてからでは設定変更が困難になる

5000件問題の予防策

問題が発生する前に、以下の予防策を実施しましょう。

1. 設計段階でインデックスを計画する

リストやライブラリを作成する際、将来5000件を超える可能性があるか検討します。
超える可能性がある場合は、最初からインデックスを設定しておきます。

2. データ構造を見直す

すべてのデータを1つのリストに集約するのではなく、適切に分割できないか検討します。

3. 定期的なメンテナンス

古いデータの削除やアーカイブを定期的に実施します。

4. ユーザー教育

チームメンバーに5000件問題について説明し、データの整理方法を共有します。

5. メタデータの活用

フォルダーだけに頼らず、メタデータ(カスタム列)を活用してデータを分類します。
メタデータは検索やフィルタリングに優れており、インデックスとの相性も良好です。

よくある質問

Q1. リストには何件まで保存できますか?

SharePointリストには最大3000万件のアイテムを保存できます。
5000件の制限は、1回のビューやクエリで処理できるアイテム数の上限です。

Q2. すでに5000件を超えてしまった場合、インデックスを作成できますか?

SharePoint Onlineでは、5000件を超えていてもインデックスを作成できることがあります。
ただし、SharePoint 2013のオンプレミス版では、5000件を超えるとインデックス作成がブロックされます。

できるだけ早めに対策することをお勧めします。

Q3. インデックスはいくつ作成すればいいですか?

最大20個まで作成できますが、頻繁に使用する列のみにインデックスを作成してください。
通常は、Title、Created、Modified、Created By、Modified Byにインデックスを作成すれば十分です。

Q4. ルックアップ列にインデックスを作成できますか?

ルックアップ列にもインデックスを作成できますが、最大8個までという制限があります。
また、ルックアップ列のインデックスでは並べ替えができません。

Q5. フォルダーとメタデータ、どちらを使うべきですか?

両方を組み合わせて使用するハイブリッドアプローチが効果的です。
フォルダーで大まかに分類し、メタデータで詳細な検索やフィルタリングを可能にします。

まとめ

SharePointの5000件問題は、サーバーのパフォーマンスを保つための重要な制限です。

この制限は、「保存」ではなく「表示・クエリ処理」に関するものであり、適切な対策を講じれば大規模なリストでも効率的に運用できます。

重要なポイント:

  1. インデックス列を作成する(最大20個)
  2. フィルタリングされたビューを使用する
  3. フォルダーやメタデータで整理する
  4. 古いデータを定期的に削除またはアーカイブする
  5. PowerApps/Power Automateでは使用する列にインデックスを設定する

設計段階から5000件問題を意識し、計画的にインデックスを作成することで、問題を未然に防ぐことができます。

すでに5000件を超えてしまった場合でも、インデックスの作成やビューの最適化によって解決できることが多いので、焦らず対処してください。

参考情報

コメント

タイトルとURLをコピーしました