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
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.2k
Google Apps Script で始める RPA / RPA starting with GAS
tanabee
1
52k
Other Decks in Programming
See All in Programming
The Rails Doctrine Decade
koic
2
150
Augmenting AI with the Power of Jakarta EE
ivargrimstad
0
220
The Past, Present, and Future of Enterprise Java
ivargrimstad
0
470
Heart of Swift Concurrency
koher
0
910
GraphRAGのKnowledge Graphを 直接!見る/View-GraphRAG's-KnowledgeGraph-directly!
tyumugi1113
1
350
20260914 AIエージェント時代のPlatform Engineering LLM基盤とプロダクトの責務境界線
kanfab1
7
2.1k
仕様駆動開発による爆速プロダクト開発 / Bakusoku Spec Driven Development
kobakei
0
120
大喜利で理解するLLM as a Judge / Understanding LLM-as-a-Judge through Ogiri
rockname
0
150
LL言語やWebフレームワークのPostgreSQL対応 〜DBの機能がユーザーに届くまで〜
kentaroutakeda
1
150
モジュールの視点からSwiftを読み解く #iosdc
s_shimotori
0
180
テストを司るデーモンに会いに行く 〜隔離した仮想マシンでテストを通すまで〜
h1d3mun3
1
510
Jetpack Compose メカニズム
skydoves
0
450
Featured
See All Featured
Stewardship and Sustainability of Urban and Community Forests
pwiseman
0
530
Heart Work Chapter 1 - Part 1
lfama
PRO
10
36k
A Modern Web Designer's Workflow
chriscoyier
699
190k
The AI Revolution Will Not Be Monopolized: How open-source beats economies of scale, even for LLMs
inesmontani
PRO
3
3.7k
AI: The stuff that nobody shows you
jnunemaker
PRO
10
1k
Chasing Engaging Ingredients in Design
codingconduct
0
320
"I'm Feeling Lucky" - Building Great Search Experiences for Today's Users (#IAC19)
danielanewman
230
23k
Hiding What from Whom? A Critical Review of the History of Programming languages for Music
tomoyanonymous
3
1.2k
Six Lessons from altMBA
skipperchong
29
4.5k
Navigating the moral maze — ethical principles for Al-driven product design
skipperchong
2
550
Imperfection Machines: The Place of Print at Facebook
scottboms
270
14k
Thoughts on Productivity
jonyablonski
76
5.4k
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
ご清聴ありがとうございました