CSVから数百件のデータをSharePointリストに一括登録するフローを組んだのに、実行してみると想定より大幅に時間がかかる。
Apply to eachで1件ずつ「項目の作成」を呼び出す組み方は分かりやすい反面、件数が増えるほど実行時間が伸び、フローがタイムアウトぎりぎりで終わることもあります。
この記事では、SharePoint一括登録が遅くなる原因と、設定だけでできる高速化、$batchリクエストによる一括処理の手順を整理しています。
SharePoint一括登録が遅くなる原因
SharePoint一括登録が遅くなる主な原因は、Apply to eachの中で1件ずつAPI呼び出しを積み上げていることと、SharePointコネクタ側のスロットリングです。
SharePointコネクタには、接続ごとのAPI呼び出しに調整制限が設けられている点に注意が必要です。
出典:Microsoft Learn「SharePoint - Connectors」
1つの接続で1分あたり600回という制限が設けられており、Apply to eachで大量の項目を処理すると、この制限に触れて後続の呼び出しが待たされることも起こり得ます。
制限を超えた呼び出しは「429」のエラーコードで返され、しばらく待ってから再試行するよう案内されます。
出典:Microsoft Learn「低速な実行フローのトラブルシューティング」
まずはフローの実行履歴から、どのアクションで時間がかかっているかを確認します。
実行の詳細画面で各アクションの所要時間を見ると、Apply to eachの中の特定のアクションに時間が集中しているかどうかが分かり、どこから手を付けるべきかの判断材料になります。
まず試すSharePoint登録の高速化(設定だけでできる範囲)
$batchのような大がかりな変更をする前に、既存のフローの設定を見直すだけで速くなる範囲があります。
Apply to eachには並列実行の設定があり、既定の順次実行から並列実行に切り替えると、複数件の処理を同時に進められるようになります。
また、フィルタークエリ(Filter query)や上位カウント(Top count)のパラメータを使い、登録対象のデータをあらかじめ絞り込んでおくことで、そもそも処理する件数自体を減らせます。
ループの中に変数の設定や条件分岐など、SharePointへの呼び出しを伴わないアクションが多く含まれている場合は、ループの外に出せないか見直すことも有効です。
出典:Microsoft Learn「低速な実行フローのトラブルシューティング」
これらの見直しだけで実行時間が許容範囲に収まるなら、$batchへの切り替えは不要です。
件数がさらに多く、設定の見直しだけでは追いつかない場合に、次の$batchを検討します。
$batchリクエストで一括登録する手順
$batchは、複数件の登録リクエストをまとめて1回のHTTP呼び出しで送る方法で、SharePointのREST APIが持つ機能です。
Power Automateでは、HTTP要求アクションを使ってこのバッチエンドポイントを呼び出す形です。
具体的なリクエスト本文の書式は、境界文字列(boundary)を使ってリクエストを区切る独特な構造で、環境やAPIバージョンによって細部が異なる点に注意が必要です。
そのため、貼り付けてそのまま動く完全なリクエスト例をここに示すことは避け、代わりに手順の流れを示します。
Step1. 登録対象のデータをまとめて取得する
登録したいデータ一式を、CSVの解析結果やSharePointの別リストなど、1つの配列として用意します。
Step2. HTTP要求アクションでバッチエンドポイントを呼び出す
Power Automateに「HTTP」アクションを追加し、対象サイトのバッチエンドポイントに対してPOSTリクエストを送る構成にします。
リクエスト本文には、Step1で用意したデータの件数分の登録リクエストを、境界文字列で区切って含めます。
正確なリクエスト本文の構文は、SharePointのREST APIドキュメントで最新の仕様を確認してください。
Step3. レスポンスを確認して登録結果を判定する
バッチ呼び出しのレスポンスには、まとめて送った登録リクエストそれぞれの結果が含まれます。
一部の登録だけが失敗しているケースもあるため、レスポンスを解析して失敗した項目を特定し、必要であれば個別に再登録する処理を加えておくと安全です。
一括登録の高速化で押さえる注意点
$batchを含めて高速化の手を打つときは、次の2点を押さえておく必要があります。
まず、$batchを検討する件数の目安です。
数十件程度であれば、Apply to eachの並列実行とフィルタークエリの見直しだけで十分間に合うことが多く見られます。
目安として、数百件を超えるあたりから、1件ずつのAPI呼び出しの積み上げが無視できない時間になり、$batchへの切り替えを検討する価値が出てきます。
| 件数帯(目安) | 推奨アプローチ |
|---|---|
| 数十件程度 | 標準のApply to eachで足りることが多い |
| 数百件程度 | フィルタークエリで絞り込み、並列実行を有効にする |
| それ以上 | $batchでのリクエストまとめ送信を検討する |
もうひとつは429エラーへの対応です。
制限を超えた呼び出しには、しばらく待ってから再試行するよう案内するエラーメッセージが返る仕組みです。
出典:Microsoft Learn「低速な実行フローのトラブルシューティング」
HTTP要求アクションのリトライポリシーを設定しておくか、Apply to eachの実行間隔に遅延アクションを挟んでおくと、429エラーが出た場合でも処理が途中で止まらずに済む仕組みです。
添付ファイルを含むデータを一括登録する場合は、1件あたりの添付ファイルサイズが最大90MBまでという制限もあるため、対象データに大きなファイルが含まれていないかを事前に確認しておく必要があります。
出典:Microsoft Learn「SharePoint - Connectors」
登録先のリストをレポート用に整形する構成については、別の記事で扱っています。

SharePoint一括登録の遅さでお困りではありませんか?
「Apply to eachで組んだフローが件数の増加とともに遅くなっている」「429エラーが出てフローが途中で止まる」「$batchへの切り替えが自社の件数で必要なのか判断がつかない」
少しでもお心当たりがあれば、お気軽にご相談ください。
現在、Power Automateの業務自動化に関するお悩みをお伺いする 無料の個別相談 を実施しています。
SharePoint一括登録の高速化でよくある質問
Q. プレミアムライセンスは必要ですか?
使用するアクションによって異なるという回答になります。
標準のSharePointコネクタとApply to eachだけで組む場合は、不要なことが多い構成です。
一方、HTTP要求アクションはプレミアムコネクタに分類されるため、$batchを使う構成ではプレミアムライセンスが必要になる場合があります。
契約プランでの利用可否は公式ドキュメントで確認してください。
Q. Power Automate Desktopでやるべきですか?
クラウドフローの範囲で完結する一括登録であれば、Power Automate Desktopに切り替える必要はありません。
デスクトップアプリの操作やファイルサーバー上のファイル操作が絡む場合に検討する選択肢です。
Q. 何件までなら標準のループで足りますか?
目安として、数十件程度であれば、Apply to eachの並列実行とフィルタークエリの見直しだけで足りることが多く見られます。
数百件を超えるあたりからは、$batchへの切り替えを検討する局面です。
既存のフローでSharePointリストを参照する基本的な組み方から見直したい場合は、次の記事も参考になります。
