背景と課題
以前から、自分たちのチームでは、仕事以外のコミュニケーションを確保するために、「毎日朝会を実施して、その中で10分間程度の雑談をする」という決まりごとがありました。
しかし、コロナウイルスでリモートワーク中心に移行してからは、「WEB上のミーティングツール(zoom)では会話がかぶるとひどく話しづらく、なかなか会話に入れないメンバーが出てきてしまう」という問題が発生するようになり、「ブレイクアウトルームの機能を使って、3~4人の部屋にランダムに分ける」ようにやり方を工夫しています。
ただ、より少人数になると、会話の頻度が増え、話の内容に困る場面も増えてしまいました。
実装したもの
この問題に対処するため、次のような通知をGoogle Apps Scriptで実装してみました。
- 朝会の時間にチャット(ChatWork)に通知する
- 「困ったらこれを話しておけ」というテーマをランダムに生成してメッセージに含める
具体的には次のようなメッセージが通知されます。
🌅朝会の時間です🌅
司会: 1番目の人
お題: ネットで話題の学びの話
https://zoom.us/j/{zoomのURL}
プログラム
実際のプログラムも掲載しておきます。工夫した点は以下の3つです。
- 「形容詞+お題」の組み合わせで飽きないようにした
- 形容詞の部分は、煽り気味のビジネス書っぽいタイトル(失礼)とかを参考にしている(失礼)
- カレンダーから予定を取ってきて、祝日を判定している
- 水曜日は時差出勤で出社する人が多いため、時間をずらしている
const TOKEN = '{YOUR ACCESS TOKEN}';
const ODAIS = [
"仕事",
"学び",
"健康",
"趣味",
"テクノロジー",
];
const ROOM_ID = '{YOUR ROOM_ID}';
const KEIYOUSHIS = [
'楽しい',
'かわいい',
'びっくりする',
'最近感動した',
'みんなに教えたくない',
'最近気になってる',
'海外の',
'地元の',
'毎日やってる',
'人には教えたくない',
'親世代に薦めたい',
'リモートワーク中の',
'リモートワークで困ってる',
'ついついやっちゃう',
'老後にやりたい',
'子供の頃の',
'変わった友達の',
'尊敬してる人の',
'実はやめたほうがいいと思ってる',
'これから変えなきゃいけないと思ってる',
'毎朝、起きてすぐにやる',
'ずっと悩んでる',
'これから伸びる',
'10年後の',
'若いうちにやったほうがいい',
'毎日続けられる',
'いままで一番やらかした',
'最近知った',
'LIFULLで見たすごい',
'最近買った',
'世界一シンプルな',
'最速で結果を出すための',
'ネットで話題の',
'ずっとやりたいと思ってる',
'今までの人生で一番がんばった',
'他のメンバーのイケてる',
'機械学習と絡めた',
'大学時代にやってた',
'先週末の',
'そういえば最近やってない',
'自分たちが成長するための',
'充実した毎日に必要な',
'一度質問してみたかった',
'これからどうなるか不安な',
'偉い人に聞きたい',
'LIFULLやチームに取り入れたい',
'生産性を上げるための',
'10年前の自分に教えたい',
'一番好きな',
];
function setTrigger(){
if (!isWeekDay()) return;
triggerStep("myFunction", 10, 0);
}
function triggerStep(funcname, hour, minutes) {
const setTime = new Date();
setTime.setHours(hour);
setTime.setMinutes(minutes);
ScriptApp.newTrigger(funcname).timeBased().at(setTime).create();
}
function myFunction() {
postNotification(createMessage());
if (new Date().getDay() == 3) {
triggerStep("postMainNotification", 11, 0);
}
}
function postNotification(message) {
const client = ChatWorkClient.factory({token: TOKEN});
client.sendMessage({
room_id: ROOM_ID,
body: message
});
}
function postMainNotification() {
postNotification(createMainMessage());
}
function createMessage() {
if(isHoliday()) {
return "今日は祝日です";
} else if (new Date().getDay() == 3) {
return "朝会は11時からです";
} else {
return createMainMessage();
}
}
/**
* 平日であるかどうかを判定する
*/
function isWeekDay() {
const day = new Date().getDay();
return !(day === 0 || day === 6);
}
function isHoliday() {
const today = new Date();
const calendars = CalendarApp.getCalendarsByName('日本の祝日');
const count = calendars[0].getEventsForDay(today).length;
return count === 1;
}
function createMainMessage() {
const i = randomChoice([1, 2, 3]);
const k = randomChoice(KEIYOUSHIS);
const x = randomChoice(ODAIS);
return `[info][title]🌅朝会の時間です🌅[\/title]司会: ${i}番目の人\nお題: ${k}${x}の話\nhttps://us02web.zoom.us/j/{zoomのURL}[\/info]`;
}
function randomChoice(array) {
return array[Math.floor(Math.random() * array.length)];
}