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
Deep dive into the select statement (GopherCon UK)
jespino
0
150
FastAPI の並行処理モデルを完全に理解する
hoto17296
8
3.1k
AWS DevOps AgentのAzure接続機能を検証して見えた活用法/Use Cases Verified for the AWS DevOps Agent's Azure Connectivity Feature
masakiokuda
1
280
AI時代に学ぶ 好きなルール 嫌いなルール Linter編
shorty5121
0
190
業務時間外もAIに働いてもらう話
colorful12
2
8.3k
属人化した知識を、 AIが辿れる地図にする
pkshadeck
PRO
1
220
React本体のコードリーディング
high_g_engineer
1
160
Gmail/Google DriveをトリガーにAIエージェントを動かそう! / Run AI agents with Gmail/Google Drive as triggers!
har1101
2
450
【QA Test Talk Vol.8】AI-DLC による Whole Team Approach の加速
pkshadeck
PRO
0
250
複数の Claude Code が"放置"されてしまう問題をCLI ダッシュボードを自作して解決した話
sumihiro3
1
740
AIと壁打ちしながら進めるコスト管理
fufuhu
2
1.8k
Cloudflare is Agents
chimame
0
180
Featured
See All Featured
A Soul's Torment
seathinner
6
3.5k
Avoiding the “Bad Training, Faster” Trap in the Age of AI
tmiket
0
220
個人開発の失敗を避けるイケてる考え方 / tips for indie hackers
panda_program
123
22k
A designer walks into a library…
pauljervisheath
211
24k
BBQ
matthewcrist
89
10k
jQuery: Nuts, Bolts and Bling
dougneiner
66
8.6k
Measuring Dark Social's Impact On Conversion and Attribution
stephenakadiri
2
260
技術選定の審美眼(2025年版) / Understanding the Spiral of Technologies 2025 edition
twada
PRO
120
120k
エンジニアに許された特別な時間の終わり
watany
108
250k
Neural Spatial Audio Processing for Sound Field Analysis and Control
skoyamalab
0
420
Amusing Abliteration
ianozsvald
1
270
JAMstack: Web Apps at Ludicrous Speed - All Things Open 2022
reverentgeek
1
580
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
ご清聴ありがとうございました