아침회의 facilitor를 무작위로 결정하는 slack bot

이것은 무엇인가


  • 평일의 정해진 시간에, random에 1명, Daily Scrum(≒ 아침회)의 Facilitator를 결정하는 slack bot를 만드는 방법

  • 배경


  • Scrum 개발을 원활하게 진행하는 데 있어서, Scrum Master에 의존한 운용 체제는 Scrum team의 목표로 하는 모습이 아니다
  • 과제를 해결하는 한 가지 방법으로 Daily Scrum의 Facilitator를 돌리는 작업을 넣으면 멤버가 능동적이었습니다.

    출력 이미지


  • 평일의 정해진 시간에, SpreadSheet로부터 1명 random에 선택해, 특정의 Slack에 post한다

  • SpreadSheet





    슬랙 채널





    소스 코드


    
    var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet()
    var lastrow = sheet.getLastRow();
    var lastcol = sheet.getLastColumn();
    var sheetdata = sheet.getSheetValues(1, 1, lastrow, lastcol);
    var calJa = CalendarApp.getCalendarById('ja.japanese#[email protected]');
    
    function Facilitator(){
      var today = new Date();
      var weekInt = today.getDay();
      if(weekInt == 0 || weekInt == 6){
        return false;
      }
      else if(calJa.getEventsForDay(today).length > 0){ 
        return false;
      }
      else{ 
        var row = Math.floor(Math.random() * 7) + 2;
        var Name = sheetdata[row][0];  
        var row2 = Math.floor(Math.random() * 7) + 2;
        var Face = sheetdata[row2][1];
        var slackAccessToken = 'xxxxx(slack workspaceで一意に持っているので、要確認)';
        var slackApp = SlackApp.create(slackAccessToken);
        var channelId = "xxx-yyy-2020(postしたいslack channel名)";
        var Message = slackApp.postMessage(channelId,"Today's facilitator is…" + Name +"-san"+ " " + "Let's GoGo!" + Face);
      }
    }
    

    거친 구성 해설



    SpreadSheet에 액세스하여 작성한 내용을 얻습니다.


    var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet()
    var lastrow = sheet.getLastRow();
    var lastcol = sheet.getLastColumn();
    var sheetdata = sheet.getSheetValues(1, 1, lastrow, lastcol);
    var calJa = CalendarApp.getCalendarById('ja.japanese#[email protected]');
    
  • SpreadsheetApp.getActiveSpreadsheet().getActiveSheet()에서 GAS에서 활성 SpreadSheet에 액세스합니다.
  • getLastRow()에서 액세스 한 SpreadSheet의 마지막 행을 가져옵니다.
  • getLastColumn()에서 마찬가지로 마지막 열을 가져옵니다.
  • getSheetValues(startrow, startcol, lastrow, lastcol) 에서 액세스하는 SpreadSheet 내의 전체 값을 가져옵니다.
  • 상기의 getLastRow(), getLastColumn() 로 대상 범위내의 마지막 행과 열을 동적으로 취득할 수 있으므로, 멤버가 증가한다 or 줄어든다(행++ or 행--), 투고하고 싶은 요소가 증가한다 or 줄어든다(열++ or 열--) 경우에도 괜찮습니다

  • CalendarApp.getCalendarById('省略')는 Google Calender의 일본 휴일 캘린더에 액세스합니다.

    SpreadSheet에서 특정 이름과 얼굴을 선택하여 슬랙 채널로 보내기


    
    function Facilitator(){
      var today = new Date();
      var weekInt = today.getDay();
      if(weekInt == 0 || weekInt == 6){
        return false;
      }
      else if(calJa.getEventsForDay(today).length > 0){ 
        return false;
      }
      else{ 
        var row = Math.floor(Math.random() * 8) + 2;
        var Name = sheetdata[row][0];  
        var row2 = Math.floor(Math.random() * 8) + 2;
        var Face = sheetdata[row2][1];
        var slackAccessToken = 'xxxxx(slack workspaceで一意に持っているので、要確認)';
        var slackApp = SlackApp.create(slackAccessToken);
        var channelId = "xxx-yyy-2020(postしたいslack channel名)";
        var Message = slackApp.postMessage(channelId,"Today's facilitator is…" + Name +"-san"+ " " + "Let's GoGo!" + Face);
      }
    }
    
  • today.getDay() 로, 지정된 일자의 「요일」을 취득하고 있다
  • 반환되는 값은 0 ~ 6이며, 0 == 日曜日, 1 == 月曜日... ,6 == 土曜日입니다.

  • weekInt == 0 || weekInt == 6 에서, 휴일(토요일 or 일요일)은 보내지 않게 하고 있다
  • calJa.getEventsForDay(today).length > 0 그리고 휴일 이벤트가 캘린더에 하나라도있을 때 보내지 않도록합니다.
  • Math.floor(Math.random() * 8) + 2 에서는, 최대로 9, 최소로 2가 되는 행 번호를 1개 취득해, 1열째에 적용하고 있다
  • Math.floor()에서 ()의 값을 소수점 이하로 자릅니다.
  • Math.random()에서 0 이상 1 미만 (0은 포함하지만 1은 포함하지 않음) 사이의 random 값을 반환합니다.
  • 다음에 나온다 row2 의 내용도 같은 일을 하고 있다

  • slackAccessToken 주위는 GAS와 Slack으로 시작하는 채팅봇~초보자 프로그래머용~ 주변을 참고로 한다
  • channelId = "xxx-yyy-2020(postしたいslack channel名)" post 하고 싶은 Slack Channel명을 #빼기로 기술한다
  • slackApp.postMessage(channelId,"Today's facilitator is…" + Name +"-san"+ " " + "Let's GoGo!" + Face) 에서 실제로 해당 Slack Channel에 post하지만, text로 직접 기술하고 있는 부분은 변경해 주어 괜찮다 (ex. "Today's facilitator is…" , "-san" etc)

  • 트리거


  • Daily Scrum이 매일 아침 12:30 ~ 12:45 이었기 때문에 여유를 가지고 10:00 ~ 11:00 사이에 발화하도록 설정하고 있습니다



  • 참고



  • 매주 청소 당번을 Slack에 무작위로 통지
  • 기본 구성은 상기를 꽤 참고로 했습니다 mm


  • 청소 당번 할당을 Google Apps Script로 자동화하여 Slack BOT로 알림
  • 필자는 위의 게시물을 참고로했기 때문에 먼저 그쪽을 확인하면 원활할 수 있습니다

  • 좋은 웹페이지 즐겨찾기