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

Google Apps Script で始める RPA / RPA starting with...

tanabee
September 20, 2018

Google Apps Script で始める RPA / RPA starting with GAS

Google Cloud Next '18 in Tokyo (2018/09/19-20) の登壇資料です。
https://cloud.withgoogle.com/next18/tokyo/sessions/session/223235

登壇の詳細についてはこちら
https://qiita.com/tanabee/items/337c29c303e8729e144a

リンク遷移できる Google スライド版もあります(Google スライド推奨)。
https://docs.google.com/presentation/d/16Oo0_rVPl-gieZNAj2HNtWqQMJCPhW27CqLk-c5peyY/edit?usp=sharing

tanabee

September 20, 2018
Tweet

More Decks by tanabee

Other Decks in Programming

Transcript

  1. 田邉 裕貴 株式会社グロービス リードエンジニア ヤフー > VR スタートアップ > グロービス

    グロービスのラーニングプラットフォームチームに所属。 業務自動化、スクラムの普及、採用なども行う。 Speaker
  2. Qiita に Google Apps Script (GAS) ネタ投稿しています - GAS ビギナーが

    GAS を使いこなすために知るべきこと 10 選 - Google Apps Script (GAS) で毎週 30 分の雑務を自動化した話 - 3 分で作る無料の翻訳 API など Speaker
  3. Agenda • RPA とは • Google Apps Script とは •

    Google Apps Script の強み・弱み • グロービスでの RPA の取り組み・事例集
  4. RPA とは - Robotic Process Automation の略。 - ロボットによる業務自動化 -

    RPA はこれまで人間が行ってきた定型的なパソコン操作を ソフトウエアのロボットにより自動化するもの http://www.soumu.go.jp/menu_news/s-news/02tsushin02_04000043.html
  5. RPA 導入状況 ( 2017 年調査 ) - 国内企業の - 14.1%

    が導入済み - 6.3% が導入中 - 19.1% が導入を検討中 http://www.soumu.go.jp/menu_news/s-news/02tsushin02_04000043.html
  6. RPA 市場 ( 2017 年調査 ) - 2017 年度 :

    31 億円 - 2021 年度 : 100 億円規模 http://www.soumu.go.jp/menu_news/s-news/02tsushin02_04000043.html
  7. RPA の 3 つの段階 http://www.soumu.go.jp/menu_news/s-news/02tsushin02_04000043.html クラス 作業範囲や利用技術 1: RPA (

    Robotic Process Automation ) 情報取得や入力作業、検証作業など 2: EPA( Enhanced Process Automation ) AI 技術を用いることによる非定型作業 3: CA( Cognitive Automation ) プロセスの分析や改善、意思決定までを自ら自動化
  8. RPA の 3 つの段階 http://www.soumu.go.jp/menu_news/s-news/02tsushin02_04000043.html クラス 作業範囲や利用技術 1: RPA (

    Robotic Process Automation ) 情報取得や入力作業、検証作業など 2: EPA( Enhanced Process Automation ) AI 技術を用いることによる非定型作業 3: CA( Cognitive Automation ) プロセスの分析や改善、意思決定までを自ら自動化
  9. Google Apps Script とは - Google Apps ( Spreadsheet, Docs,

    Gmail, Slide など ) の API を 簡単にクラウドで実行できる環境 - G Suite に強い FaaS - GAS と略される
  10. Google Apps Script の言語環境 - プログラミング言語は JavaScript ( Version 1.6

    がベース ) - Web フロントエンド JavaScript と異なる > DOM, Window API はない - Node.js とも異なる > Node.js の Core API が使えない > npm モジュールは標準で非対応 https://developers.google.com/apps-script/guides/services/#basic_javascript_features
  11. Google Apps のイベントで発火 - 特定の Docs を開いた時 - スプレッドシート更新時 -

    Google フォーム回答時 など 公式ガイドの Event Objects 参照 https://developers.google.com/apps-script/guides/triggers/events
  12. ミニマムな API 実装 function doGet(e) { return ContentService.createTextOutput("hello world!"); }

    function doPost(e) { return ContentService.createTextOutput("OK"); }
  13. ミニマムな API 実装 function doGet(e) { return ContentService.createTextOutput("hello world!"); }

    function doPost(e) { return ContentService.createTextOutput("OK"); } doGet と doPost を実装 - doGet: GET リクエストに反応 - doPost: POST リクエストに反応
  14. ミニマムな API 実装 function doGet(e) { return ContentService.createTextOutput("hello world!"); }

    function doPost(e) { return ContentService.createTextOutput("OK"); } 以下のいずれかの型の値を返す - HtmlOutput - TextOutput
  15. ミニマムな API 実装 function doGet(e) { return ContentService.createTextOutput("hello world!"); }

    function doPost(e) { return ContentService.createTextOutput("OK"); } e: リクエスト時の値を参照できる - doGet: e.queryString, e.parameter - doPost: e.postData.contents
  16. 無料の翻訳 API もすぐ作れます 1. doGet(e) で GET リクエスト受付 2. LanguageApp.translate()

    で翻訳して return function doGet(e) { var p = e.parameter; var result = LanguageApp.translate(p.text, p.source, p.target); return ContentService.createTextOutput(result); } https://qiita.com/tanabee/items/c79c5c28ba0537112922
  17. Google Apps 以外の Web API をたたく UrlFetchApp.fetch で API リクエスト(POST

    Slack) function postSlack(slackWebhookUrl) { var payload = JSON.stringify({ text: 'message' }); var res = UrlFetchApp.fetch(slackWebhookUrl, { method: 'POST', headers: { "Content-Type": 'application/json' }, payload: payload }); }
  18. GitHub でソースコード管理 - ローカルで開発して GitHub 連携 - Chrome 拡張: Google

    Apps Script Github アシスタント ↑この辺が拡張されて github に  push / pull できるようになる
  19. Google Apps Script の強み - Google Apps のデータを簡単に操作できる - 無料

    - 他の FaaS 同様にデプロイが容易 - Cloud Functions - AWS Lambda
  20. Google Apps Script の弱み - 割当により、様々な制限がある - 1 回、1 日あたりの実行時間

    - 各種 API の呼び出し回数 など - npm モジュールは標準で非対応
  21. Google Apps Script を選択するかの判断基準 - Google Apps に関わる処理かどうか - Google

    Apps の標準機能で実現できないか - コード量が膨大にならないか(100 行前後が目安) - npm パッケージが欲しくなるような複雑な処理が含まれないか - 最悪失敗しても許される処理か - どうしても無料の範囲で使いたいか
  22. 実績 2018 年 4 月に発足し 2018 年 8 月時点で 月

    300 時間以上の時間削減に成功! これに対し、かけた工数は合計 50 時間程度
  23. 1. 検索・抽出 GmailApp.search(query, start, max) - query: 検索文字列 - start:

    開始インデックス - max: 最大取得スレッド数 var threads = GmailApp.search(query, 1, 500); https://qiita.com/tanabee/items/17eb721801eff8d97db9
  24. 2. 一括登録 Calendar.createEvent(title, startTime, endTime, options) - title: イベント名 -

    startTime: 開始日時 - endTime: 終了日時 - options: 説明文、場所、ゲストなど https://qiita.com/tanabee/items/7ebcc63e5b561d18a582
  25. Google Form 投稿時に Slack 通知 - トリガー: Google Form 投稿時

    1. Form 投稿 2. 通知 https://github.com/tanabee/form-to-slack
  26. 3. 通知 UrlFetchApp.fetch(url, params) - url: URL - params: HTTPメソッド、ヘッダー、ボディなど

    var res = UrlFetchApp.fetch(slackWebhookUrl, { method: 'POST', headers: { "Content-Type": 'application/json' }, payload: JSON.stringify({ text: 'message' }) }); https://github.com/tanabee/form-to-slack
  27. 表形式データを JSON 形式に変換 - Web 公開 1. HTTP リクエスト 2.

    JSON 形式に  変換して返す https://github.com/tanabee/spreadsheet-to-json
  28. 表形式データを JSON 形式に変換 1. doGet(e) で GET リクエスト受付 2. Range.getValues()

    で Array 取得 3. JSON 形式に変換して return function doGet(e) { // 変換コード省略 return ContentService.createTextOutput(JSON.stringify(result)) .setMimeType(ContentService.MimeType.JSON); } https://github.com/tanabee/spreadsheet-to-json
  29. 会議セッティング代行業務 1. Form 投稿 2. 予約できる場合は予約 - トリガー: Google Form

    投稿時 1. 蓄積 3. 予約状況をスプレッドシート に 入力してメール通知
  30. 会議セッティング代行業務 1. Calendar.getEvents() でカレンダー重複確認 a. 重複なし: Calendar.createEvent() でカレンダー登録 b. 重複あり:

    代替スケジュールを探す 2. Range.setValues(values) で予約状況をシートに入力 3. GmailApp.sendEmail() でメール送信
  31. 定例 MTG の議事録テンプレート自動生成 - 時間主導型トリガー: 毎週 1. MTG 抽出 2.

    テンプレート取得 3. Qiita:Team に投稿 4. Slack に投稿 https://qiita.com/tanabee/items/e51f107f1e95a42cc636
  32. 定例 MTG の議事録テンプレート自動生成 1. Calendar.getEvents() で定例 MTG 取得 2. Document.getBody()

    でテンプレート文章取得 3. UrlFetchApp.fetch() で Qiita:Team 投稿 API に POST 4. CalendarEvent.setDescription() で Qiita:Team の記事 URL を入力 5. UrlFetchApp.fetch() で Slack 投稿 https://qiita.com/tanabee/items/e51f107f1e95a42cc636
  33. [おまけ] 社内メンバーの Qiita 投稿を Slack で応援促進 - 時間主導型トリガー: 15 分毎

    - Slack で RSS 通知はできるがカスタマイズしたいときに便利 https://qiita.com/tanabee/items/665917d9ab976661115c 2. 通知 1. RSS 取得
  34. 1. UrlFetchApp.fetch() で Qiita Organization feed を取得 2. XmlService.parse() でパース

    3. UrlFetchApp.fetch() で Slack 投稿 https://qiita.com/tanabee/items/665917d9ab976661115c [おまけ] 社内メンバーの Qiita 投稿を Slack で応援促進
  35. - Google Apps Script による RPA は効果的 - Google Apps

    Script でやろうとする前に、 それ以外の選択肢も考えるべき - 実際に触ってみるのが一番なので、ハンズオン実施します > http://bit.ly/gas-hands-on まとめ