Google Apps Script の公開(閲覧権限でどこまで公開される?)
自作のライブラリーもせっかくだから公開しようと思ったのだが、ライブラリーの公開はなにがどこまで公開されるのか?いちおう確認。
なお、スクリプトエディターでコード補完が効くかなどの内容には触れない。
今回は Standalone で試している。
公開方法
スクリプトエディターで共有設定から「このリンクを知っているインターネット上の全員が閲覧できます」へ変更。
ライブラリーとして実行
他のユーザーのスクリプトエディターでライブラリーを追加(スクリプトID指定)して実行が可能だった。
ただし、HEAD ではなくバージョン付きでデプロイされている必要がある。
実行時にとくに権限を要求されなかったが、許可が必要なリソースにアクセスしないから?
実行のインスタンス(でいいのか?)は利用者側の環境になっていると思う(ダッシュボードの実行数でカウントされない)。
ダッシュボード
ダッシュボードは閲覧できる。
概要
オーナーと同じ程度の情報が閲覧できる
エディター
ソースが閲覧できるが編集はできない。
トリガー
このスクラップを記述しようと思ったきっかけ。
ロールが閲覧者でもここでトリガーを設定できる。
実行するデプロイに HEAD を選択できる。
トリガーのオーナーは設定したユーザーになる。
設定しているトリガーはオーナーや他のユーザー(ロールが閲覧者)からも閲覧できる。
ただし、編集や削除はスクリプト(プロジェクト)のオーナーでもできない。
時間ベースで試してみたが実際に実行もできる。
ここで疑問なのはトリガーの設定数や実行環境(CPUタイム)はどのユーザーが消費したことになるのか?
追記
トリガーはユーザー単位でカウントされるもよう。
Triggers 20 / user / script
実行されている
なお、Google の OAuth2 ライブラリーはどうなっているかと確認してみたが、登録しているユーザーはいなかった(興味本位でやっている人がいるかと思ったのだが)。
実行数
ログの一覧は確認できるが内容は権限必要となる。
項目を選択しても内容は表示されない
これは自分がオーナーのトリガーから実行された場合でも同じである。
ということはスクリプトのオーナーの環境で実行されているということ?
そうとも限らないか。
プロジェクトの設定
設定やスクリプト ID は確認できるが以下が表示されていて(おそらく)閲覧者用の表示になっている。
「閲覧中のプロジェクトに対する権限が制限されており、読み取り専用の設定や表示されない設定があります。」
共有されているプロジェクトのトリガーの挙動は?
シンプルなトリガーは共有されないことにいなっている(これはライブラリを参照している側との話だから今回あまり関係ないかな)。
Simple triggers created in library are not triggered by the including script.
インストーラブルな場合は共有されないとなっているが、設定を変更できないという意味で共有されないということなのか?
追記
コンテナバインド型で変更時などをトリガーにしたときに、他のユーザーが発動させてもトリガーオーナーとして実行されるという意味なのかな。
シンプルなトリガーは発動させたユーザーとして実行されるようだけど実行しようとするけど失敗している。インストーラブルはトリガーのオーナーとして実行されていた。
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.
思っていたよりも公開されてしまう部分
以下の点が予想していたよりも公開されてしまうと感じた。
HEAD を利用できる
閲覧者が作成したトリガーでも HEAD としてプッシュされているコードを利用できる。
これは開発中のものをうかつにプッシュできないということになる。
トリガーを設定できる
今回は単純なコードで試しているだけなので状況によって異なるのかもしれないが、
公開されている関数は閲覧者の権限でも無制限に実行できるのはちょっとうれしくない。
ライブラリーとして公開しているのだがから実行されるのはよいとしても実行ログが埋まるのはどうかと。
とりあえずここまで。
自作のライブラリーを公開しようと思ったら開発用と公開用にプロジェクトをわける方が無難か。
clasp なららプッシュ先の切り替え楽かなと思っていたら clasp push
でスクリプト ID を指定できないのね。
jq
で .clasp.json
を書き換えコースかな。
ログの表示で「次のユーザーとして実行」のフィルターがあった。
「自分」を指定したら他のユーザーがオーナーのトリガーから実行したものは除外された、
すべて表示
フィルター指定
実行時間がどこに加算されるかなどはわからないが、トリガーのオーナーとして実行はしているもよう。