Google関係のAPIであったり、またプログラムを作る上で避けて通れないのが、Cloud Console(旧Developer Console)です。これはGoogle Apps Scriptでも同様でプロジェクトを作る毎に自動的にCloud Consoleにもプロジェクトが作成されています。普段スクリプトだけを扱ってる人は気が付きませんが。。

さて、このCloud Consoleですが、Googleの各種APIへアクセスしたり、アクセストークンを取得する為の認証情報(OAuth2.0認証)を作ったり、また、サービスアカウントと呼ばれる特殊なアカウントを作成する等で利用します。Microsoft Azureみたいなものですね。Google Apps Scriptでも使う機会があります。今回はこのCloud Consoleを見てみたいと思います。

まずは準備しよう

Cloud Consoleの各種機能を利用するためにはまずは「プロジェクト」の作成が必要です。Cloud Consoleにログインしたら右上のGoogle Cloud Platformの▼をクリックして既存のプロジェクトを開くか?新たに➕記号をクリックしてプロジェクトを作成します。作成まで少々時間が掛かります。

無料アカウントの場合作成できるプロジェクトの数に制限(Google Apps Scriptはちょっと違うみたい)があるので、ホイホイと作らないように注意しましょう。また、APIの利用も上限(クォータ)が付いているので、大量にAPIを叩くと制限に掛かってしまいます。さらに、Cloud SQLのような有償のサービスなども用意されていますが、クレジットカード決済が必要です。

今回、mushroomというプロジェクトを作ってみました。この時、デフォルトでいくつかのAPIが既に有効になっていますが、取り敢えず不要なので、左サイドバーより「APIとサービス」⇒「ダッシュボード」を開き、APIを全部無効にしましょう。

図:まずはプロジェクトを作らないと

図:デフォルトでいくつかのAPIが有効になっちゃってる

各種APIを利用する

APIを有効にする

Cloud ConsoleはGoogleの各種APIやウェブサービスを使う時に必要になるものですが、よく使うのは各種APIをプログラム(AndroidやNode.js等々)から利用するケースです。もちろん、Google Apps Scriptからも使えます(Google Apps ScriptにはないAPIもこれで使えるようになったりします)。

APIとサービスのダッシュボードより「APIとサービスの有効化」よりサービスを探して、有効化します。今回はファイルやフォルダをチョイスする「Google Picker API」を元に進めてみます。検索画面より「Picker」と入れると、Google Picker APIが見つかります。このAPIは引き続き認証情報を作成する必要があります。

図:Google Picker APIはよく利用します

認証情報を作る

引き続き認証情報を作る必要があるAPIがあります。今回のPicker APIも同様です。右上の「認証情報を作成」をクリックするか?左サイドバーの「認証情報」より作成開始します。ここで作成するのはAPIキーと呼ばれる単一のコードで、Google Maps APIなどでもよく使っていた1行の文字列です。

プロジェクトへの認証情報追加画面にて、必要な認証情報ボタンをクリックするとすぐにAPIキーが生成されます。これをAPI利用時に使いますので、取っておきます。他人に知られてはなりません。キーは再生成も可能です。

図:APIキーをゲットしたらAPIが利用できます。

OAuth認証を利用する

このプロジェクトの設定を使って外部のプログラムやサーバープログラムからAPIやサービスを利用する時に使う認証システムがOAuth2.0です。一部のAPIではAPIキーではなくOAuth2.0の認証を必要としています。この認証では、クライアントID、クライアントシークレットを得る事が出来ます。これを元に認証用URLからアクセストークンというものを得る事ができます。

ただし、OAuth認証を作る為には、承認済みの JavaScript 生成元や承認済みのリダイレクト URIが必要になります。Google Apps Scriptからの場合だと、承認済みJavaScript生成元は、https://script.google.comに、承認済みリダイレクトURIはhttps://script.google.com/macros/d/{PROJECT KEY}/usercallbackになります。Androidのようなアプリの場合、リダイレクトURIはhttp://localhostやurn:ietf:wg:oauth:2.0:oobなどが入ります。

作り方は以下の手順

  1. 左サイドバーの認証情報をクリックする
  2. 認証情報を作成ボタンより「OAuthクライアントID」を選択する
  3. Google Apps Scriptからならウェブアプリケーション、AndroidやCordovaならAndroidを選び進める。Androidの場合、更に追加でフィンガープリントやパッケージ名が必要になります
  4. 今回はウェブアプリケーションで進めます。
  5. 承認済みJavaScript生成元や承認済みのリダイレクトURIを入れます。Google Apps Script側から作った場合、デフォルトでリダイレクトURIがhttps://script.google.com/oauthcallbackで入っています。

この時生成される「クライアントID」と「クライアントシークレット」が重要な情報ですので控えておきましょう。

図:クライアント情報が得られます。

サービスアカウントを作る

Google Apps ScriptやOAuth2.0認証で見かける「承認して下さい画面」ですが、通常はアクセスしてきた人間が認証を行い、その元にプログラムが実行されるようになっています。その為そのアカウントは当然、ドライブやメール、カレンダーとG Suiteのあらゆるサービスを扱えるアカウントなわけです。

しかし、極特定のそのプログラムだけが扱う範囲だけで作成するアカウントがあります。それがサービスアカウント。許可したAPIやオブジェクトの作成だけが許可されてる特殊なアカウントで、これを使う事でユーザの認証なく各種APIなどを使えるようになります。この特殊なアカウントの作成もこのCloud Consoleにて行います。作り方は以下の通り。

  1. APIとサービスの中にある「認証情報」を開き、「OAuth同意画面」を開きます。
  2. 自分のメアド等が表示されていて、ここに適当なサービス名、ホームページのURL、アイコンを入力します。認証時にこの情報が出てきます。
  3. 続いてトップ画面より今度は「IAMと管理」を開き、「サービスアカウント」を開きます。
  4. サービスアカウントを作成」をクリックします。
  5. 適当なアカウント名(英語)と役割などは適当にオーナーなどを選んでみました。
  6. すると、アカウント名@プロジェクト名.iam.gserviceaccount.comでアカウントが出来ます。
  7. 新しい秘密鍵の提供をチェックして「JSON」や「P12」を選択。P12はAndroidや.NETアプリケーションなどで使います。Google Apps Scriptやウェブアプリケーションは前者で良いでしょう。JSONの場合、jsonファイルがダウンロードされます。
  8. G Suite内で使う場合には、G Suite ドメイン全体の委任を有効にするにチェックします。
  9. G Suiteで使う場合には、更に管理コンソールからセキュリティ⇒APIリファレンスを開き、「APIを有効にする」をチェック
  10. 続けて、「セキュリティ」⇒「詳細設定」⇒「APIクライアントアクセスを管理する」をクリック
  11. クライアント名にクライアントIDと使用するAPIのスコープを入力(Driveならhttps://www.googleapis.com/auth/drive

これでサービスアカウントが作成できました。このサービスアカウントをプログラム内でアクセストークンを取得させる事が出来るようになります。特定のアカウントに依存せず、サービスアカウントで動かせるというのがポイントですね。

※尚、6.のアカウント、例えば特定のスプレッドシートに読み書きさせる場合、そのスプレッドシートの共有権限にサービスアカウントに編集権限を与えておく必要性があります。

図:特殊なアカウントであるサービスアカウント

図:アクセス権限をつけてあげる

Google Apps Scriptから使う場合

自動で作成される

Google Apps Scriptもファイル毎にプロジェクトが作成されています。スクリプトエディタから確認出来ます。

  1. スクリプトエディタのメニューより「リソース」⇒「Cloud Platformプロジェクト」を開きます。
  2. リンクをクリックすると該当のプロジェクトが開かれます。デフォルトでproject-id-xxxxxxといった形のプロジェクトです。

他の自分で作成したプロジェクトと異なりプロジェクト数が減ったりしません。

主に利用するAPI

Google Apps Scriptは自分自身が数多くのAPIをメソッドから標準で利用できるようになってるため、あまりCloud Consoleを使う機会は多くありません。しかし、DriveAppでは出来る事が限られていて、Drive APIだと出来るといったケースや、Picker APIのようなHTML Service側で使用するもの、Admin SDKのような管理用APIなどは用意されていないので、Cloud Consoleを利用する必要が出てきます。

使用する場合はスクリプトエディタより

  1. メニューから「リソース」⇒「Googleの拡張サービス」を開きます。
  2. 使用するGoogle APIのスイッチをオンにします。但しオンだけじゃ使えません。(Pickerは一覧にないのでここでオンは出来ません)。
  3. Google API コンソールのリンクをクリック。Cloud Consoleの画面になります。
  4. Drive APIなどの場合すでにAPIと認証情報が作成された状態で開きます。
  5. 追加のAPIがあればここで追加して作業を済ませておきます。
  6. Cloud Consoleを閉じて、Googleの拡張サービスのウィンドウを閉じます。これで反映されます。

図:GASにないAPIもたくさんあります

プロジェクトを移動

Google Apps Scriptで自動作成されるプロジェクトは制限なく作れますが、プロジェクトが乱立する事になります。そこで1個だけプロジェクトを作成し、全てのスクリプトを1個のプロジェクトにまとめておくと、色々と管理しやすくなります。但し、ちょっとした変更が影響するので、注意も必要になります。

移動方法は以下の通りです。

  1. スクリプトエディタのメニューより「リソース」⇒「Gloud Platformプロジェクト」を開く
  2. Cloud Consoleより自分が作成したプロジェクトの「プロジェクト番号」をコピーする。IDじゃありませんよ!!
  3. プロジェクトを変更に2.の番号を入力後、プロジェクトを設定をクリック
  4. 無事に移動が完了すればメッセージが表示されます。
  5. この時、元の自動作成されたプロジェクトはシャットダウンされて消えます。

図:プロジェクトを他のプロジェクトに紐付けしました。

プロジェクトを削除してしまうと・・・

ちなみに、このGoogle Apps Scriptに紐付けされてるプロジェクトですが、削除(シャットダウン)してしまうと厄介な事になります。Cloud Consoleのプロジェクトとの紐付けがなくなっただけで、動かなくなります。試しにシャットダウンするとどうなるか?やってみました。

このスクリプトのOAuth IDは削除されたか、無効になっています。利用規約違反が原因である可能性があります。

上記のようなエラーメッセージが出て、単純なコードであっても承認が出来なくなり動かなくなります。Cloud Consoleに紐付けのプロジェクトがないとGoogle Apps Scriptはダメなんですね。

GoogleのAPIが使えなくなるのは当然です。またプロジェクトが消滅するので過去の承認情報や設定関係も全て消滅します。またそれだけにとどまらず、Google Apps Script自体の承認もできなくなり、何もコードを動かせなくなります。スプレッドシートならコピーすれば解消されますが、当然ゼロから全く別のプロジェクトが作られています。また、別のプロジェクトに移動させないと、このシートは使い物にならなくなります。

※あたりまえですが、ファイルのオーナーを変えたりすると全てリセットされますのでご注意を。

図:なにやら難しいエラーが出て、実行自体できなくなります。

関連リンク