Open9

Google Apps Script の公開(閲覧権限でどこまで公開される?)

hankei6kmhankei6km

自作のライブラリーもせっかくだから公開しようと思ったのだが、ライブラリーの公開はなにがどこまで公開されるのか?いちおう確認。

なお、スクリプトエディターでコード補完が効くかなどの内容には触れない。

hankei6kmhankei6km

公開方法

スクリプトエディターで共有設定から「このリンクを知っているインターネット上の全員が閲覧できます」へ変更。

hankei6kmhankei6km

ライブラリーとして実行

他のユーザーのスクリプトエディターでライブラリーを追加(スクリプトID指定)して実行が可能だった。

ただし、HEAD ではなくバージョン付きでデプロイされている必要がある。

実行時にとくに権限を要求されなかったが、許可が必要なリソースにアクセスしないから?

実行のインスタンス(でいいのか?)は利用者側の環境になっていると思う(ダッシュボードの実行数でカウントされない)。

hankei6kmhankei6km

ダッシュボード

ダッシュボードは閲覧できる。

概要

ダッシュボードでスクリプトの概要を表示しているスクリーンショット
オーナーと同じ程度の情報が閲覧できる

エディター

ソースが閲覧できるが編集はできない。

トリガー

このスクラップを記述しようと思ったきっかけ。

ロールが閲覧者でもここでトリガーを設定できる。
実行するデプロイに HEAD を選択できる。
トリガーのオーナーは設定したユーザーになる。
設定しているトリガーはオーナーや他のユーザー(ロールが閲覧者)からも閲覧できる。
ただし、編集や削除はスクリプト(プロジェクト)のオーナーでもできない。

時間ベースで試してみたが実際に実行もできる。

ここで疑問なのはトリガーの設定数や実行環境(CPUタイム)はどのユーザーが消費したことになるのか?

追記

トリガーはユーザー単位でカウントされるもよう。

Triggers 20 / user / script

https://developers.google.com/apps-script/guides/services/quotas#current_limitations

トリガーの画面で他オーナーのトリガーを表示しているスクリーンショット
実行されている

なお、Google の OAuth2 ライブラリーはどうなっているかと確認してみたが、登録しているユーザーはいなかった(興味本位でやっている人がいるかと思ったのだが)。

実行数

ログの一覧は確認できるが内容は権限必要となる。

ダッシュボードからスクリプトの実行数(ログの一覧)を表示しているスクリーンショット
項目を選択しても内容は表示されない

これは自分がオーナーのトリガーから実行された場合でも同じである。

ということはスクリプトのオーナーの環境で実行されているということ?
そうとも限らないか。

プロジェクトの設定

設定やスクリプト ID は確認できるが以下が表示されていて(おそらく)閲覧者用の表示になっている。

「閲覧中のプロジェクトに対する権限が制限されており、読み取り専用の設定や表示されない設定があります。」

hankei6kmhankei6km

共有されているプロジェクトのトリガーの挙動は?

シンプルなトリガーは共有されないことにいなっている(これはライブラリを参照している側との話だから今回あまり関係ないかな)。

Simple triggers created in library are not triggered by the including script.

https://developers.google.com/apps-script/guides/libraries#resource_scoping

インストーラブルな場合は共有されないとなっているが、設定を変更できないという意味で共有されないということなのか?

追記
コンテナバインド型で変更時などをトリガーにしたときに、他のユーザーが発動させてもトリガーオーナーとして実行されるという意味なのかな。
シンプルなトリガーは発動させたユーザーとして実行されるようだけど実行しようとするけど失敗している。インストーラブルはトリガーのオーナーとして実行されていた。

Collaborating and triggers
When you collaborate on a project, any installable triggers that you create are not shared with those who have access to your project. If you need to have a consistent trigger setup for all collaborators, you can use the Script service to create triggers programmatically, at run time. For more information, see Managing Triggers Programmatically.

https://developers.google.com/apps-script/guides/collaborating#collaborating_and_triggers

hankei6kmhankei6km

思っていたよりも公開されてしまう部分

以下の点が予想していたよりも公開されてしまうと感じた。

HEAD を利用できる

閲覧者が作成したトリガーでも HEAD としてプッシュされているコードを利用できる。

これは開発中のものをうかつにプッシュできないということになる。

トリガーを設定できる

今回は単純なコードで試しているだけなので状況によって異なるのかもしれないが、
公開されている関数は閲覧者の権限でも無制限に実行できるのはちょっとうれしくない。

ライブラリーとして公開しているのだがから実行されるのはよいとしても実行ログが埋まるのはどうかと。

hankei6kmhankei6km

とりあえずここまで。

自作のライブラリーを公開しようと思ったら開発用と公開用にプロジェクトをわける方が無難か。

clasp なららプッシュ先の切り替え楽かなと思っていたら clasp push でスクリプト ID を指定できないのね。

jq.clasp.json を書き換えコースかな。

hankei6kmhankei6km

ログの表示で「次のユーザーとして実行」のフィルターがあった。

「自分」を指定したら他のユーザーがオーナーのトリガーから実行したものは除外された、

ログを全件表示しているスクリーンショット
すべて表示

フィルターを設定してログが数件になっているスクリーンショット
フィルター指定

実行時間がどこに加算されるかなどはわからないが、トリガーのオーナーとして実行はしているもよう。