9
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

リモートワーク中の雑談ネタをランダムに作って通知する

Last updated at Posted at 2020-08-18

背景と課題

以前から、自分たちのチームでは、仕事以外のコミュニケーションを確保するために、「毎日朝会を実施して、その中で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)];
}
9
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
9
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?