2분 주기로 Google Apps Script 실행하기

![main000.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/144058/6aa1eb1b-770b-8924-aabc-85969a0d349d.png)

## TL;DR
> [GAS](https://developers.google.com/apps-script)의 GUI 설정으로 2분 주기의 트리거 설정은 불가능합니다. :no_good_tone1: 
> 하지만 아래 예제를 활용하면 일반적인 [크론(Cron)](https://ko.wikipedia.org/wiki/Cron) 설정을 할 수 있습니다.

※ 원래(GUI 설정에서) 분 단위 타이머는 1, 5, 10, 15, 30분 중 택일만 가능합니다.
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/144058/99c2b2d0-baa1-87cb-3e61-f5b674c11530.png)

## How To
### 구글 스프레드 시트
도구 > 스크립트 편집기
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/144058/51971f22-7572-8fb9-38ee-06df33eba060.png)

### Apps Script
제목 변경 : 2분마다 슬랙에 메시지 보내기
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/144058/c79c7e0b-9893-6c70-5125-76917a92d76b.png)

프로젝트 설정 > 편집기에 'appsscript.json' 매니페스트 파일 표시 체크
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/144058/6af7c253-3773-8c42-d762-c63a2480ec63.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/144058/9dc1b234-1012-4b58-dbb7-803c9e133a84.png)

편집기 > appsscript.json 의  `timeZone` 과 `runtimeVersion` 수정
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/144058/1652dabf-b8ff-145b-7b2e-59f6c0f527f5.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/144058/a328e27d-917c-5cae-b7e4-45fba55fc461.png)


```javascript:appsscript.json
{
  "timeZone": "Asia/Seoul",
  "dependencies": {
  },
  "exceptionLogging": "STACKDRIVER",
  "runtimeVersion": "DEPRECATED_ES5"
}
```
※ `runtimeVersion`은 `V8` 버전에 버그가 있어 하위 버전을 사용합니다. 
https://issuetracker.google.com/issues/150756612 

편집기 > Code.gs 작성 > Trigger > 실행 > 승인 필요 > 권한 검토 > Allow
※ 아래 코드의 `slack_webhook_url`은 사전에 필요합니다. 
https://api.slack.com/messaging/webhooks

```javascript:Code.gs 
function Trigger(){  
  // 예약 시간 설정
  var setTime = new Date();  
  setTime.setDate(setTime.getDate());
  setTime.setHours(setTime.getHours());    
  setTime.setMinutes(setTime.getMinutes() + 2); // 2분 마다
  Logger.log(setTime);
 // 기존에 등록된 트리거 모두 삭제
  var triggers = ScriptApp.getProjectTriggers();
  for (var i = 0; i < triggers.length; i++) {
    ScriptApp.deleteTrigger(triggers[i]);
  }
  // 트리거 등록. 실제 동작할 함수를 의미 : SendToSlack()
  ScriptApp.newTrigger('SendToSlack').timeBased().at(setTime).create();  
}

function SendToSlack() {
  // Trigger() 호출
  Trigger();  
  // 이하 send to slack 설정 
  var slack_webhook_url = 'https://hooks.slack.com/services/TFN512345/B01GBT67890/5qgJY2LjxvNAQu1234567890';  // Slack Incoming Webhook URL  
  var now = new Date();
  // GMT+9 는 한국시간  
  var kst_now = Utilities.formatDate(now, "GMT+9", "yyyy-MM-dd (E) HH:mm:ss")      
  var payload = { 'text': kst_now };
  var options = {
    'method' : 'post',
    'contentType': 'application/json',
    'payload' : JSON.stringify(payload)
  };      
  UrlFetchApp.fetch(slack_webhook_url, options);  
}
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/144058/97d3be3b-2343-dd9e-1260-bd1257457a68.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/144058/d87c9823-308c-22a0-5100-19f8a983ff85.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/144058/2aeeb690-8604-bb3a-603e-7d929a668061.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/144058/50662130-c867-d09f-ec11-18a993bb006d.png)

무시해도 됩니다.. 
`경고 > 서버와의 연결이 끊어졌습니다. 나중에 다시 시도해 보세요.`
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/144058/b49039ca-3afe-de89-6297-7526909add88.png)

트리거 > 연필 모양 > 날짜/시간 입력 확인 > 현재시간 + 2분 후 시간 등록 확인
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/144058/603eb953-b8c5-6695-4606-087fb0a05a20.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/144058/f8827fea-addd-1417-8586-eb5cc08519c8.png)

## 결과 화면
2분 마다 GAS가 동작함을 확인 할 수 있습니다. 
아쉽지만 초(sec)는 설정이 불가능합니다.
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/144058/96cf92c9-7a21-be2e-9c47-1d49b9c42cd3.png)
위 트리거를 삭제하는 방법 :  트리거 > 3점 메뉴 > 트리거 삭제
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/144058/448716c6-ca70-9599-92d7-e1dfb01dc3e7.png)

## 참고
- https://developers.google.com/apps-script/guides/triggers