
今回はMicrosoft Graph REST APIを使った場合等、参考情報をいくつか紹介します。
- 操作環境
- OS:Windows 11
- Webブラウザー:Edge
- 使用プラン:Microsoft 365 Business Premium(*)
*Power Automateでプレミアムコネクタを使用する場合は、追加料金が必要となります
Power Automateによる計測フロー実装(Microsoft Graph REST API)
使用APIの要件とアプリ登録
前の記事ではSharePoint REST APIを使用しましたが、今回はMicrosoft Graph REST APIを使用します。
今回使用するMicrosoft Graph REST APIに関する公式記事の情報を掲載します。

- サイト一覧検索に関する公式記事:
サイトを検索する - Microsoft Graph v1.0 | Microsoft Learn - 指定サイトのドライブ取得に関する公式記事:
ドライブを取得する - Microsoft Graph v1.0 | Microsoft Learn
なお、サイト一覧検索の方のアクセス許可について、アプリケーションの方の設定を行わないと動作しませんでした。設定箇所は図表7-2で紹介します。
Power AutomateでこれらのAPIを使用したフローを作成する前に、Microsoft Entra管理センターでこれらのAPIを使用するためのアプリ登録が必要となります。手順は以前の記事を参考にしてください。ただし、アクセス許可の設定が以前の記事とは若干異なりますので(図表7-1の公式記事のアクセス許可要件の通り)、その設定画面だけ以下に示します。

フロー作成と全体の処理
前の記事の工程4で紹介したSharePoint REST APIを使用したフローと同じように、日次のスケジュールフローを作成します。

全体の処理はSharePoint REST APIを使用したフローと概ね同じです。主な違いは、API実行前にアクセストークンを取得する点と、API実行時のコネクタがHTTPコネクタになる点です。
- 日本時間の取得や必要な変数の初期化
- アクセストークンの取得
- サイト一覧情報の取得
- 本日データ削除(Office Script実行)
- 各サイトの詳細情報取得
- 詳細情報取得の成功時は、記録用Excelに計測結果を行追加(*)
*詳細情報取得時にエラーが発生する場合があるため、エラーをスルーする処理を入れています。Microsoft Graph REST APIは成功/失敗時ともにステータスコードを受け取れるため、これによりエラー判定しています

各ステップの設定
- タイムゾーンの変換(組み込み>日次>タイムゾーンの変換):現時点日時(世界標準時)を日本時間に変換
- 変数を初期化する-storage(組み込み>変数>変数を初期化する):ストレージ使用量(バイト単位)をギガバイト単位に変換した結果を格納する変数
- 変数を初期化する-storage-percentage-used(組み込み>変数>変数を初期化する):ストレージ使用率を算出した結果を格納する変数

- HTTP-アクセストークン(プレミアム>HTTP>HTTP):Microsoft Graph REST APIのアプリ登録時の情報を使用し、アクセストークンを取得する
参考まで、ここで使用したアクセストークン取得に関する公式記事の抜粋も掲載します。また、このアクセストークン取得を含むMicrosoft Graph REST APIの使用例は以前の記事でも紹介していますので、よろしければ参考にしてください。

- JSONの解析-アクセストークン(組み込み>データ>JSON の解析): [HTTP-アクセストークン]の結果を指定(*)
*Schemaの設定要領は前の記事の工程4の[JSONの解析-サイト一覧]アクションや[JSONの解析-サイト詳細]と同じです
一旦フローを保存・テスト実行し、API(HTTP-アクセストークン)実行結果をコピーし、[サンプルペイロードを使用してスキーマを生成する]のフォームにペーストします

- JSONの解析-アクセストークン(組み込み>データ>JSON の解析): [HTTP-サイト一覧]の結果を指定(*)
*Schemaの設定要領は図表7-7の説明内の注記の通りなので割愛します
- スクリプトの実行(標準>Excel Online(Business)>スクリプトの実行):前の記事の工程3で用意したOffice Scriptを実行する

- Apply to each(組み込み>コントロール>それぞれに適用する):[JSONの解析-サイト一覧]のBody valueを選択することで、取得したサイト一覧の各サイトに対するアクションとする
以降はApply to each内にアクションを追加します。
- HTTP-サイト詳細(プレミアム>HTTP>HTTP):指定したURIのサイトに対し、使用量を取得する

- 条件(組み込み>コントロール>条件):[パラメーター]はサイト詳細情報の取得が正常終了(ステータスコードが200)したか否か、[設定]は一つ前のアクションが成功または失敗のとき(*)
*サイト詳細情報取得時にエラーが発生することがあり、エラーをスルーして条件分岐の処理を実行できるよう設定しています

以降は条件分岐のtrue(はい)の方にアクションを追加します。
- JSONの解析-サイト詳細(組み込み>データ>JSON の解析): [HTTP-サイト詳細]の結果を指定(*)
*Schemaの設定要領は図表7-7の説明内の注記の通りなので割愛します
- 変数の設定-storage(組み込み>変数>変数の設定):サイト詳細から取得したストレージ使用量がバイト単位のため、関数でギガバイト単位に変換して変数に格納する
*[JSONの解析-サイト詳細]のアクション名に半角スペースが含まれていると正常に動作しませんのでご注意ください

- 変数の設定-storage-percentage-used(組み込み>変数>変数の設定):サイト詳細から取得したストレージ使用量と容量を使い、使用率を算出して変数に格納する
*[JSONの解析-サイト詳細]のアクション名に半角スペースが含まれていると正常に動作しませんのでご注意ください
- 表に行を追加(標準>Excel Online(Business)>表に行を追加):記録用Excelに一行追加し、サイトの使用量等の情報を書き込む

2種類のAPIによる計測結果比較
この記事で作成したフロー(Microsoft Graph REST API版)と前の記事で作成したフロー(SharePoint REST API版)を実行し、記録用Excelのデータを比較したところ、結果に差がありました。
出力されたサイトについて、Microsoft Graph REST API版はSharePoint管理センターのサイト一覧と同じ結果でした。SharePoint REST API版は実行ユーザーがサイトのメンバーか否かの影響を受けるようです。また、使用量(GB)も差がありましたが、小数第四位以下のため、誤差の範囲と捉えて良いでしょう。

グラフ出力(Power BIグラフ)
グラフ出力について、前の記事ではSharePointサイト上の記録用Excelにピボットグラフを用意する例を紹介しました。この記事では、このExcelをPower BIで参照してグラフ出力する例を紹介します(SharePoint上のExcelをデータソースとして使う場合の設定方法の紹介が主目的です)。
SharePoint上の記録用Excelにアクセスできるユーザーで[Power BI Desktop]を起動します。ホーム画面の[他のソースからデータを取得する]を選択します。

[データを取得]画面で[SharePoint フォルダー]を選択し、[接続]を選択します。
Webブラウザーにて記録用Excelを格納しているSharePointサイトにアクセスし、URLをコピーします。

[サイトURL]欄に図表8-2でコピーしたURLをペーストし、[OK]を選択します。
サイト内のファイル一覧が表示されたら、[データの変換]を選択します。

ファイル一覧が表示されたら、グラフ化したい記録用Excelの行の[Binary]リンクを選択します。
Excel内シート・テーブルの一覧が表示されたら、グラフ化したい記録用Excelのテーブル行の[Table]リンクを選択します。
SharePoint上のデータを読み込むのが初めてだったり久し振りだったりすると、この辺りの手順が少々分かり辛く戸惑うかもしれません。

使用したいデータが表示されたら、[閉じて適用]を選択します。

Power BIの操作説明は割愛しますが、画面イメージのようなグラフであれば、この画面上で簡単に作成できます。

この画面イメージは、図表8-6のグラフのシートを複製して、折れ線グラフをクロス集計表に変更したものです。
なお、時系列項目として使用している「日付(ビン)」は、日付をグループ化した項目です。日付を扱う際によく使う方法なので、設定画面を掲載しておきます。

PowerShellによる使用量確認
最後に、PowerShellでSharePointサイトのストレージ使用量を確認する方法を紹介します。
SharePoint PowerShellの初回使用設定
PowerShellを管理者で起動し、以下コマンドにより、モジュールをインストールします。
Install-Module -Name Microsoft.Online.SharePoint.PowerShell

図表9-1のインストール時にモジュールのインポートも行われる筈ですが、後続のコマンド実行時にエラーが出る場合は、以下コマンドにより、モジュールのインポートを行います。
Import-Module -Name Microsoft.Online.SharePoint.PowerShell
以下コマンドにより、モジュールがインストール・インポート済か確認します。
Get-Module -Name Microsoft.Online.SharePoint.PowerShell -ListAvailable | Select Name,Version

SharePoint管理サイトへの接続・切断
この例では多要素認証を使用して接続します。
以下コマンドにより、組織テナントのSharePoint管理サイトに接続します。
Connect-SPOService -Url https://{組織ドメイン名}-admin.sharepoint.com
組織テナントへのサインインを求められたら、SharePointの管理者権限を持つユーザーでサインインします。

組織テナントのSharePoint管理サイトから切断するには、以下コマンドを実行します。
Disconnect-SPOService

SharePointサイトの使用量確認
組織テナントのSharePoint管理サイトに接続した状態(二つ前の画面イメージ)で、以下コマンドを実行します。
Get-SPOSite -Detailed | Select-Object Url, StorageUsageCurrent, StorageQuota

- Get-SPOSiteコマンドに関する公式記事:
Get-SPOSite (Microsoft.Online.SharePoint.PowerShell) | Microsoft Learn
おわりに
SharePoint管理センターで各サイトのストレージ使用量を確認できます。しかし、その時点のデータしかなく、どのサイトで増減が顕著に発生しているのか、時系列での把握が困難です。SharePointを長く運用していると、ストレージの空き容量不足と費用増大の懸念が出てきますので、その対策として今回の記事を紹介しました。
Microsoft 365 Business Premiumを導入済の組織であれば、Power AutomateでSharePoint REST APIを使用することで、追加料金なしで実現できます(Microsoft Graph REST APIを使用する場合は追加料金が必要です)。ストレージ容量不足の懸念があり、その対策に費用をかけたくない場合、この記事を参考にしていただけたら幸いです。
当ブログ内の連載記事
当ブログ内の関連記事