Slide 1

Slide 1 text

GAS + Spreadsheet + Slack API で レビュアーガチャを作ってみた @unsoluble_sugar

Slide 2

Slide 2 text

お前誰 ? @unsoluble_sugar ❏TOPGATE, Inc. / Mobile App Engineer ❏Tech Hunter / Blogger, Game App Engineer ❏Easy Easy / Organizer ❏Otaku / Game, Anime, Gadget

Slide 3

Slide 3 text

プルリクのレビュー誰がするの問題

Slide 4

Slide 4 text

チームにおける課題 プルリクを出してもレビューしてくれる人が少なかった ❏システムの理解度が浅い ❏若手など経験不足のメンバー ❏レビュアーが集中してしまう ❏高まり続ける属人性

Slide 5

Slide 5 text

理想はペアプロ、モブプロ的なやつ

Slide 6

Slide 6 text

現実は厳しい…

Slide 7

Slide 7 text

レビュアーガチャで解決!

Slide 8

Slide 8 text

レビュアーガチャとは! レビュアーの選出を自動化するシステムのことである ❏プログラムによるランダム抽選 ❏Slackチャンネルでメンションを投げる ❏レビューし合う文化を浸透させる

Slide 9

Slide 9 text

ガチャによる課題解決 均等にレビュアーの機会を得られると… ❏レビュー依頼の手間が省ける ❏システムの理解度が深まる ❏若手などのスキル向上 ❏レビュアーの分散化 ❏属人化の解消

Slide 10

Slide 10 text

要件定義

Slide 11

Slide 11 text

利便性と楽しさを 必要最低要件+α ❏対象プルリクのURLを指定 ❏チェックボックスで対象者を選択 ❏投稿チャンネルの切り替えに対応 ❏メンション通知のキャラ追加&カスタマイズ可

Slide 12

Slide 12 text

さっそく作ってみた

Slide 13

Slide 13 text

最小コストで実現する 自分の知見を活かした技術選定 ❏GAS(Google Apps Script)でサクッと作る ❏データはSpreadsheetで管理 ❏Slack APIを使ったチャットbot

Slide 14

Slide 14 text

最小コストで実現する 自分の知見を活かした技術選定 ❏GAS(Google Apps Script)でサクッと作る ❏データはSpreadsheetで管理 ❏Slack APIを使ったチャットbot なお、開発はWeb上で完結する模様

Slide 15

Slide 15 text

Google Apps Scriptとは? Googleが開発したJavaScriptベースのスクリプトプラットフォーム ❏ブラウザ上のエディタで開発可能 ❏Google提供サービスとの連携が容易 ❏主に軽量なアプリ向け ❏Webアプリ・API化なども可能 ❏clasp(CLIツール)でローカル開発も https://github.com/google/clasp

Slide 16

Slide 16 text

Google Spreadsheetとは? Google版のExcelみたいなやつ ❏マクロや関数も使用可能 ❏グラフ表示などもできる ❏Googleフォームのアンケート集計 などにも使用される ❏Google Apps Scriptとの相性が良い

Slide 17

Slide 17 text

Slack APIとは? SlackのAPIだよ(真理) ❏Slackからユーザー情報を取得 ❏Slackのチャンネル・DMへ投稿 ❏最近はなんか色々できます

Slide 18

Slide 18 text

Spreadsheetの構成

Slide 19

Slide 19 text

データ管理用シートとして使用 大きく4つに分けました ❏レビュアー一覧 ❏プルリクエストURL ❏投稿チャンネル設定 ❏投稿キャラクター情報の管理

Slide 20

Slide 20 text

レビュアー一覧 メンバーIDはプロフィールから取得できる ❏メンション ID(表示用) ❏メンバー ID(内部用) ❏チェックボックスで対象を選択

Slide 21

Slide 21 text

プルリクエストURL (シート分ける意味) ❏レビュー対象のプルリクURL

Slide 22

Slide 22 text

投稿チャンネル設定 テスト用に切り替えたかったので ❏投稿チャンネルの一覧表示 ❏「データの入力規則」を使用 ❏チャンネル名でも動くが、内部的には チャンネルIDを使用するのが良い ※名前変更されると追従する必要がある

Slide 23

Slide 23 text

投稿キャラクター情報の管理 実は一番力を入れているシート(笑) ❏キャラクター名 ❏投稿メッセージ ❏メンションを含められる ❏アイコン画像URL ❏IMAGE関数でサムネ表示

Slide 24

Slide 24 text

Slack APIの準備

Slide 25

Slide 25 text

Slack APIの準備 メッセージ投稿に使うだけ ❏Slack App Botの追加 ❏Access Tokenの取得 ❏今回はライブラリを使用 シンプルに書けてコード補完も効くなど便利 https://github.com/soundTricker/SlackApp

Slide 26

Slide 26 text

Google Apps Scriptの実装

Slide 27

Slide 27 text

Google Apps Scriptの準備 Slack API、Spreadsheet連携用 ❏SlackAppライブラリの導入 https://developers.google.com/apps-script/guides/libraries?hl=ja ❏Spreadsheetのアクセス権限追加 https://developers.google.com/identity/protocols/oauth2/scopes

Slide 28

Slide 28 text

Google Apps Scriptの処理 Spreadsheetの情報を取得&Slackへ投稿 ❏レビュアー一覧の取得、抽選処理 ❏プルリクエストURLの取得 ❏投稿チャンネルの取得 ❏投稿キャラクター情報の取得 ❏Slackへ投稿

Slide 29

Slide 29 text

Google Apps Scriptの実装 シート情報を取得して必要な実装をしていくだけ ❏チェックの付いたメンバーから選出 ❏キャラ情報のセット ❏メンションKeyの置換 ❏プルリクURLが空のときに確認 ❏Spreadsheetのメニュー追加 https://developers.google.com/apps-script/reference/base/ui https://developers.google.com/apps-script/reference/spreadsheet/spreadsheet

Slide 30

Slide 30 text

そんな感じでザッとやれば動きます

Slide 31

Slide 31 text

ガチャ回し放題 Spreadsheet上から実行すればSlackへ投稿 ❏基本はレビュアー候補ポチポチー、プルリクセットでガチャ回すだけ ❏キャラ選定やセリフのカスタマイズが腕の見せ所(?)

Slide 32

Slide 32 text

可能性は無限大 どこまで自動化すべきかは悩みどころ… ❏Webhookによるプルリク作成検知 ❏GitHub APIを使ってReviewer割り当て ❏Slackコマンドによる実行 ❏Interactive Message対応 ❏Web画面化など

Slide 33

Slide 33 text

GAS Spreadsheet Slack API 完全に理解した チームの課題解決にぜひお試しを

Slide 34

Slide 34 text

日常的に使ってもらえる ツールで承認欲求得ていく スタイルマジおすすめ

Slide 35

Slide 35 text

@unsoluble_sugar https://unsolublesugar.com/ https://github.com/unsolublesugar https://qiita.com/unsoluble_sugar https://teratail.com/users/unsoluble_sugar ご清聴ありがとうございました