근육 트레이닝 습관화를위한 리마인드 메일을 GAS로 실현

근육 트레이닝. 습관화 할 수 있습니까?



근육 트레이닝. 하려고 생각하고 좀처럼 습관화할 수 없네요. 저도 대개 3일 보주로 좀처럼 계속되지 않았습니다. .

그런 내가 스즈키 타츠야 씨의 "PRIDE BODY"라는 프로그램을 만나,
한 달 동안 매일 근육 트레이닝이 계속됩니다. 굉장하지 않니?

자세한 것은, 스즈키 타츠야씨의 「PRIDE BODY」로 구그라고 봐 주시면 알겠습니다만,
"근육 트레이닝 메뉴를 메일로 매일 리마인드한다"
라고 하는 구조가 있어, 나에게는 그 방법이 매우 매치하고 있던 것 같습니다..

이번에는 이 메일로 리마인드하는 구조를 GoogleAppScript(GAS)로 실현해 보았으므로 비망록으로 남깁니다.

하고 싶은 일



사전에 스프레드시트에 준비한 콘텐츠를 이메일로 전달하기만 하면 됩니다.
간단한 구성도는 이쪽.
1

구현



즉시 구현 내용의 이야기입니다.

스프레드시트 예



전달할 콘텐츠의 정보를 미리 스프레드시트에 만들어 둡니다.

  • B 열: 리마인드할 날짜를 입력합니다.
  • C 열: 알림 메일의 발신자 이름을 정의합니다.
  • D 컬럼: 리마인드 메일의 목적지를 정의합니다.
  • E 열: 알림 메일의 제목을 정의합니다.
  • F 열: 알림 메일의 본문을 정의합니다. 동영상의 링크 등은 여기에 올리는 이미지.

  • 스크립트



    스크립트에 코멘트를 남기기 때문에 자세한 설명은 생략하지만,
    강하게 말하면 getContentsByDate() 에서 API 액세스를 최대한 줄이는 것을 목적으로 스프레드시트의 내용을 2차원 배열로 취득하고 있는 것은 포인트입니다.
    ※실제로 시험할 때용으로 콘솔 로그는 코멘트 아웃 해 남기고 있습니다.

    코드.gs
    function reminder() {
      // スプレッドシートを取得
      const ss = SpreadsheetApp.getActiveSpreadsheet();
      // シートを取得
      const sheet = ss.getSheetByName('リマインド内容');
    
      // 今日の文字列(yyyymmdd形式)を取得
      const today = Utilities.formatDate( new Date(), 'Asia/Tokyo', 'yyyyMMdd');
      // 今日のコンテンツを探す。
      const content = getContentsByDate(sheet, today, 2);
      // console.log(content);
    
      // コンテンツが取得できなかったら処理を終了する。
      if ( content === null ) {
        throw new Error('コンテンツが設定されていないようです。スプレッドシートに追加してください。');
      }
    
      // メール送信
      sendMail(
        content[2],  // sender
        content[3],  // email
        content[4],  // subject
        content[5]   // body
      );
    }
    
    function sendMail(sender, email, subject, body) {
      // console.log(`sender: ${sender}`);console.log(`email: ${email}`);console.log(`subject: ${subject}`);console.log(`body: ${body}`);
      // メール送信
      GmailApp.sendEmail(email, subject, body, { name : sender } );
    }
    
    function getContentsByDate(sheet, date, col) {
      // 極力APIアクセスを減らすため、スプレッドシートの中身を2次元配列に取得。
      const contents = sheet.getDataRange().getValues();
    
      // 1行ずつループして、今日日付のコンテンツが見つかったら配列ごと返却
      for (let i=1 ; i<contents.length ; i++) {  // 0はヘッダになるので、iの初期値は1としている。
        const searchDate = Utilities.formatDate( contents[i][col-1], 'Asia/Tokyo', 'yyyyMMdd');
        // console.log(searchDate);console.log(date);
        if(searchDate === date) {
          return contents[i];
        }
      }
    
      return null;
    }
    

    트리거



    마지막으로 스크립트를 매일 실행하기 위한 트리거를 정의하면 완성됩니다.
  • 스크립트 편집기의 왼쪽 메뉴에서 "트리거"를 누르십시오.
  • 오른쪽 하단의 트리거 추가 버튼을 누릅니다.
  • 트리거 설정을 첨부 이미지를 참고로 설정합니다.
    요점은 이벤트의 소스를 선택을 "시간 주도형"으로 만드는 것입니다. 이렇게 하면 지정한 시각(이번 경우는 오전 7시~8시)에 리마인드 메일을 보내 줍니다.
  • 저장 버튼을 누릅니다.

  • 2

    결론



    "최근 옛날처럼 굉장히 일할 수 없게 되어 왔구나…"라든가 "배주위에 관록이 나왔구나…
    이것을 계기로 근육 트레이닝을 습관화해, 건강한 신체를 손에 넣어 보지 않겠습니까?



    계속할 수 있었던 이유로서, 메일로의 리마인드 뿐만이 아니라, 물론 「PRIDE BODY」의 콘텐츠력도 크다고 생각합니다.

    매번 바뀌는 것도 아니기 때문에, GAS상에 직접 정의해도 좋네요.

    좋은 웹페이지 즐겨찾기