SharePoint では半ば常識のように「5,000 件問題」が話題になりますが、あまりに有名になりすぎてしまったがために今日時点での正しい情報を知っている方が少ないようにも思います。

SharePoint Online では、このような制限の緩和やパフォーマンス向上に関するアップデートも日夜行われており、「5,000 件問題」への対応も大きく進んでいます。

そうして制限が緩和されたことにより、現在では「20,000 件」が新たな制限となっていますが、その制限も多くの場合に回避できます。

今回は検証結果と合わせて紹介したいと思います。

5,000 件問題

リストやライブラリに保存されたアイテムに対して一括して処理を行う場合、対象のアイテムが 5,000 件を超えた場合にはその処理がブロックされてしまうというものです。

たとえば、リストに 10,000 件のアイテムが格納されていた場合、特定の列で並び変えの操作を行うと 10,000 件を走査して値の大小判定を行い並び替えた結果を画面に表示するわけですが、この操作の対象が 5,000 件を超えているため並び替え操作はブロックされてしまいます。つまりは、5,000 件以上のアイテムが保存されているから起こる問題ではなく、5,000 件以上のアイテムを同時に表示しようとしたり、並び替えようとしたから起こる問題というわけです。

そのため、SharePoint に詳しい方であれば、一度の処理対象が 5,000 件を越えないようにビューの作り方やフォルダーの作り方などを工夫したり、また、列インデックスの機能を利用するなどで対処してきました。

そうしたことに加えて、そもそも今どきのデータ量として 5,000 件というのは少なすぎるというわけです。

SharePoint Online モダン リスト

SharePoint Online のモダン リストでは、そうした制限が緩和されています。例えば、作成したばかりのカスタムリストに 20,000 件のアイテムを保存して表示してみましょう。

ちゃんと表示されます。また、クラシック リストではどうでしょうか?

こちらもちゃんと表示されます。違いはどこにあるかというと、並び替えなどの操作を行った場合です。たとえば Column1 という列で並び替えを行ってみます。

モダン リストの場合はちゃんと表示されますね。クラシック リストでも試してみましょう。

こちらはエラーになりました。このようにモダン リストでは、大量にアイテムが保存されたリストでの操作性が改善されています。また、モダン リストではアイテムを一度に読み込んで画面に描画するといったことを行わず、画面のスクロールに従って少しずつアイテムが表示される動作になっています。こうした動作も、モダン リストでより多くのデータを扱えるようにするための工夫のようです。

20,000 件問題

SharePoint Online モダン リストは、今日時点では 20,000 件のアイテムまでであればユーザーは特別な配慮なく保存していくことができます。問題が発生するのは 20,000 件を超えている場合です。

たとえば、20,001 件のアイテムを保存したリストで並び替えの操作をしてみましょう。

エラーになってしまい並び替えができません。また、エラーメッセージを読んでみると 5,000 アイテムという数字が書かれています。

リスト内のアイテム数が、リスト ビューのしきい値 (5,000 アイテム) を超えています。

20,000 件のアイテムが保存されたリストでも動作するのにも関わらず、5,000 件のしきい値が問題だと書かれています。どういうことでしょうか?実は裏側の処理に秘密があります。

列インデックスの自動作成

今日時点の SharePoint Online のモダン リストでは、ユーザーが一定数以上のアイテムが保存されたリスト上で並び替え等の操作を行ったタイミングで「列インデックス」が自動作成されています。これは SharePoint リストにおけるデータベースのインデックスのようなものですね。この列インデックスが作成されている列においては、アイテム数が 5,000 件を超えるような場合でも並び替えなどの操作を行うことができるというわけです。

言い換えると、列インデックスが作成されていない場合、モダン リストであっても 5,000 件問題は残っています。この列インデックスの存在が重要なわけです。

では、どの列に対して列インデックスが作成されているのでしょうか?それを確認するためには、リストの設定(または、ライブラリの設定)を開きます。

設定の画面で、「列」セクションの一番下に [インデックス付きの列] というリンクがあるのでクリックすると次のように表示されます。

ここで「(自動作成されました)」と書かれている列が、ユーザーの並べ替えなどの操作によって自動的に作成された列インデックスです。

この列インデックスが自動作成される動作は、アイテム数が「20,000 件以下の場合にのみ有効」です。つまりこれが、モダン リストの「20,000 件問題」というわけです。

列インデックスの手動作成

もし万が一、アイテム数が 20,000 件を超えるまで列インデックスが作成されていなかった場合には、先ほど「20,000 件問題」で紹介したエラーが表示されます。では、どうやって回避するのかというと、列インデックスを手動で作成するだけです。

SharePoint Online では、どれだけ多くのアイテムが保存されているリストであっても列インデックスを手動で作成することができるようになっています。

手順などはこちらを。

Add an index to a SharePoint column
https://support.office.com/en-us/article/f3f00554-b7dc-44d1-a2ed-d477eac463b0

列インデックスを作成することで、モダン リストでは 20,000 件以上のアイテムが保存されていたとしても問題なく並び替えなどの操作を行うことができます。

とはいえ、実際の利用シーンを思い浮かべてみると、20,000 件を超えるまでに一度も並び替えが行われない列が、20,000 件を超えたタイミングで急に並び替えに利用されることは少ないかと思います。そのため、大多数のユーザーはおそらく意識することのない部分かと思います。

ただし、注意点としてどんな種類の列でも列インデックスが作成できるかというとそうではありません。先のリンク先の下側に列インデックスに対応している列、対応していない列の記載がありますので確認してみてください。

記録として転記しておきます。

サポートしている列タイプサポートしていない列タイプ
  • 1 行テキスト
  • 選択肢
  • 数値
  • 通貨
  • 日付と時刻
  • ユーザーまたはグループ
  • 管理されたメタデータ
  • はい/いいえ
  • 参照
  • 複数行テキスト
  • 選択肢(複数選択)
  • 集計値
  • ハイパーリンクまたは画像
  • ユーザーまたはグループ(複数選択)
  • 外部データ
  • カスタム列

さいごに

というわけで、今日時点の SharePoint Online においては、特にモダン リストを利用する場合、「5,000 件問題」をほとんど気にすることなくアイテムを登録していくことができます。SharePoint Online におけるリストに保存できるアイテムの最大数は 30,000,000 件となっています。

SharePoint Online の「5,000 件問題」においては、あまりに有名になりすぎたため、その後の正しい情報が伝わっていない印象があります。間違った情報によって SharePoint Online の用途を制限してしまうのは非常にもったいないことだと思います。

また、API などから操作を行う場合には引き続き 5,000 件の制限が残っています。Microsoft Ignite などでの発表を見る限りでは、API 操作においても自動インデックスなどの対応が予定されているようですので、開発者の方などは定期的に新しい情報を確認してみても良いかもしれません。