Google Apps Script API を使ってスクリプトを配布する
TL;DR
- ワンクリックで、Google認証→ユーザのアカウントにスクリプトをインストール→Web Appとしてデプロイ、するWebページを作った
- 公開ページ: https://wata.github.io/konjac-farm/
- リポジトリ: https://github.com/wata/konjac-farm
- ユーザーのスクリプトを操作するには、APIアクセスを有効にしてもらう必要がある
- G Suite domain外に公開する際は、事前にアプリ審査を通る必要がある

(インストール成功時)
仕組み
インストールボタン押下で、Google認証ダイアログでサインイン、パーミッションを取得し、Apps Script APIを使って以下を行います。
- 空プロジェクト作成(projects.create)
- プロジェクトファイルで更新(projects.updateContent)
- 公開バージョン作成(projects.versions.create)
- デプロイ(projects.deployments.create)
プロジェクトファイルを取得する
既存スクリプトのプロジェクトファイル(Code.gsやappsscript.jsonが含まれたファイル群)を取得するには、以下のURLからJSONでダウンロードします。Drive APIを使って取得してもいいかもしれません。
https://script.google.com/feeds/download/export?id={Script EditorページのURLに書かれたID(DriveのFile ID)}&format=json
公開
https://wata.github.io/konjac-farm/ では、マニフェストファイルにて、
- 自分として実行
- 公開(匿名ユーザ含む)
の設定で、Web App公開を指定しているので、最後に出力されたURLは、そのままcurlコマンドで試せるようになっています。
※URLの取り扱いに注意してください
注意点
1. Apps Script APIでユーザのスクリプトを操作するために、Apps Script DashboardにてAPIアクセスを有効にしてもらいます
デフォルトではAPIアクセスが出来なくなっているので、リクエストを投げてもエラーが返ることになります。ユーザーに明示的に許可してもらう必要があります。
Enabling script authorization and access | Apps Script API | Google Developers
To help reduce this risk, the Apps Script API cannot access your script projects by default. You must explicitly grant…
2. 未確認のOAuthクライアントは、「This app isn’t verified」という警告画面が表示され、インストールできるユーザー数に制限があります
警告画面、ユーザー数の制限を回避するためには、事前にGoogleの審査を通らなければいけません。具体的な作業として、
- ドメインの所有確認
- プライバシーポリシーページの用意
- OAuthクライアント開発者フォームから申請
を行う必要があります。
ただし、個人利用やG Suite domain間の用途では必ずしも必要ではないようです。
OAuth Client Verification | Apps Script | Google Developers
If the app uses sensitive OAuth scopes, the unverified app screen may appear as part of the authorization flow. Its…
経緯
Google翻訳するVSCode拡張を公開する際、Google翻訳APIの従量課金を回避するために、Google Apps Scriptで作った翻訳APIを使う、という方法を考えました。
そこで問題になったのが、Google Apps Scriptの容量制限をどうやって回避するか😇
Google Apps Scriptを使うと、無料でサーバレスでWeb APIなど作れて便利ですが、例えば、外部URLを叩くようなスクリプトだと、URLFetchは20,000回/日という制限があります。
自分のアカウントで公開してしまうと破綻してしまうので、ユーザ自身がインストールして使うという、セルフホスティング翻訳APIを用意したのでした。