Google Apps ScriptとMicrosoft Graph APIの連携 - 準備編【GAS】
G Suiteには、Google Driveというクラウドストレージサービスがあるので、通常は他のオフィスサービス(Microsoft365)と連携する必要がありませんが、G Suiteをアプリケーションの環境、通常はMicrosoft365を使って、Excelのファイル類などについては、OneDriveやSharepointを利用している事もあるでしょう。
そんな時にGAS側からMicrosoft365とりわけExcelファイルの読み書きができたら非常に便利になると思います。今回はGoogle Apps Scriptにて、Microsoft365側のExcelファイルへアクセスする手順を残しておきたいと思います。
目次 [隠す]
準備するもの・使用するファイル
- 連携用Googleスプレッドシート
- Microsoft365側のExcelファイル
- Microsoft Graph API
- OAuth2 for Apps Script ライブラリ
- Application Registration Portal
事前準備
今回のスクリプトはOAuth2.0認証が必要となるため、その為の簡単設定ライブラリとして、OAuth2 for Apps Scriptライブラリを利用させていただきます。また、Microsoft365側では、Application Registration Portalにてアプリの作成を登録し、アプリケーションIDとアプリケーションシークレット等の情報を入手する必要があります。
GAS側の事前準備
ライブラリの追加
以下の手順でOAuth2 for Apps Scriptライブラリを追加しましょう。
- スクリプトエディタを開きます。
- メニューより「リソース」⇒「ライブラリ」を開きます。
- ライブラリを追加欄に「1B7FSrk5Zi6L1rSxxTDgDEUsPzlukDsi4KGuTMorsTQHhGBzBkMun4iDF」を追加します。
- 現時点ではバージョンは30が最新ですので、それを選択しておきます。
- 保存ボタンを押して完了
これで、OAuth2.0認証にまつわる様々な関数を手軽に利用できるようになります。
図:ライブラリを追加した様子
コールバックURLを取得する
コールバックURLとは、認証を完了しAccess Tokenを取得したら戻るべきURLを指定するものです。これは、スクリプトIDをもとに作られているので、スクリプトIDを取得して組み立てます。
- スクリプトエディタのメニューより「ファイル」⇒「プロジェクトのプロパティ」を開く
- 情報の中にある「スクリプトID」を控えておく。
- https://script.google.com/macros/d/スクリプトID/usercallback として組み立てる。これがコールバックURLとなる。
図:スクリプトIDはファイル毎に異なるのです。
Microsoft365側の事前準備
続いて、Microsoft365側での処理を行います。ここでは、アプリケーションの作成を行い、アプリケーションIDとアプリケーションシークレット等を生成します。
- Application Registration Portalにログインする。
- アプリの追加ボタンを押す。
- Application Nameを入力しCreateボタンを押します。アルファベット以外も使えますよ。
- この段階でアプリケーションIDはすでに生成されているので、控えて置きます。
- アプリケーションシークレットにて、「新しいパスワードを生成」をクリックし、パスワードを発行します(このパスワードはこの時の1回しか表示されません)。
- 「プラットフォームの追加」にて、追加ボタンを押し、Webを選択。
- ここで、GAS側で取得したコールバックURLをリダイレクトURLに入力します。
- Microsoft Graphのアクセス許可では、スコープを設定します。User.Read、Files.ReadWrite、offline_accessを追加します。offline_accessを入れないと「リフレッシュトークン」が取得できないので、注意。
- 保存ボタンを押して完了です。
図:スコープの設定で許可するアクションを選びます。
認証を行う処理を作成する
OAuth2 for Apps Scriptのページの「Create the OAuth2 Service」にあるコードを元に、Google Apps Script側で構築をします。この時、Microsoft365側で取得したアプリケーションIDやシークレットを使います。
GAS側コード
HTML側コード
template.htmlというダイアログ用のファイルを用意します。ここでアクセス承認を実行し、ログインをすると、アクセストークンその他が取得可能になります。
- 実際にこれらのコードで、startoauthを実行すると、スプレッドシート上で認証用のダイアログが出ます。
- 認証でMicrosoft365アカウントにログインします。
- 取得したAccess Tokenほかはスクリプトプロパティのoauth2.Microsoft Graphという項目にガッツリ値が格納されます。ここにはAccess Token, Refresh Token, expire_inのタイムなどが入っています。
- reset関数はログアウトされて、再度認証ができるようになります。
図:Microsoft側でのOAuth認証画面