Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
GAS + Spreadsheet + Slack API で レビュアーガチャを作ってみた
Search
unsoluble_sugar
April 30, 2020
Programming
0
1.6k
GAS + Spreadsheet + Slack API で レビュアーガチャを作ってみた
『完全に理解した人達の「Web技術」Talk #4 』の発表スライドです
https://easy2.connpass.com/event/173015/
unsoluble_sugar
April 30, 2020
Tweet
Share
More Decks by unsoluble_sugar
See All by unsoluble_sugar
ゆるいエンジニアリングコミュニティはいいぞ
unsoluble_sugar
0
59
Godot Engineについて調べてみた
unsoluble_sugar
0
700
ドキュメント翻訳から始めるOSS推し活
unsoluble_sugar
0
2.2k
VC ClientでRVC完全に理解した / rvc-with-vcclient-completely-understood
unsoluble_sugar
0
1.8k
VCCでVRChatにVRMアバターをアップロードする方法完全に理解した
unsoluble_sugar
0
540
技術選定完全に理解した
unsoluble_sugar
0
540
「未経験からエンジニア」でやり抜いた時の昔話
unsoluble_sugar
0
2.6k
Coursera完全に理解した
unsoluble_sugar
0
4.2k
歴史的経緯から学ぶVTuber超入門
unsoluble_sugar
0
1.1k
Other Decks in Programming
See All in Programming
ISUCON研修おかわり会 講義スライド
arfes0e2b3c
1
450
チームで開発し事業を加速するための"良い"設計の考え方 @ サポーターズCoLab 2025-07-08
agatan
1
420
プロダクト志向なエンジニアがもう一歩先の価値を目指すために意識したこと
nealle
0
130
チームのテスト力を総合的に鍛えて品質、スピード、レジリエンスを共立させる/Testing approach that improves quality, speed, and resilience
goyoki
5
880
Team operations that are not burdened by SRE
kazatohiei
1
310
『自分のデータだけ見せたい!』を叶える──Laravel × Casbin で複雑権限をスッキリ解きほぐす 25 分
akitotsukahara
2
640
なんとなくわかった気になるブロックテーマ入門/contents.nagoya 2025 6.28
chiilog
1
270
たった 1 枚の PHP ファイルで実装する MCP サーバ / MCP Server with Vanilla PHP
okashoi
1
260
NPOでのDevinの活用
codeforeveryone
0
840
ソフトウェア品質を数字で捉える技術。事業成長を支えるシステム品質の マネジメント
takuya542
1
13k
Composerが「依存解決」のためにどんな工夫をしているか #phpcon
o0h
PRO
1
260
AIエージェントはこう育てる - GitHub Copilot Agentとチームの共進化サイクル
koboriakira
0
590
Featured
See All Featured
Learning to Love Humans: Emotional Interface Design
aarron
273
40k
The Myth of the Modular Monolith - Day 2 Keynote - Rails World 2024
eileencodes
26
2.9k
Why Our Code Smells
bkeepers
PRO
336
57k
A designer walks into a library…
pauljervisheath
207
24k
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
34
5.9k
KATA
mclloyd
30
14k
Let's Do A Bunch of Simple Stuff to Make Websites Faster
chriscoyier
507
140k
I Don’t Have Time: Getting Over the Fear to Launch Your Podcast
jcasabona
32
2.4k
The Pragmatic Product Professional
lauravandoore
35
6.7k
Building Flexible Design Systems
yeseniaperezcruz
328
39k
RailsConf & Balkan Ruby 2019: The Past, Present, and Future of Rails at GitHub
eileencodes
138
34k
The Power of CSS Pseudo Elements
geoffreycrofte
77
5.9k
Transcript
GAS + Spreadsheet + Slack API で レビュアーガチャを作ってみた @unsoluble_sugar
お前誰 ? @unsoluble_sugar ❏TOPGATE, Inc. / Mobile App Engineer ❏Tech
Hunter / Blogger, Game App Engineer ❏Easy Easy / Organizer ❏Otaku / Game, Anime, Gadget
プルリクのレビュー誰がするの問題
チームにおける課題 プルリクを出してもレビューしてくれる人が少なかった ❏システムの理解度が浅い ❏若手など経験不足のメンバー ❏レビュアーが集中してしまう ❏高まり続ける属人性
理想はペアプロ、モブプロ的なやつ
現実は厳しい…
レビュアーガチャで解決!
レビュアーガチャとは! レビュアーの選出を自動化するシステムのことである ❏プログラムによるランダム抽選 ❏Slackチャンネルでメンションを投げる ❏レビューし合う文化を浸透させる
ガチャによる課題解決 均等にレビュアーの機会を得られると… ❏レビュー依頼の手間が省ける ❏システムの理解度が深まる ❏若手などのスキル向上 ❏レビュアーの分散化 ❏属人化の解消
要件定義
利便性と楽しさを 必要最低要件+α ❏対象プルリクのURLを指定 ❏チェックボックスで対象者を選択 ❏投稿チャンネルの切り替えに対応 ❏メンション通知のキャラ追加&カスタマイズ可
さっそく作ってみた
最小コストで実現する 自分の知見を活かした技術選定 ❏GAS(Google Apps Script)でサクッと作る ❏データはSpreadsheetで管理 ❏Slack APIを使ったチャットbot
最小コストで実現する 自分の知見を活かした技術選定 ❏GAS(Google Apps Script)でサクッと作る ❏データはSpreadsheetで管理 ❏Slack APIを使ったチャットbot なお、開発はWeb上で完結する模様
Google Apps Scriptとは? Googleが開発したJavaScriptベースのスクリプトプラットフォーム ❏ブラウザ上のエディタで開発可能 ❏Google提供サービスとの連携が容易 ❏主に軽量なアプリ向け ❏Webアプリ・API化なども可能 ❏clasp(CLIツール)でローカル開発も https://github.com/google/clasp
Google Spreadsheetとは? Google版のExcelみたいなやつ ❏マクロや関数も使用可能 ❏グラフ表示などもできる ❏Googleフォームのアンケート集計 などにも使用される ❏Google Apps Scriptとの相性が良い
Slack APIとは? SlackのAPIだよ(真理) ❏Slackからユーザー情報を取得 ❏Slackのチャンネル・DMへ投稿 ❏最近はなんか色々できます
Spreadsheetの構成
データ管理用シートとして使用 大きく4つに分けました ❏レビュアー一覧 ❏プルリクエストURL ❏投稿チャンネル設定 ❏投稿キャラクター情報の管理
レビュアー一覧 メンバーIDはプロフィールから取得できる ❏メンション ID(表示用) ❏メンバー ID(内部用) ❏チェックボックスで対象を選択
プルリクエストURL (シート分ける意味) ❏レビュー対象のプルリクURL
投稿チャンネル設定 テスト用に切り替えたかったので ❏投稿チャンネルの一覧表示 ❏「データの入力規則」を使用 ❏チャンネル名でも動くが、内部的には チャンネルIDを使用するのが良い ※名前変更されると追従する必要がある
投稿キャラクター情報の管理 実は一番力を入れているシート(笑) ❏キャラクター名 ❏投稿メッセージ ❏メンションを含められる ❏アイコン画像URL ❏IMAGE関数でサムネ表示
Slack APIの準備
Slack APIの準備 メッセージ投稿に使うだけ ❏Slack App Botの追加 ❏Access Tokenの取得 ❏今回はライブラリを使用 シンプルに書けてコード補完も効くなど便利
https://github.com/soundTricker/SlackApp
Google Apps Scriptの実装
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
Google Apps Scriptの処理 Spreadsheetの情報を取得&Slackへ投稿 ❏レビュアー一覧の取得、抽選処理 ❏プルリクエストURLの取得 ❏投稿チャンネルの取得 ❏投稿キャラクター情報の取得 ❏Slackへ投稿
Google Apps Scriptの実装 シート情報を取得して必要な実装をしていくだけ ❏チェックの付いたメンバーから選出 ❏キャラ情報のセット ❏メンションKeyの置換 ❏プルリクURLが空のときに確認 ❏Spreadsheetのメニュー追加 https://developers.google.com/apps-script/reference/base/ui
https://developers.google.com/apps-script/reference/spreadsheet/spreadsheet
そんな感じでザッとやれば動きます
ガチャ回し放題 Spreadsheet上から実行すればSlackへ投稿 ❏基本はレビュアー候補ポチポチー、プルリクセットでガチャ回すだけ ❏キャラ選定やセリフのカスタマイズが腕の見せ所(?)
可能性は無限大 どこまで自動化すべきかは悩みどころ… ❏Webhookによるプルリク作成検知 ❏GitHub APIを使ってReviewer割り当て ❏Slackコマンドによる実行 ❏Interactive Message対応 ❏Web画面化など
GAS Spreadsheet Slack API 完全に理解した チームの課題解決にぜひお試しを
日常的に使ってもらえる ツールで承認欲求得ていく スタイルマジおすすめ
@unsoluble_sugar https://unsolublesugar.com/ https://github.com/unsolublesugar https://qiita.com/unsoluble_sugar https://teratail.com/users/unsoluble_sugar ご清聴ありがとうございました