[Google Apps Script] clasp 入門
clasp を利用すると、ブラウザ上のエディタではなくローカルファイルとして扱えます。
Git を利用したり、IDE の支援を受けながら開発することができます。
Contents
インストール
clasp
の利用には以下が必要です。
- npm or yarn
- node.js
yarn
でグローバルインストールします。
% yarn global add @google/clasp
yarn global v1.17.3
[1/4] 🔍 Resolving packages...
[2/4] 🚚 Fetching packages...
[3/4] 🔗 Linking dependencies...
[4/4] 🔨 Building fresh packages...
success Installed "@google/clasp@2.2.1" with binaries:
- clasp
✨ Done in 70.55s.
% clasp --version
2.2.1
初期アカウント設定
プロジェクトディレクトリを用意し、clasp login
を実行します。
ブラウザが開き、Google アカウントとの紐付けが確認されますので許可します。
% clasp login
このままプロジェクトを作成すると下記のエラーが表示されます。
% clasp create
? Create which script? sheets
Created new Google Sheet: https://drive.google.com/open?id=foo
User has not enabled the Apps Script API. Enable it by visiting https://script.google.com/home/usersettings then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.
指示に沿って https://script.google.com/home/usersettings
にアクセスして Google Apps Script API をオンにします。
プロジェクトの作成
あらためて作成します。
clasp create
で Google ドライブにファイルが生成されます。
--title
オプションでファイル名を指定できます。
% clasp create --title file_name
? Create which script?
standalone
docs
❯ sheets
slides
forms
webapp
api
選択するとローカルに設定ファイルが生成されます。
Google ドライブにファイルが生成されます。
% clasp create --title file_name
? Create which script? sheets
Created new Google Sheet: https://drive.google.com/open?id=foo
Created new Google Sheets Add-on script: https://script.google.com/d/foo/edit
Cloned 1 file.
└─ appsscript.json
現在のローカルディレクトリは以下のようになっています。
.
├── .clasp.json
└── appsscript.json
0 directories, 2 files
appsscript.json
を確認し、タイムゾーンを Asia/Tokyo
に変更しました。
{
"timeZone": "America/New_York",
"dependencies": {
},
"exceptionLogging": "STACKDRIVER"
}
scriptTitle は無効?
当初、ドキュメントにある scriptTitle
を指定したのですが、
This command creates a new script in the current directory with an optional script title. clasp create [scriptTitle]
% clasp create project_name
カレントディレクトリの一つ上、ファイルを収めている親ディレクトリ名のシートが Google ドライブに作成されていました。
エディタで編集できる *.js
が変更されるのかとも考えたのですが反映されている箇所は見つかりませんでした。
影響はないのでペンディングとします。
% clasp create --help
Usage: create [options]
Create a script
Options:
--type <type> Creates a new Apps Script project attached to a new Document, Spreadsheet, Presentation, Form, or as a standalone script, web app, or API.
--title <title> The project title.
--parentId <id> A project parent Id.
--rootDir <rootDir> Local root directory in which clasp will store your project files.
-h, --help output usage information
開発の流れ
clasp pull
で Code.js
をローカルに引っ張ります。
% clasp pull
Cloned 2 files.
└─ appsscript.json
└─ Code.js
内容はブラウザで編集していたあのファイルです。
function myFunction() {
Logger.log("Hello, World!");
}
編集が終わったら、ファイルをアップロードします。
clasp push
でアップロードします。
% clasp push
└─ Code.js
└─ appsscript.json
Pushed 2 files.
以後は、clasp push
を繰り返えす事で開発を進められそうです。
こうなると ES2015 で書きたい所ですが、TypeScript を利用できるパッケージが用意されていますので後日確認します。
既存のプロジェクトコードを clone する
既存プロジェクトのファイルを clone
します。
This command clones an existing project in the current directory. The script must be created or shared with your Google account. You specify the script project to clone by providing it’s script ID. You can find the script ID of a project by opening the project in the Apps Script editor and selecting File > Project properties > Info.
「ツール > スクリプトエディタ」を選択します。
「ファイル > プロジェクトのプロパティ」を表示し、スクリプト ID
を控えます。
新しいディレクトリを作成し、既存のプロジェクトを clasp clone
します。
% clasp clone <scriptId>
Cloned 2 files.
└─ appsscript.json
└─ コード.js
push 先を変更する
.clasp.json
ファイルが Manifest file になっており、これを書き換えることで push 先を変更することができました。
{ "scriptId": "foobar" }
% clasp push
? Manifest file has been updated. Do you want to push and overwrite? Yes
└─ appsscript.json
└─ コード.js
Pushed 2 files.
その他のコマンド
公式ドキュメントには他にもいくつかコマンドが記載されています。
% clasp --help
Usage: clasp <command> [options]
clasp - The Apps Script CLI
Options:
-v, --version
-h, --help output usage information
Commands:
login [options] Log in to script.google.com
logout Log out
create [options] Create a script
clone [options] [scriptId] [versionNumber] Clone a project
pull [options] Fetch a remote project
push [options] Update the remote project
status [options] Lists files that will be pushed by clasp
open [options] [scriptId] Open a script
deployments List deployment ids of a script
deploy [options] Deploy a project
undeploy [options] [deploymentId] Undeploy a deployment of a project
version [description] Creates an immutable version of the script
versions List versions of a script
list List App Scripts projects
logs [options] Shows the StackDriver logs
run [options] [functionName] Run a function in your Apps Scripts project
apis [options] List, enable, or disable APIs
list
enable <api>
disable <api>
help Display help
setting|settings [settingKey] [newValue] Update <settingKey> in .clasp.json
* Any other command is not supported
clasp deploy
はウェブアプリをデプロイする際に利用するようです。
clasp versions
は版の管理ができるそうです。「最新の版に名前を付ける」あたりに対応しているのでしょうか。
Cron 的にスクリプトを定期実行する
clasp からは外れますが、エディタ画面の時計アイコンをクリックすると、スクリプトの実行トリガーを指定することができます。
これにより定期実行などが可能になります。
所感
サーバシステムを建て維持管理することが難しい組織の場合、簡易な業務システム・ツールを Google Apps Script で作る事でサーバまわりをお任せできるというポイントは大きそう。
予算や人員の確保がなくなりますので。
そうなると SLA が気になりますが、G Suite SLA(99.9%) が適用されるのかなと思われます。
その他、メリット・デメリットや実例については下記が参考になりました。