claspとは
Google App Scriptをローカルマシンで便利に使えるようにGoogleのプロジェクトツール。
インストール
npm install -g @google/clasp
https://script.google.com/home/usersettings にアクセスすると下記のような設定ができるので有効にする。
自分の環境だとclaspのパスが通ってなく command not found
になった。nodenvでいれていて export PATH="~/.nodenv/shims:$PATH"
を .bashrc
に追加した。
$ clasp --version 2.3.0
無事パスが通った。
ログイン
ログインの確認。してなさそう。
$ clasp login --status You are not logged in. $ clasp login Logging in globally... (node:20018) ExperimentalWarning: The fs.promises API is experimental 🔑 Authorize clasp by visiting this url: Authorization successful. Default credentials saved to: ~/.clasprc.json
コマンドを打つと画面遷移してアカウントの連携ができる。
無事ログイン完了。随分 シンプルなページ。
typescriptを使えるように
typescriptを使いたいのがメインの目的なので参考にしているblogを参考に環境を準備してみる。
$ mkdir hello-world $ cd hello-world/ $ npm i -S @types/google-apps-script $ tree . ├── node_modules │ └── @types │ └── google-apps-script │ ├── LICENSE │ ├── README.md │ ├── apis │ │ ├── adsense_v1_4.d.ts │ │ ├── analytics_v3.d.ts │ │ ├── analyticsreporting_v4.d.ts │ │ ├── appsactivity_v1.d.ts │ │ ├── bigquery_v2.d.ts │ │ ├── calendar_v3.d.ts │ │ ├── classroom_v1.d.ts │ │ ├── content_v2.d.ts │ │ ├── dfareporting_v3_3.d.ts │ │ ├── directory_v1.d.ts │ │ ├── docs_v1.d.ts │ │ ├── drive_v2.d.ts │ │ ├── driveactivity_v2.d.ts │ │ ├── gmail_v1.d.ts │ │ ├── groupsmigration_v1.d.ts │ │ ├── groupssettings_v1.d.ts │ │ ├── licensing_v1.d.ts │ │ ├── mirror_v1.d.ts │ │ ├── peopleapi_v1.d.ts │ │ ├── reports_v1.d.ts │ │ ├── reseller_v1.d.ts │ │ ├── sheets_v4.d.ts │ │ ├── slides_v1.d.ts │ │ ├── tagmanager_v2.d.ts │ │ ├── tasks_v1.d.ts │ │ ├── youtube_v3.d.ts │ │ ├── youtubeanalytics_v2.d.ts │ │ └── youtubepartner_v1.d.ts │ ├── google-apps-script-events.d.ts │ ├── google-apps-script.base.d.ts │ ├── google-apps-script.cache.d.ts │ ├── google-apps-script.calendar.d.ts │ ├── google-apps-script.card-service.d.ts │ ├── google-apps-script.charts.d.ts │ ├── google-apps-script.conference-data.d.ts │ ├── google-apps-script.contacts.d.ts │ ├── google-apps-script.content.d.ts │ ├── google-apps-script.data-studio.d.ts │ ├── google-apps-script.document.d.ts │ ├── google-apps-script.drive.d.ts │ ├── google-apps-script.forms.d.ts │ ├── google-apps-script.gmail.d.ts │ ├── google-apps-script.groups.d.ts │ ├── google-apps-script.html.d.ts │ ├── google-apps-script.jdbc.d.ts │ ├── google-apps-script.language.d.ts │ ├── google-apps-script.lock.d.ts │ ├── google-apps-script.mail.d.ts │ ├── google-apps-script.maps.d.ts │ ├── google-apps-script.optimization.d.ts │ ├── google-apps-script.properties.d.ts │ ├── google-apps-script.script.d.ts │ ├── google-apps-script.sites.d.ts │ ├── google-apps-script.slides.d.ts │ ├── google-apps-script.spreadsheet.d.ts │ ├── google-apps-script.types.d.ts │ ├── google-apps-script.url-fetch.d.ts │ ├── google-apps-script.utilities.d.ts │ ├── google-apps-script.xml-service.d.ts │ ├── index.d.ts │ └── package.json └── package-lock.json 4 directories, 64 files $ touch tsconfig.json $ vim tsconfig.json $ cat tsconfig.json { "compilerOptions": { "lib": ["es2019"], "experimentalDecorators": true } }
プロジェクトの作成
$ clasp create --title "Hello World" --type standalone (node:20839) ExperimentalWarning: The fs.promises API is experimental Created new standalone script: https://script.google.com/d/1QoTkRYwxa_vHJEOdVZk2rKvI8jZ3c2JdahkGcrF_RAgX3wpmN8cpAzYe/edit Warning: files in subfolder are not accounted for unless you set a '.claspignore' file. Cloned 1 file. └─ appsscript.json
タイムゾーンを Asia/Tokyoに変更する
$ cat appsscript.json { "timeZone": "America/New_York", "dependencies": { }, "exceptionLogging": "STACKDRIVER", "runtimeVersion": "V8"
codeを書いていく
const greeter = (person: string) => { return `Hello, ${person}!`; } function testGreeter() { const user = 'Ken'; Logger.log(greeter(user)); }
$ clasp push (node:21224) ExperimentalWarning: The fs.promises API is experimental ? Manifest file has been updated. Do you want to push and overwrite? Yes └─ appsscript.json └─ hello.ts Pushed 2 files. $ clasp open (node:21322) ExperimentalWarning: The fs.promises API is experimental Opening script: https://script.google.com/d/xxxxxx/edit
ブラウザがたちあがります
testGreeter を実行してみる
ちゃんとでてた!
これでなんとなく手順はわかった。次からtypescriptの学習をやってく。
参考
・https://panda-program.com/posts/clasp-typescript ほとんどこの通りに作業させていただきました。