概要
- Google Apps Scriptにおける「プロジェクト」がわかりづらかったので、部下のS越さんに取りまとめてもらった。(S越さん、ありがとうございます)
- Google Apps Scriptのプロジェクトについて混乱している人もいると思うので、Qiitaにて共有する。突っ込み大歓迎です。
参考記事
- Authorization for Google Services - Apps Script — Google Developers
- GoogleAppsScript - Google Apps Scriptの開発手法まとめ - Qiita
- Google Apps Script の実行権限について - Google グループ
- GoogleAppsScript - Google Apps Scriptのプロジェクトのコードを外部からダウンロード/アップロード(アップロード編) - Qiita
解説
はじめに
Google Apps Script のプロジェクト
- GASプロジェクトには、「Standalone Script」(ドライブ上に単独で存在するもの)と、「Container Bound Script」(スプレッドシートに紐づくもの)が存在する。
- スプレッドシートから「スクリプトエディタ」を選択すると、自動的にContainer Bound Scriptプロジェクトが作成される。
- 各種承認(カレンダー等)はプロジェクト単位で必要となる。
■Google Apps Scriptのエディタ画面
スプレッドシートとGoogle Apps Script の関係
- 一つのスプレッドシートに対して、複数のContainer Bound Scriptを作成することもできる。
- Container Bound Script 上で新規プロジェクトを作成すると、同一のスプレッドシート上に新しいContainer Bound Scriptが作成される。
- 「ファイル」> 「コピーを作成」も同様にContainer Bound Scriptが作成される。
■Google Apps Scriptのエディタ画面で新規プロジェクトを作成
- 一つのスプレッドシートに対して複数のContainer Bound Scriptが存在する場合、スクリプトエディタ起動時にどのプロジェクトを選択するか促される。
- スプレッドシートからスクリプトを実行した場合、双方のプロジェクトが実行対象となる。
- 例えば、双方のプロジェクトでonOpenが定義されていた場合、スプレッドシートを開いた場合はそれぞれのonOpenが実行される。
■プロジェクトの選択画面
Google Apps Script と Google Developer Consoleの関係
- Google Apps Script のプロジェクトとGoogle Developer Console のプロジェクトは別概念。
- GASは、Google Analytics API 等の承認をGoogle Developer Consoleのプロジェクトに委託している。
- GASプロジェクトが作成されると、自動的にそれに紐づくGDCプロジェクトが作成されるので、作成されたGDCプロジェクト上でAPIの利用をONにする必要がある。(GAS上でもONにする)
- GASから作成されたGDCプロジェクトは、通常のGDC管理画面から選択・編集できない。GAS経由で開く必要がある。名称はGASのプロジェクトと同一になる。
- 既に存在するGDCプロジェクトをGASプロジェクトに紐付けることも可能。その場合自動で作成されたプロジェクトは削除されるので注意。(詳細は下記) ※自分がファイルのオーナーの場合のみらしい。
- Authorization for Google Services - Apps Script — Google Developers
まとめ
- 誤ってGASプロジェクトをコピーした場合、スプレッドシートが参照するスクリプト内に同名の関数が存在することになるので、そのまま放置しておくのは危険と思われる。
- コピーを削除してもオリジナルの動作に影響はない。
- GAS上で各種APIを利用している場合、他ユーザーに共有する際にGDCプロジェクトの権限も与える必要がある。(APIの認証を行うのはGDCのため)