ADVERTISEMENT

【Googleスプレッドシート】OneDriveのファイル管理連携!Microsoft Graph APIでの取得

【Googleスプレッドシート】OneDriveのファイル管理連携!Microsoft Graph APIでの取得
🛡️ 超解決

GoogleスプレッドシートでOneDriveのファイルを管理したいと考えたことはありませんか。普段はGoogleドライブを使っていても、業務でOneDriveを併用している方は多いです。この記事では、Microsoft Graph APIを使ってGoogleスプレッドシートからOneDrive上のファイル情報を取得する方法を解説します。APIの呼び出しからデータのシート出力までを詳しく説明しますので、連携の実装に役立ててください。

【要点】OneDriveファイルをスプレッドシートで管理する3ステップ

  • Microsoft Entra IDでのアプリ登録: Graph APIにアクセスするための認証情報(クライアントID、テナントID)を取得します。
  • Apps ScriptでのOAuth2認証: スプレッドシートからAPIを呼び出すためのアクセストークンを発行します。
  • Graph APIエンドポイントへのリクエスト: ファイル一覧やメタデータを取得し、結果をシートに書き込みます。

ADVERTISEMENT

Microsoft Graph APIとGoogleスプレッドシート連携の仕組み

Microsoft Graph APIは、Microsoft 365のデータにアクセスするためのRESTful APIです。OneDriveのファイル一覧、メタデータ、ダウンロードURLなどを取得できます。GoogleスプレッドシートからはApps Script(GoogleのサーバーサイドJavaScript)を使ってHTTPリクエストを送信します。ただし、Graph APIはOAuth2.0認証が必要です。そのため、事前にMicrosoft Entra ID(旧Azure Active Directory)でアプリケーションを登録し、クライアントIDとテナントIDを入手します。Apps Script上でOAuth2ライブラリを使い、アクセストークンを取得してからAPIを呼び出す流れです。

OneDriveファイル情報を取得する手順

  1. Microsoft Entra IDでアプリを登録する
    https://portal.azure.com にアクセスし、「アプリの登録」から新しいアプリケーションを作成します。リダイレクトURIとして「https://script.google.com/macros/d/{スクリプトID}/usercallback」を追加します(スクリプトIDは後で確認)。
  2. APIのアクセス許可を設定する
    登録したアプリの「APIのアクセス許可」で「Microsoft Graph」→「委任されたアクセス許可」を選択し、「Files.Read.All」または「Files.Read」を追加します。管理者の同意が必要な場合は、テナント管理者に依頼します。
  3. クライアントIDとテナントIDをメモする
    アプリの「概要」画面に表示される「アプリケーション(クライアント)ID」と「ディレクトリ(テナント)ID」を控えます。また、クライアントシークレットも作成し、値を安全に保存します。
  4. Apps Scriptプロジェクトを作成する
    Googleスプレッドシートを開き、「拡張機能」→「Apps Script」でプロジェクトを作成します。プロジェクト名は「OneDrive連携」などにします。
  5. OAuth2ライブラリを追加する
    Apps Scriptのエディタで「ライブラリ」を開き、ライブラリID「1B7FSrk5Zi6L1rSxxTDgDEUsPzlukDsi4KGuTMORSV2mTgE2k5f5fY」を追加します(バージョンは最新)。
  6. 認証用のコードを記述する
    以下のコードをスクリプトに追加します。CLIENT_ID、CLIENT_SECRET、TENANT_IDは実際の値に置き換えます。
  7. ファイル一覧を取得する関数を作成する
    アクセストークンを使ってGraph APIのエンドポイント「/me/drive/root/children」にGETリクエストを送信し、JSONを解析してシートに書き込みます。

具体的なコード例は以下の通りです。最初に認証を設定し、その後でファイルの一覧を取得します。

function getOneDriveFiles() {
  var service = getService_();
  if (service.hasAccess()) {
    var url = 'https://graph.microsoft.com/v1.0/me/drive/root/children';
    var response = UrlFetchApp.fetch(url, {
      headers: {
        'Authorization': 'Bearer ' + service.getAccessToken()
      }
    });
    var files = JSON.parse(response.getContentText()).value;
    var sheet = SpreadsheetApp.getActiveSheet();
    sheet.clear();
    sheet.appendRow(['名前', 'サイズ', '更新日時', 'ID']);
    files.forEach(function(file) {
      sheet.appendRow([file.name, file.size, file.lastModifiedDateTime, file.id]);
    });
  } else {
    Logger.log('認証が必要です: ' + service.getLastError());
  }
}

注意点とよくあるトラブル

アクセストークンの有効期限切れ

OAuth2で取得したアクセストークンは通常1時間で失効します。そのため、APIを呼び出すたびに認証を確認し、必要に応じてリフレッシュトークンを使って再取得する仕組みが必要です。Apps ScriptのOAuth2ライブラリは自動的にリフレッシュトークンを管理してくれますが、初回認証後にトークンが保存されるよう、スクリプトのプロパティに保存する設定を行います。

APIのレート制限

Microsoft Graph APIには1分あたりのリクエスト数に制限があります。大量のファイルを取得する場合は、複数回に分けてリクエストする必要があります。また、ページネーション(nextLink)に対応するコードを書くことで、全ファイルを取得できます。

アクセス許可スコープの不足

Files.Read.Allを指定しても、個人のOneDriveしかアクセスできない場合があります。組織のSharePointやグループドライブにアクセスするには、別のスコープ(Sites.Read.Allなど)が必要です。また、管理者の同意が必要なスコープもあるので注意してください。

ADVERTISEMENT

Graph APIと直接URLアクセスの比較

項目 Microsoft Graph API 直接URLアクセス
認証方式 OAuth2、アクセストークンが必要 共有リンクのURLのみでアクセス可能
取得できる情報 ファイル名、サイズ、更新日時、メタデータ、ダウンロードURLなど豊富 単一ファイルの表示・ダウンロードのみ
一覧取得 フォルダ内のファイル一覧を取得可能(ページネーション対応) 基本的に不可能
セキュリティ アプリの許可とユーザーの同意が必要、安全 リンクを知っていれば誰でもアクセス可能
実装の容易さ アプリ登録やトークン管理が必要でやや複雑 URLの取得と発行だけで簡単

まとめ

Microsoft Graph APIを利用することで、GoogleスプレッドシートからOneDriveのファイル情報を柔軟に取得できるようになります。アプリの登録とOAuth2認証の設定は少し手間ですが、一度実装すれば定期的にファイル一覧を更新することも可能です。次のステップとして、取得したファイルのダウンロードURLを使ってシート内にリンクを埋め込む、ファイルのアップロードや削除を行う関数を追加するなどの応用も考えられます。ぜひ実際にコードを試して、OneDriveとGoogleスプレッドシートの連携を活用してください。


ADVERTISEMENT

この記事の監修者
✍️

超解決 第一編集部

疑問解決ポータル「超解決」の編集チーム。正確な検証と、現場視点での伝わりやすい解説を心がけています。