それマグで!

知識はカップより、マグでゆっくり頂きます。 takuya_1stのブログ

習慣に早くから配慮した者は、 おそらく人生の実りも大きい。

Goole App Script ( GAS ) の基本的な操作方法。18. clasp run でコンソールから実行

clasp run で ローカルからGAS実行

clasp run をつかえば、コマンドからGASを実行できます。

f:id:takuya_1st:20210608021310p:plain

clasp コマンドをうまく使えば便利かもしれないので、使い方を見ておく。

全体の流れ

結構手順が多いのです。

  • clasp コマンドをインストール
  • GASプロジェクトを設定
  • GCPプロジェクトを作成設定
  • GASとGCPを紐付け
  • clasp と GASを紐付け・認証
  • clasp に GCPを紐付け・認証
  • clap run

run を使うまでの手順が、煩雑で多いのです。OAuth関連の設定が多くてね。

clasp run は GCP にリクエストを投げ、GCPが GAS api を叩き、最新のコードを実行し結果を返してくれます。

clasp インストール

npm で clasp をインストールします。

npm install -g @google/clasp

GAS プロジェクト作成

https://script.google.com/ にアクセスして、プロジェクトを新規作成。

f:id:takuya_1st:20210608002540p:plain:w300

GCP プロジェクトを新規作成

GCP コンソールにアクセスして、プロジェクトを作成

GCP で作って保存するもの

GCPのコンソールでは、次の情報取得とAPI有効化をやります。

  • 必要情報の取得
    • プロジェクトID
    • プロジェクト番号(int)
    • OAuthクライアントのJSON
  • APIの有効化
    • apps scripts API の有効化

プロジェクトの作成と保存は、煩雑なので記事の末尾にスクショ付きで書いておきます。→ GCPプロジェクトの手順

GAS に GCP を紐付け

プロジェクト番号(数値)をGASに設定する

プロジェクト→ 設定

Google Cloud Platform(GCP)プロジェクト番号(数字)を貼り付ける。

f:id:takuya_1st:20210608005925p:plain:w320

clasp とGASを紐付け。

clasp login は終わっているものとします。

clone よる紐付け。

mkdir sample && cd sample
clasp clone ${スクリプトID}

または、create による紐付け

create → standalone でローカルで新規作成し、リモートへpush します。

mkdir sample && cd sample
clasp create myGas
clasp push

claspプロジェクトと GCP を紐付け

ローカルプロジェクトを、GCPと紐付けします。

GCPでダウンロードした認証情報JSONをプロジェクトへ移動

GCPから取得した認証情報JSONをプロジェクトへ

JSONは、GCP→ 認証情報→ クライアント→ダウンロードボタンでダウンロード。

clasp_project_dir=~/sample
mv client_secret_xxxx2697-xxxxonbxxxj.apps.googleusercontent.com.json \ 
${clasp_project_dir}/creds.json

clasp に projectIDを登録

clasp コマンドでプロジェクトに紐付ける。

GCP で作成したプロジェクトID(英数字名前)を入れる。

GCP_PROJECT_ID=gas-sample-001
clasp setting projectId ${GCP_PROJECT_ID}

json からプロジェクトを認証

json認証情報を使って、プロジェクトをOAuthする。

 clasp login --creds creds.json

ここでのログインは、プロジェクトがGCPへログインする。

ブラウザでOAuth

ブラウザが起動するので、GoogleアカウントでGCPのアカウントでログインして認証する。

終わったら次のような画面になる。

f:id:takuya_1st:20210608011412p:plain

コードを書く。

エディタを開き。関数を作り return を書く。忘れずにreturn を書く。

f:id:takuya_1st:20210608011604p:plain

return を書く理由は clasp run 実行後にコンソールに表示されるのが、関数の戻り値だから。

リモートへ送る

ローカルで作成したコードをscript.google.com へ push する。

clasp push 

デプロイ(公開する)

GASのプロジェクト・ページへ移動して、デプロイを作る。

デプロイを作成

GASのプロジェクト画面→デプロイ→新規作成→歯車→実行可能API

f:id:takuya_1st:20210608012202p:plain

clasp run 実行する

ようやく、本題の clasp run が出来ます。

clasp run

実行結果(戻り値)

実行すると、関数の戻り値が表示されます。

f:id:takuya_1st:20210608012628p:plain

実行結果(Console.log)

console.log で出力した、実行ログは、clasp logs コマンドで確認します。

f:id:takuya_1st:20210608012852p:plain

コードを更新して実行

次回以降は、push && run を繰り返せばいい。

clasp push 
clasp run myFunction 

clasp runは dev モードで動くので、push されたコードが常に実行される。

run 遅い

せっかくここまで設定したけど、push && run の clasp が遅い。表現したくないほど遅い。   

本当に遅いんですよ。 push && run をするのに待たされる。   

push に掛かる時間

f:id:takuya_1st:20210608022408p:plain

run に掛かる時間

f:id:takuya_1st:20210608022427p:plain

実行結果はスグ返るのに、終了が遅い。

実行自体はスグ終わります。その後なんの処理かわからないけど、終了処理で凄く待たされる。Ctrl-Cで中断したらプロジェクトの動作がおかしくなった。

clasp のclasp run 使えないかも。

CI/CD で回すならいいかも。

ローカルでコード書いて実行し、エラー見つけて修正、コード書いて実行みたいな使い方はとてもストレスなので使えないと思います。

自動実行をCI/CDでまわすなら、バックグラウンドで動くのでストレスなく使えるかもしれない。

git に push タイミングでGASにデプロイしてテストで実行する程度ならいいんじゃないですかね。

APEENDIX(GCPプロジェクト)

GCP プロジェクトの作成手順

GCP のプロジェクト作成で、GCP経由でGASのスクリプトを起動できるようにします。

保存するもの

プロジェクトを作成し、次のものを保存してclasp の設定に備える。

  • プロジェクトID
  • プロジェクト番号
  • 認証情報JSONの取得

設定するもの

GCP のプロジェクトで次を設定し、APIが利用できるようにする。

  • OAuth 同意画面
  • OAuth デスクトップ・クライアント
  • ライブラリ Gooogle App Script API

設定の流れ

設定は、次の流れで行う。

  • GCPコンソールにアクセス
  • プロジェクトを作成
  • プロジェクト番号とIDを保存
  • OAuth 同意画面の作成
  • OAuth クライアントを作成
  • JSONの保存
  • GAS Api の有効化

やることが多いです。

プロジェクトの新規作成

f:id:takuya_1st:20210608003002p:plain

プロジェクト情報の確認

ここで、ID(名前)と番号(数字)をメモります。

f:id:takuya_1st:20210608005753p:plain

OAuth 同意画面の作成

左上のメニュー → APIとサービス → OAuth同意画面

f:id:takuya_1st:20210608003200p:plain

同意画面は、必須項目を埋めるだけでいい。必須項目はメアドくらい。

自分しか使わないし。考えることはない。

OAuth認証情報の作成

左上のメニュー → APIとサービス → 認証情報→認証情報を作成

f:id:takuya_1st:20210608003309p:plain

クライアントIDを選ぶ

ここでは、クライアントを作るのでクライアントを選ぶ。

f:id:takuya_1st:20210608003331p:plain

種類はデスクトップアプリ

種類の選択で、デスクトップアプリを選ぶ

f:id:takuya_1st:20210608003357p:plain

JSONダウンロード

認証情報が作成されたら、デスクトップ用のJSONがダウンロードできる。

f:id:takuya_1st:20210608003454p:plain

API の有効化

プロジェクトで Google App Script API 有効にする。

ライブラリにゆく

f:id:takuya_1st:20210608003532p:plain

apps script api を有効にする。

f:id:takuya_1st:20210608003953p:plain

GCP 準備完了

これでGCPの準備は出来ました。次の情報が得られているはずです。

  • プロジェクトID
  • プロジェクト番号
  • 認証情報JSONの取得

これを、CLASPとGASに登録します。

プロジェクト番号(数字)は、GASへ登録

プロジェクトIDと認証情報は、clasp login で使います。