Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
GAS ビギナーが GAS を使いこな すために知るべきこと 10 選 / for Googl...
Search
tanabee
April 03, 2018
Programming
5.8k
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.1k
Google Apps Script で始める RPA / RPA starting with GAS
tanabee
1
52k
Other Decks in Programming
See All in Programming
代数的データ型って何が嬉しいの? #frontend_phpcon_do
kajitack
8
3.8k
エージェンティックRAGにAWSで入門しよう!
har1101
9
1.7k
RTSPクライアントを自作してみた話
simotin13
0
620
なぜ型を書くのか? TSKaigi2026で改めて考える #tskaigi_smarthr
kajitack
0
140
気圧・高度・GPSを記録&可視化するアプリ「Koudo」を作った話
hjmkth
1
320
フロントエンドとバックエンドで「1文字」を揃えよう
youkidearitai
PRO
0
730
New "Type" system on PicoRuby
pocke
1
1k
Oxcを導入して開発体験が向上した話
yug1224
4
330
その問い、本当に正しいですか?AI時代のエンジニアに必要な哲学と認知科学 / ai-philosophy-cognitive-science
minodriven
11
6.1k
ECSアプリログをFireLensでコスト削減しようとしたけど諦めた話 in Fargate×Node.js
akihisaikeda
2
4.2k
Signal Forms: Details & Live Coding @enterJS 2026 in Mannheim
manfredsteyer
PRO
0
180
1B+ /day規模のログを管理する技術
broadleaf
0
110
Featured
See All Featured
Visualization
eitanlees
152
17k
The Pragmatic Product Professional
lauravandoore
37
7.3k
10 Git Anti Patterns You Should be Aware of
lemiorhan
PRO
659
62k
Accessibility Awareness
sabderemane
1
140
How To Stay Up To Date on Web Technology
chriscoyier
790
250k
How To Speak Unicorn (iThemes Webinar)
marktimemedia
1
490
Leo the Paperboy
mayatellez
7
1.9k
The Anti-SEO Checklist Checklist. Pubcon Cyber Week
ryanjones
0
170
A Modern Web Designer's Workflow
chriscoyier
698
190k
Rails Girls Zürich Keynote
gr2m
96
14k
Reflections from 52 weeks, 52 projects
jeffersonlam
356
21k
Statistics for Hackers
jakevdp
799
230k
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
ご清聴ありがとうございました