Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
GAS ビギナーが GAS を使いこな すために知るべきこと 10 選 / for Googl...
Search
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
tanabee
April 03, 2018
Programming
5.9k
6
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
GAS ビギナーが GAS を使いこな すために知るべきこと 10 選 / for Google App Script begginers
Qiita:
https://qiita.com/tanabee/items/2c51681396fe12b6a0e4
tanabee
April 03, 2018
More Decks by tanabee
See All by tanabee
React x Firebase を用いた Web アプリケーション開発時のハマりどころと解決策 / React x Firebase tips
tanabee
6
1.2k
Google Apps Script で始める RPA / RPA starting with GAS
tanabee
1
52k
Other Decks in Programming
See All in Programming
S3 TablesのIcebergデータに、AIエージェントからアクセスしてみた / 20261016developersio2026joetsu-accessing-iceberg-in-s3tables-via-agent
kasacchiful
PRO
0
290
Next.js: The final boss of Web Performance
guaca
0
390
Long Living Tokens, Die, Die, Die! (or: The One Ring is Banned in Modern)
sylph01
0
410
プロジェクトコードをキレイキレイしよう!暗黙的な参照を読み解く静的解析
ostk0069
0
210
[JA] Domain Modeling with Vanilla Rails: 「操作」から再考するRailsの設計論
yasaichi
4
1.8k
AIで開発が速くなった先で、開発チームは何を目指すか
shihochan
1
2k
Snowflake Openflow Connector利用の勘所 / 20261024developersio2026tokyo-snowflake-openflow
kasacchiful
PRO
0
310
Web Framework Benchmark Battle 2026, Any%
a_matsuda
3
3.2k
Enforcing Your Architecture with Unit Tests in the AI Era (Swift Connection X)
steliosf
PRO
1
150
オーケストレーション記述言語 Katari
yukikurage
0
240
小さなアプリを作って公開するまで
onozaty
0
140
SODA - FACT BOOK(EN)
sodainc
1
210
Featured
See All Featured
A brief & incomplete history of UX Design for the World Wide Web: 1989–2019
jct
2
560
The Spectacular Lies of Maps
axbom
PRO
1
1.1k
Agile that works and the tools we love
rasmusluckow
331
22k
Information Architects: The Missing Link in Design Systems
soysaucechin
1
1.3k
The Language of Interfaces
destraynor
162
27k
How to Talk to Developers About Accessibility
jct
2
620
Leadership Guide Workshop - DevTernity 2021
reverentgeek
1
420
Code Reviewing Like a Champion
maltzj
529
40k
Neural Spatial Audio Processing for Sound Field Analysis and Control
skoyamalab
0
610
Claude Code どこまでも/ Claude Code Everywhere
nwiizo
68
60k
Un-Boring Meetings
codingconduct
0
490
Building an army of robots
kneath
307
47k
Transcript
GAS ビギナーが GAS を使いこな すために知るべきこと 10 選 株式会社グロービス Yuki Tanabe
/urls - Speaker Deck : bit.ly/2pXozRi - Qiita : bit.ly/2GsvMUy
/me 株式会社グロービス リードエンジニア - github / Qiita : tanabee - twitter:
@_tanabee プライベートで iOS / Android アプリ開発 累計 100 万 DL 達成
/me - Qiita に GAS ネタ投稿してます - Google Apps Script
(GAS) で毎週 30 分の雑務を自動化した話 - 3 分で作る無料の翻訳 API with Google Apps Script - Qiita Organizations Ranking
/about - GAS の便利な使い方 - GAS で効率良く開発する方法 - GAS の詰まりどころ
- などなど
1. ローカル環境で開発する 公式の npm パッケージ利用 https://github.com/google/clasp $ clasp clone <fieldId>
$ clasp push $ clasp pull
2. github でソースコード管理する - ローカルで開発して git 連携 - Chrome 拡張:
Google Apps Script Github アシスタント ↑この辺が拡張されて github に push / pull できるようになる
3. 複数ファイル構成 - 複数の *.gs ファイルを持てる - 定義された関数はグローバル関数となる
function main() { var num = add(1, 2); Logger.log(num); }
function add(a, b) { return a + b; } main.gs util.gs
4. 様々な実行方法 主な実行方法 - トリガー - G Suite サービスのイベントで発火 -
Web 公開
4. トリガー - “毎週何曜日のこの時間帯に実行” など - 分 / 時 /
日 / 週 / 月タイマー - Heroku でいう Scheduler - 編集 > 現在のプロジェクトのトリガー
- 特定の Docs を開いた時 - スプレッドシート更新時 - Google フォーム回答時 -
などなど 公式ガイドの Event Objects 参照 https://developers.google.com/apps-script/guides/triggers/events 4. G Suite サービスのイベントで発火
4. Web 公開 - スクリプトを API や Web ページとして公開できる -
公開 > ウェブアプリケーションとして導入
4. ミニマムな API 実装 function doGet(e) { return ContentService.createTextOutput("hello world!");
} function doPost(e) { return ContentService.createTextOutput("OK"); }
function doGet(e) { return ContentService.createTextOutput("hello world!"); } function doPost(e) {
return ContentService.createTextOutput("OK"); } doGet と doPost を実装 - doGet: GET リクエストに反応 - doPost: POST リクエストに反応 4. ミニマムな API 実装
function doGet(e) { return ContentService.createTextOutput("hello world!"); } function doPost(e) {
return ContentService.createTextOutput("OK"); } 以下のいずれかの型の値を返す - HtmlOutput - TextOutput https://developers.google.com/apps-script/guides/web 4. ミニマムな API 実装
function doGet(e) { return ContentService.createTextOutput("hello world!"); } function doPost(e) {
return ContentService.createTextOutput("OK"); } e: Event Object リクエスト時の値を参照できる - doGet: e.queryString, e.parameter - doPost: e.postData.contents https://developers.google.com/apps-script/guides/web 4. ミニマムな API 実装
5. スクリプト毎のデータストア 前回の実行結果など、スクリプト毎に簡単なデータを保存する保存領域が用意されている var properties = PropertiesService.getScriptProperties(); properties.getProperty(key);// 取得 properties.setProperty(key,
value);// 登録 properties.deleteProperty(key);// 削除
6. スクリプトからもトリガーを設定できる TriggerBuilder を利用 https://developers.google.com/apps-script/reference/script/trigger-builder var func = 'main'; var
d = new Date(); d.setMinutes(dt.getMinutes() + 1);// 1 分後 ScriptApp.newTrigger(func).timeBased().at(dt).create();
7. 実行時間の制限 - 1 回の実行で 6 分間の時間制限 - スクリプトの実行途中でも強制終了 https://developers.google.com/apps-script/guides/services/quotas
7. 6 分を超える処理を実行する方法 例)スプレッドシートの各行処理するスクリプト 1. 実行時間が 5 分になるのを検知 2. 次回処理を開始する行数を
PropertiesService で保存 3. TriggerBuilder を使って新しいトリガーを 1 分後に設定 4. 処理を終了させる ※ 5 分や 1 分というのは仮の値なので、正常に動作する適切な時間を選んでください。
8. G Suite 以外の Web API をたたく function postSlack(slackWebhookUrl) {
var body = { text: 'message' }; var payload = JSON.stringify(body); var res = UrlFetchApp.fetch(slackWebhookUrl, { method: 'POST', headers: { "Content-Type": 'application/json' }, payload: payload }); } UrlFetchApp.fetch で API リクエスト(POST Slack)
9. Web スクレイピングの方法 1. UrlFetchApp.fetch で html を取得 2. html
を parse a. GAS 公式のサンプルを利用 b. 独自の抽出ロジックを実装
9. 公式サンプルを利用した parse 以下のメソッドを別途定義する - getElementById() - getElementsByClassName - getElementsByTagName
https://sites.google.com/site/scriptsexamples/learn-by-example/parsing-html
9. 公式サンプルを利用した parse var html = UrlFetchApp.fetch(url).getContentText(); var doc =
XmlService.parse(html); var element = doc.getRootElement(); var menu = getElementsByClassName(element, 'menu')[0]; https://sites.google.com/site/scriptsexamples/learn-by-example/parsing-html > XmlService.parse でこけた時に詰む
9. 独自の抽出ロジックを実装 var html = UrlFetchApp.fetch(url).getContentText(); var username = find(html,
'<p id="username">', '</p>'), function find(text, from, to) { var fromIndex = text.indexOf(from); if (fromIndex === -1) return ''; text = text.substring(fromIndex + from.length); var toIndex = text.indexOf(to); if (toIndex === -1) return ''; return text.substring(0, toIndex); }
10. GAS でライブラリを利用する - GAS では npm を利用できない - 代わりに独自の
GAS ライブラリという仕組みがある - 他の人が公開した GAS を参照して実行するような仕組み - が、実行速度が遅いので add-on での利用は控えるべきとのこと - 良い方法知ってる方いたら教えてくださいmm https://developers.google.com/apps-script/guides/libraries
ご清聴ありがとうございました