실무 경험 4개월의 인턴생이 GAS를 이용해 근무 보고를 자동화해 보았다

처음에



탐색해 주셔서 감사합니다!
현재부터 구리 주식회사에서 iOS 엔지니어로서 인턴하고 있습니다.
이번 근무 보고를 자동화해 보았으므로, 그쪽을 기사로 하고 싶습니다 😁

배경



인턴생(아르바이트)은 달에 1회 근무 보고를 Slack로 하지 않으면 안됩니다만,
언제나 손 입력으로 보고하고 있어 이것이 끔찍한 고차 귀찮아, ,,
「월 1의 작업 정도 열심히 해 😡」라고 하는 야지가 날 수 있을 것 같습니다만,
어쨌든 엔지니어이기 때문에 즐기고 싶은 성분입니다 😢

원래 GAS란? ?



Google Apps Script(GAS)는 Google에서 제공하는 서버측 스크립팅 환경입니다.
스프레드 시트 및 Google 양식과 같은 서비스,
자바스크립트를 기반으로 하는 프로그램 언어를 사용하여 조작할 수 있습니다.

구현 정책





인턴생은 위 사진과 같이 출근일시를 Google 캘린더에 기입해야 하므로,
이러한 이벤트 정보를 추출하여 출근 시간을 계산하고 싶습니다.

1. 캘린더에서 출근 이벤트를 추출


const myCalendar = CalendarApp.getCalendarById('自分のカレンダーID');
const attendanceDays = myCalendar.getEvents(getFirstDate(new Date()), getLastDate(new Date()), {search: "出勤"});
//月の初めを取得
function getFirstDate (date) {
  return new Date(date.getFullYear(), date.getMonth(), 1);
}

//月の最後を取得
function getLastDate (date) {
  return new Date(date.getFullYear(), date.getMonth() + 1, 0);
}
getCalendarById 메소드를 사용하여 내 Google 캘린더를 가져온 후,getEvents 메서드를 사용하여 출근 이벤트 만 추출합니다.

2. 근무 시간 계산


for(var i = 0; i < attendanceDays.length; i++) {
   var attendanceTime = attendanceDays[i].getStartTime()
   var leavingTime = attendanceDays[i].getEndTime()
   var actualWorkingHours = getActualWorkingHours(leavingTime.getHours(), attendanceTime.getHours())
}
//実働時間を取得
function getActualWorkingHours(leavingTime, attendanceTime) {
  actualWorkingHours = leavingTime - attendanceTime
  if (actualWorkingHours == 9) {
    return actualWorkingHours - 1
  } else {
    return actualWorkingHours
  }
}

//休憩時間を取得
function getBreakTime(workingHours) {
  if (workingHours == 9) {
    return 1
  } else {
    return 0
  }
}

취득한 각 이벤트의 종료 시각 getEndTime() 와 개시 시각 getStartTime() 를 취득해,
그 차이를 계산합니다.
또, 풀 근무시(10:00~19:00)는 1시간 휴식을 취할 필요가 있으며,
실업 시간을 정확하게 계산하기 때문에, 차분으로부터 1시간 뺍니다.

3.Slack에 게시


function postMessage() {

  var url = "https://slack.com/api/chat.postMessage";

  var payload = {
    "token" : "アクセストークン",
    "channel" : "投稿したいチャンネルのID",
    "text" : "<@メンションしたい相手のID>投稿するメッセージ,
    "as_user" : true
  };

  var params = {
    "method" : "post",
    "payload" : payload
  };

  UrlFetchApp.fetch(url, params);
}

SlackAPI의 chat.postMessage에 관해서는 이쪽 기사를 알기 쉽습니다.

4. Google Apps Script에 트리거 추가



마지막으로 달 초에 자동으로 실행되도록 Google Apps Script에 트리거를 추가합니다.

프로젝트의 트리거 버튼에서 트리거를 설정합니다.

트리거 목록 화면 오른쪽 하단의 트리거 추가 버튼을 선택합니다.


이벤트의 소스를 선택으로 정기적으로 실행하고 싶은 시간을 적절히 설정합니다.
이번은 달 초에 실행해 주었으면 하므로, 아래와 같이 설정했습니다.



이제 달 초에 자동으로 실행됩니다!

아티팩트




이제 매월 근무 보고서를 수동으로 입력하지 않아도
자동으로 근무 보고를 할 수 있게 되었습니다! (보내는 것을 잊지 않을 것)

요약



평소 Swift를 쓰고 있고, 이번에 처음으로 JavaScript(GAS)를 건드렸습니다만,
어떻게든 형태로 할 수 있어 일단 안심하고 있습니다 웃음
아직 교통비의 기입이나 15분 단위로의 계산에 대응할 수 없기 때문에,
그 주변을 개선해 나가고 싶습니다.
또 코드를 쓰고 있는데도 자동화하고 싶어~🤔
여러 가지가 나왔기 때문에 직원이 더 중요한 업무에 시간을 할애하도록
쓸데없는 작업은 인턴생으로 자동화해 나가면 좋겠습니다!
(사원씨는 바쁘고 좀처럼 손이 돌지 않기 때문에,,,)

마지막으로



내가 인턴을 하고 있다 카라 쿠리 주식회사 그럼 현재 엔지니어를 모집하고 있다고 합니다!
(인턴, 신졸, 중도 불문)
관심이 있으시면 꼭 한번 놀러와주세요~! !
Wantedly

좋은 웹페이지 즐겨찾기