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

20220706_Google Apps Scriptを実演で学ぶ~ GAS × Slack ~

20220706_Google Apps Scriptを実演で学ぶ~ GAS × Slack ~

C983c1e22d0d19f21590b83884d9b754?s=128

Apachan

July 06, 2022
Tweet

More Decks by Apachan

Other Decks in Programming

Transcript

  1. 2021/07/06 1 ※ 本内容は個人的な見解であり、所属する組織と関係ありません。 Google Apps Script を実演で学ぶ ~ GAS

    × Slack ~ Block Kit Builderを使おう
  2. 自己紹介 あぱchan @ApachanHonpo 埼玉県戸田市 宮城県仙台市 業務効率化のお仕事 2 2021年 11月 WinActor

    トーク 6ヵ月20kg減
  3. 執筆書籍 3 徹底解説 RPAツールWinActor導入 ・応用 完全ガイド 絶対失敗しない!ロボット1000体 導入してわかったRPA成功の秘訣 Google Apps

    Script目的別リファ レンス実践サンプルコード付き 需要のある技術を中心に出版社に提案 第3版 2021/3 発売 第1版 2020/5 発売 第1版 2020/8 発売 Google Apps Script目的別リファ レンス実践サンプルコード付き 第2版 2022/5 新発売
  4. 主なイベント登壇 4 RPA Community Google Apps Script の特徴・利用のきっかけ 必要な情報をメールから取得する方法 TechStreet

    vol.1 2021/07 vol.2 2021/11 vol.3 2022/04 2022/7/6 Google Apps Scriptを実演で学ぶ~「GAS×Slack」 &「GAS×Notion」~
  5. テーマ 5 Block Kit Builderを使おう

  6. 6 Block Kit クリーンで一貫性のあるUIフレームワーク https://api.slack.com/block-kit

  7. 7 Block Kit Builder 画面操作でUIを作成 UI選択 UI反映 編集 ※ ワークスペースへのサインイン必須

  8. 8 今回のデモ ① Slackチャンネルに通知 GAS プロジェクト Slack チャンネル ② Slackチャンネルからの通信(参考)

  9. 9 ワークフロー① 難易度:易 Slackチャンネルに通知 GAS プロジェクト Slack チャンネル

  10. 10 Incoming Webhook パターン 利用可能プラン 説明 カスタムインテグレー ション 全プラン かんたんに設定できますが、現在Slack社より非推奨

    とされています。 SlackApp 全プラン やや複雑ですが手順がわかれば利用自体は難しくあ りません。 ワークフロービルダー スタンダード以上 ※ フリープラン不 可 かんたんに設定できますが、フリープランでは利用 できません。テキストにメンションやハイパーリン ク文字列など入れることができません。 ※ レスポンスが必要な場合はAPI利用
  11. 11 Slack App https://api.slack.com/apps Webhook URLの取得 ※ 無償版のアプリ作成は10個迄

  12. 12 Let’s Try

  13. 13 前提 function sendSlackMessage_ (url, data) { const params =

    { method: 'post', contentType: 'application/json' , payload: JSON.stringify(data) }; const res = UrlFetchApp.fetch(url, params); return res; } スクリプトプロパティの活用 Slack通知処理の分割
  14. 14 コーディング const PROPS = PropertiesService.getScriptProperties(); function gasToSlack() { const

    webhook = PROPS.getProperty('webhook'); console.log(webhook); const data = { // Bloclk Kit コード 貼り付け }; const response = sendSlackMessage_(webhook, data); Logger.log(response); } スクリプトプロパティ Slack通知処理の分割
  15. Slack チャンネル 15 ワークフロー➁ 難易度:中~高 Slackチャンネルからの通信 GAS プロジェクト デプロイなど各種設定、 doPost()、GCP...など

  16. Block Kit 16 勤怠アプリ

  17. 17 GAS側 Webアプリ HTTPリクエストの取得 発動する関数 doPost(e)

  18. 18 Slack側 エンドポイント SlackからGASの通信設定

  19. Code Slackからのリクエスト取得 19 function doPost(e) { console.log(e); Logger.log(e); // 意図的にエラー

    宣言してない変数 name }
  20. ログの比較 20 GAS GCP 何もなし ログ参照

  21. Code シートへの書き出し 21 function doPost(e) { const payload = JSON.parse(e['parameter']['payload']);

    const ssId = PROPS.getProperty('SSID'); const sh = SpreadsheetApp.openById(ssId).getSheets()[0]; sh.appendRow([payload]); }
  22. Demo 22

  23. 課題のまとめ 23 ① doPost(e) GASのプロジェクトからログが参照できません GCPに連携してロギングを参照するか、スプレッドシートなどに書き出す必要あり ② JSON解析 階層が深い...リファレンスを見た方が良いのかも... ③

    デプロイ Slackからの通信のため「テストのデプロイ」が利用できません コードが変わる度にデプロイの必要あり ④ 非同期通信 UI入力毎に通信が走る おそらく同期処理にできるはず... ⑤ 例外処理の設定 想定外のリクエストの処理
  24. ① doPost(e) GCPのロギング 24 ログの参照

  25. ② JSON解析 e['parameter']['payload'] 25 登録ボタンの判定 ユーザーの取得 入力内容の取得

  26. Appendix 26

  27. 27 Google Slides

  28. End Of File 28