Upgrade to Pro — share decks privately, control downloads, hide ads and more …

GAS ビギナーが GAS を使いこな すために知るべきこと 10 選 / for Google App Script begginers

tanabee
April 03, 2018

GAS ビギナーが GAS を使いこな すために知るべきこと 10 選 / for Google App Script begginers

tanabee

April 03, 2018
Tweet

More Decks by tanabee

Other Decks in Programming

Transcript

  1. /me 株式会社グロービス リードエンジニア - github / Qiita : tanabee - twitter:

    @_tanabee プライベートで iOS / Android アプリ開発 累計 100 万 DL 達成
  2. /me - Qiita に GAS ネタ投稿してます - Google Apps Script

    (GAS) で毎週 30 分の雑務を自動化した話 - 3 分で作る無料の翻訳 API with Google Apps Script - Qiita Organizations Ranking
  3. 2. github でソースコード管理する - ローカルで開発して git 連携 - Chrome 拡張:

    Google Apps Script Github アシスタント ↑この辺が拡張されて github に  push / pull できるようになる
  4. function main() { var num = add(1, 2); Logger.log(num); }

    function add(a, b) { return a + b; } main.gs util.gs
  5. 4. トリガー - “毎週何曜日のこの時間帯に実行” など - 分 / 時 /

    日 / 週 / 月タイマー - Heroku でいう Scheduler - 編集 > 現在のプロジェクトのトリガー
  6. - 特定の Docs を開いた時 - スプレッドシート更新時 - Google フォーム回答時 -

    などなど 公式ガイドの Event Objects 参照 https://developers.google.com/apps-script/guides/triggers/events 4. G Suite サービスのイベントで発火
  7. 4. Web 公開 - スクリプトを API や Web ページとして公開できる -

    公開 > ウェブアプリケーションとして導入
  8. 4. ミニマムな API 実装 function doGet(e) { return ContentService.createTextOutput("hello world!");

    } function doPost(e) { return ContentService.createTextOutput("OK"); }
  9. function doGet(e) { return ContentService.createTextOutput("hello world!"); } function doPost(e) {

    return ContentService.createTextOutput("OK"); } doGet と doPost を実装 - doGet: GET リクエストに反応 - doPost: POST リクエストに反応 4. ミニマムな API 実装
  10. 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 実装
  11. 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 実装
  12. 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();
  13. 7. 6 分を超える処理を実行する方法 例)スプレッドシートの各行処理するスクリプト 1. 実行時間が 5 分になるのを検知 2. 次回処理を開始する行数を

    PropertiesService で保存 3. TriggerBuilder を使って新しいトリガーを 1 分後に設定 4. 処理を終了させる ※ 5 分や 1 分というのは仮の値なので、正常に動作する適切な時間を選んでください。
  14. 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)
  15. 9. Web スクレイピングの方法 1. UrlFetchApp.fetch で html を取得 2. html

    を parse a. GAS 公式のサンプルを利用 b. 独自の抽出ロジックを実装
  16. 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 でこけた時に詰む
  17. 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); }
  18. 10. GAS でライブラリを利用する - GAS では npm を利用できない - 代わりに独自の

    GAS ライブラリという仕組みがある - 他の人が公開した GAS を参照して実行するような仕組み - が、実行速度が遅いので add-on での利用は控えるべきとのこと - 良い方法知ってる方いたら教えてくださいmm https://developers.google.com/apps-script/guides/libraries