この記事はPathee Advent Calendar 2019の7日目の記事です。
はじめに
Patheeでは毎週木曜日に社員全員を対象にシャッフルランチを開催していて、そのメンバーシャッフルの担当をしています。
チーム間交流になるようにチームをバラけさせたり、できるだけメンバーがかぶらないように前回のメンバー表と見比べたりと、手作業による調整を行ってきましたが、最近では直前の欠席の連絡による出席メンバーの確認や、その調整をする時間が取れないなど課題がありました。
そこで、スプレッドシート上での作業をSlackのコマンドを活用して効率化していきます。
今回は出席者の登録とメンバーのシャッフルを自動化します。
開発したもの
Slackのスラッシュコマンド /lunch
- 出欠確認
- メンバーを指定して欠席を登録
- 出席するメンバーの確認
- シャッフルした結果を表示
使うもの
- Slack
- シャッフルランチ用のチャンネルで欠席の連絡やメンバーの発表を行う
- スプレッドシート
- メンバーの管理・チーム分けの記録をする
- Google Apps Script
- slackのコマンドを受けてスプレッドシートを書き換えたり結果を返す
メンバーリストの作成
スプレッドシートにシャッフルランチの参加メンバーのリストを作成します
リストの項目は「名前」「SlackのUserID」「出欠」にしました
- 「名前」はメンバー一覧やシャッフル結果の表示に使用します
- 「SlackのUserID」は、Slackでメンバーの出欠登録をするときに使用します。
Slack画面の左上のチーム名をクリック、「その他管理項目」の「メンバー管理」ページから入手できます - 「出欠」には出席/欠席が入力されて、出席になっているメンバーのみシャッフル対象にします。
コマンド
SlackのAppで/lunch
というスラッシュコマンドを追加します。
parameter.text
で/lunchの後に入力された文字列を取得できるので、その文字列によって処理を分岐させます
初期化
スプレッドシートには前回の内容が入力された状態になっているので、内容をリセットします。
基本的に全員参加するので、「出席」に書き換えます。
スプレッドシートの操作のコードをまとめておきます。
// スプレッドシートの取得
var spreadsheet = SpreadsheetApp.openById('スプレッドシートID')
// シートをシート名から取得
var sheet = spreadsheet.getSheetByName('シート名');
// sheet.getLastRow()を使えばデータの入っている最後の行が取得できる
var range = "取得範囲";
// 指定範囲のデータを取得
sheet.getRange(range).getValues();
// 指定範囲のデータをセット
sheet.getRange(range).setValue("設定する値")
// シートの削除
spreadsheet.deleteSheet(sheet);
// シートのコピー
sheet.copyTo(spreadsheet);
// シート名の設定
sheet.setName("members")
出欠の登録
出欠の登録方法には2種類あり、1つはメンバーが自身の出欠をボタンで入力するもので、もう1つは欠席するメンバーを選択するものです。
メンバー自身が出欠を入力するものは、「出席」と「欠席」の2つのボタンのどちらかを入力するものになっています。
var actions = [
{
name: "feedback",
text: "出席",
style: "primary",
type: "button",
value: "出席"
},
{
name: "feedback",
text: "欠席",
style: "danger",
type: "button",
value: "欠席"
}
]
var attachments = [{
callback_id: "confirm",
actions: actions
}]
return {
text: "今日のシャッフルランチに参加しますか?",
attachments: attachments
}
欠席するメンバーを入力するほうは、data_source: "users"
でユーザのリストが選択肢となったセレクトボックスから欠席するメンバーを選べます。
var actions = [
{
name: "user",
text: "Select user",
type: "select",
data_source: "users"
}
]
var attachments = [{
callback_id: "member",
actions: actions
}]
return {
text: "欠席するメンバーを選択してください",
attachments: attachments
}
メンバーシャッフル
スプレッドシートから「出席」になっているメンバーだけを抽出し、完全にランダムでシャッフルします。
1チームが最大4人でメンバーの数が偏りすぎないように調整します。
おわりに
出欠の登録やメンバーのシャッフルを、スプレッドシートを開かずにSlackだけでできるようになりました。
まだメンバーを完全にシャッフルしているだけなので、メンバー管理用シートにメンバーのチームや過去のチームを登録できるようにして、よりいろんなメンバーと交流できるように改良していきたいです。