My Note

自己理解のためのブログ

claspを利用してGitHub Actionsで Google App Script ( GAS )をデプロイする

はじめに

前回の記事で、google app script (GAS) の開発環境を整えました。なので今回はGASを自動デプロイする環境をGithub Actionsで用意します。

yhidetoshi.hatenablog.com

Github Actions

前回の記事にも記載していますが設定するディレクトリ構成は以下の通り

❯ tree -L 2 -a
.
├── .clasp.json
├── .claspignore
├── .github
 │   └── workflows
└── src
    ├── crypto.js
    ├── appsscript.json
  • claspでデプロイするために必要な3つのファイル
    • ~/.clasprc.json
    • .clasp.json
    • appsscript.json

github actionsの処理で 実行環境に3つのファイルを作成してから $clasp push コマンドを実行します。

これらのファイルには機密情報が含まれるので githubの secretにそれぞれ登録します。 環境変数名は以下にしました。

  • clasprc.json
    • ACCESS_TOKEN
    • ID_TOKEN
    • REFRESH_TOKEN
    • CLIENTID
    • CLIENTSECRET
  • clasp.json
    • SCRIPTID (機密扱いしなくてもいいかもですが念のために)
  • appsscript.json
    • LIBRARYID (機密扱いしなくてもいいかもですが念のために)

jsonファイルに出力する際に以下のようにエスケープする。

  • {\{
  • "\"
  • [\[

github-actionsのソースコード deploy.yaml は以下。

  • appsscript.json の配置場所に関しては、 .clasp.json"rootDir": "./src" と設定しているため。
  • github actionsの実行結果を見ても、 echoしていますが、secretの部分は *** でマスクされています。
 echo \{\"scriptId\":\"***\",\"rootDir\":\"./src\"\} > ./clasp.json
name: Deply to Google App Script
on:
  push:
    branches:
      - main

env:
  NODE_VERSION: '16'

jobs:
  build:
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@v2

    - uses: actions/setup-node@v2
      with:
        node-version: ${{ env.NODE_VERSION }}

    - name: Install clasp
      run: |
        npm init -y
        npm install clasp -g

    - name: Setup clasprc.json
      run: echo \{\"token\":\{\"access_token\":\"${{ secrets.ACCESS_TOKEN }}\",\"scope\":\"https://www.googleapis.com/auth/userinfo.email https://www.googleapis.com/auth/drive.metadata.readonly https://www.googleapis.com/auth/script.projects https://www.googleapis.com/auth/script.webapp.deploy https://www.googleapis.com/auth/logging.read openid https://www.googleapis.com/auth/userinfo.profile https://www.googleapis.com/auth/drive.file https://www.googleapis.com/auth/script.deployments https://www.googleapis.com/auth/service.management https://www.googleapis.com/auth/cloud-platform\",\"token_type\":\"Bearer\",\"id_token\":\"${{ secrets.ID_TOKEN }}\",\"expiry_date\":1620870307822,\"refresh_token\":\"${{ secrets.REFRESH_TOKEN }}\"\},\"oauth2ClientSettings\":\{\"clientId\":\"${{ secrets.CLIENTID }}\",\"clientSecret\":\"${{ secrets.CLIENTSECRET }}\",\"redirectUri\":\"http://localhost\"\},\"isLocalCreds\":false\} > ~/.clasprc.json

    - name: Setup clasp.json
      run: echo \{\"scriptId\":\"${{ secrets.SCRIPTID }}\",\"rootDir\":\"./src\"\} > ./clasp.json

    - name: Setup appsscript.json
      run: echo \{\"timeZone\":\"Asia/Tokyo\",\"exceptionLogging\":\"STACKDRIVER\",\"runtimeVersion\":\"V8\",\"dependencies\":\{\"libraries\":\[\{\"userSymbol\":\"Parser\",\"version\":\"8\",\"libraryId\":\"${{ secrets.LIBRARYID }}\"\}\]\}\} > ./src/appsscript.json

    - name: Deploy
      run: clasp push