こんにちは、せしょうです。
今回、研修中にGoogle Apps Script(以降GAS)を触る機会があり、せっかくなのでブログにまとめてみました!
本記事は第二回目の記事です。
3つの記事の構成は、以下のようにしていく予定です。
1. コンテナでの開発環境開発
2. ローカル環境とGASプロジェクトの連携 ⇦本記事
1. 概要
前回、Visual Studio Codeと Docker (devcontainer)を使って、コンテナの環境を作成しました。その続きとして、今回はローカルとGASを連携させたいと思います。
2. 目標とするディレクトリ構成
3. 今回の記事で作られるディレクトリ構成
4. GASプロジェクトの作成
ここでは、ローカルでのGASプロジェクトの作成方法について記述します。
前提として、前回作成したコンテナのホームディレクトリ/home/node/gas-tutorial/にいるとします。
3で定義したディレクトリ構成のようにしたいため home/node/gas-tutorial/gas以下のディレクトリとGASプロジェクトを結び付けが出来るようにgasディレクトリを作成し、移動します。
Google Apps Script API
GASプロジェクトに対して、更新、作成、デプロイ等を行う際は、Google Apps Script APIを有効にする必要があります。
以下のURLにアクセスして、Google Apps Script APIを有効にしてください。
https://script.google.com/home/usersettings
有効になっている場合は、以下の画像のようにスイッチがオンになります。
※有効になっていない場合、claspコマンドで更新等行うと以下のエラーが出ます。
Google アカウント認証
移動後、以下のコマンドを入力してGoogleアカウントにログインします。
許可を選択し、下記の画像のように、Logged in! You may close this page.と画面に表示できれば成功です。
Terminal上でも、以下のように表示されます。
ローカルでGASプロジェクトを作成
GASプロジェクトを作成するには、以下のコマンドを入力します。
入力後、いくつかGASプロジェクトに関する選択肢が出ますが 今回は、standaloneを選択します。
作成する際に、optionで --title [project_name]を追加することで、[project_name]に入力した文字列がGASプロジェクト名となります。
指定しない場合は、コマンドを実行したディレクトリ名となります。 したがって、今回を例にすると、指定しなかった場合 Gas というプロジェクト名になります。
実際作成したGASプロジェクトは、Google Driveもしくは、clasp listで確認できます。
作成が無事完了すると、ディレクトリに .clasp.jsonとappsscript.jsonが作成されると思いますので確認してください。
このファイルについては、6で解説します。
5. 既存のGoogle Apps Scriptとの連携
ここでは、既存のGASプロジェクトとローカルディレクトリを連携する方法を記述します。
GASプロジェクトの作成と同様に、まずソースコードを配置するディレクトリへ移動してください。
ここでは、再度/home/node/gas-tutorial/gasにいると仮定します。
今回は以下の SampleというGASプロジェクトと連携したいと思います。
clasp listコマンドを入力すると下記のように出てきます。
今回の場合、Sampleと連携したいため以下のように入力します。
node → ~/gas-tutorial/gas$ clasp clone 14Ya6HS4AwJj9sWnugcpPCmiQUKBDB
※ これらのURLは https://script.google.com/d/[project_id]/edit の形式になっています。[project_id] になっている個所についてはこのURLの[project_id]部分を利用して下さい。
※ 既に、.clasp.json がある場合は、ファイル内のscriptIdの[project_id]の部分を変更したいproject idに修正してください。
6. 作成されたファイルについて
4,5を通じて、現在 gasディレクトリには.clasp.jsonとappsscript.jsonのファイルが作成されたと思います。
ここでは、上記2つのファイルについて簡単に説明していきます。
.clasp.json
.clasp.jsonは、いわゆるローカルとGASプロジェクトを結びつけるためのファイルです。
5,6で create もしくは、 cloneでGASプロジェクトと連携させると、以下のファイル構成になっていると思います。
以下、一部プロパティについての説明です。
scriptId
連携するGASプロジェクトのproject idを記述する場所です。
5で説明したように、[project_id]の値をここに入力します。(create、cloneした場合は自動的に入力されます。)
rootDir
ソースコードがある、ディレクトリを記述する場所です。
5,6でGASプロジェクトと連携した場合、ここでは"/home/node/gas-tutorial/gas"が入力されています。
projectId
連携するGCPプロジェクトのproject idを記述する場所です。
次回の記事で、GASプロジェクトをローカルから実行する際にGCPと連携させる際に記述します。
appsscript.json
appsscript.jsonはGASプロジェクトのマニフェストファイルです。
ここでは、使用するデプロイバージョンの設定やスコープ、タイムゾーン、ライブラリなどの拡張の設定をします。
以下、初期で作成された場合のappsscript.jsonです。
以下、一部プロパティについての説明です。
timeZone
タイムゾーンの設定
※TimeZoneは、トリガーでスケジュールから実行する場合など、自分の住んでいる地域に設定することをオススメします。
例
oauthScopes[]
スコープの設定
例) 使用するoauthを列挙
dependencies
拡張サービスの設定 : enabledAdvancedServices[]
ライブラリの設定 : libraries[]
exceptionLogging
ログの記録場所
デフォルトでは、 STACKDRIVERが設定されている。
webapp
ウェブアプリケーションの設定
例)
executionApi
実行可能APIの設定
例)
※次回の記事で executionApiやoauthScopesについても、触れる予定です。
7. 作成されたファイルの修正
.clasp.json
2.で示したように、ソースコードをsrc配下にしたいため、rootDirを srcに指定し直します。
差分
appsscript.json
appsscript.jsonは、ソースコードと同じディレクトリに存在する必要があるため、srcディレクトリを作成し移動します。
8. ローカルからGASプロジェクトへpush
さて、待ちに待ったローカルからGASプロジェクトへのpushです。
pushさえ出来てしまえば最低限、コードの管理ができるようになります。
ということで、GASプロジェクトで使用するファイルを作成しましょう。
作成する場所は、srcディレクトリにsample.jsを作成します。
作成後、sample.jsに以下の内容を記述します。
記述後、以下のコマンドを入力してください。
すると、連携しているGASプロジェクトへpushが出来たはずです。
確認
以下のコマンドを入力して、GASプロジェクトを開いてみましょう。
すると、実際のGASプロジェクトが開き、反映されていることが分かります。
ここで実行ボタンを押すと、下記のようにhello worldが出力されます。
9. ローカルにpull
では、ローカル → GASプロジェクト(push)が出来たので
GASプロジェクト → ローカル(pull)の確認をします。
以下のように、GASプロジェクト内でpullTestを追加します。
修正後、ローカルのターミナルで以下のコマンドを入力します。
すると、以下の表示が出て無事、ローカルにpullすることができました。
次回
今回は、claspコマンドを使用して、create、 clone、 push、 pullを行いました。 現状の設定ではローカルからのGASプロジェクトの実行はできません。 したがって、次回はGoogle Cloud Platform(GCP)と連携して、自分の失敗談を交えながら、ローカルから実行について説明していこうと思います。
ここまで読んでいただき、ありがとうございます。次回でGASのローカル環境構築最終回です。楽しみに待っていてください。それでは、また次回の記事でお会いしましょう。