Memo/Google/Apps_Script

https://dexlab.net:443/pukiwiki/index.php?Memo/Google/Apps_Script
 

GAS(Google Apps Script)

  • Google Apps Script | Google Developers
    • JavaScriptベース。サーバサイドで実行される。
    • Document, windowといったクライアントサイドのオブジェクトは使えない。

ライブラリ: 一つのGASを複数のスプレッドシート等で使う

共通化したいGASファイル:

  • 新規 > その他 > Google Apps Script。専用フォルダ(例:gas)作ってまとめたほうが良い。
  • ファイル名がクラス名?になる。「-」等は省略されるので、CamelCaseで良いかも。(利用側で任意の名前(Identifer)を設定はできる)
  • 他から利用するために、バージョンを保存する必要がある。リリースの度に必要
    • ファイル > 版を管理 > 説明を記入 > Save new version
  • 他から利用するために、スクリプトIDをコピー
    • ファイル > オブジェクトのプロパティ > スクリプト IDをコピー

GASを利用したいスプレッドシート側:

  • ツール > スクリプトエディタ を開く
  • リソース > ライブラリ > Add a library でスクリプトIDを入れて、追加
  • バージョンは最新、Identiferはクラス名?なので重複しない名前にする
  • スクリプトエディタ側では、「Identifer.funcion()」で呼び出せるようになる。

GASを更新する場合:

  • GAS側で新しいバージョンを保存
  • 利用側で新しいバージョンを指定

ベストプラクティス


コーディング規約/ガイドライン


GitHub連携


clasp: cliでソースコードを扱う

デフォルトではweb上エディタ上を使うが、gitや任意のエディタを使えるようにする。

  1. GoogleアカウントのGoogle Apps Script APIをオンにする
  2. node.js製ツールなので、Memo/Linux/anyenv#ide22883 を参考に入れる
  3. claspのインストール
    yarn add global @google/clasp
  4. 表示されたURLを使いたいGoogleアカウントにサインインした状態で開く
    clasp login

サンプル: GET/POSTを表示する

function doGet(e) {
  return HtmlService.createHtmlOutput(JSON.stringify(e));
}

function doPost(e) {
  return ContentService.createTextOutput(e.postData.getDataAsString());
}
  • /dev/path1/path2/?key1=val1 でアクセスした場合の結果
    {
       "parameter":{
          "key1":"val1"
       },
       "contextPath":"",
       "contentLength":-1,
       "queryString":"key1=val1",
       "parameters":{
          "key1":[
             "val1"
          ]
       },
       "pathInfo":"path1/path2/"
    }

デプロイ

devとprod用の異なるURLがある。
1度発行されたURLはコードを変えても変わらない

dev用:

  1. コードを変更する
  2. 公開 > ウェブアプリケーションとして導入 > 最新のコードのリンクをクリック
  3. https://script.google.com/macros/s/{dev用token}/dev

prod用:

  1. コードを変更する
  2. ファイル > 版の管理 > 新しいバージョンを保存
  3. 公開 > ウェブアプリケーションとして導入 > プロジェクトのバージョンで新しいバージョンを指定
  4. 現在のウェブ アプリケーションのURL
  5. https://script.google.com/macros/s/{prod用token}/exec

Logging

  • Logger.log()
    • 表示 > ログに出る。
    • doPost(), doGet(), 各トリガーで起動する場合は、Logger.log()に出ない。
  • スプレッドシートにログを出力する

GoogleフォームとSlack連携


トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2020-10-05 (月) 18:08:16 (14d)