【GAS/LINE BOT】スマートウォッチで体調記録ツールを作る

※10/25補足
・無料のLINE公式アカウントで送信できるメッセージAPI:月間200回まで
・この記事のやり方で必要な月間API数:450
=無料だとAPI数が足りない!

目次

目的

あくざわ

日中のパフォーマンスを向上させたい!

【目的】
日中のパフォーマンスを向上させるために、今後いろいろテストしていく予定。(散歩とか)
向上したか判断するには、自分のパフォーマンスの記録が見えないと判断できない。
記録漏れがなく、手間もかからない、楽に記録できる仕組みが欲しい。

あくざわ

例えば、スマートウォッチで記録する仕組みが作れたらいいのになあ

インターネットくん

作れるよ

あくざわ

作る!!!

概要

あくざわ

こういう風にしたいんだけどできる?

【やりたいこと】
・日中、1時間ごとにスマートウォッチにLINE経由で通知が来る。
・スマートウォッチで1,2,3,4の値を返信すると、スプレッドシートに日付・時刻・値が記録される。
・スプレッドシートで表やグラフを確認し、過去のパフォーマンスを確認できる。
 確認したいのは、
  ・日ごとの平均→日付を並べてグラフにして、パフォーマンスの波を測定する。
  ・時間帯の平均→自分は何時ごろパフォーマンスが高いのか(朝方or夜型なのか?)を測定する。

インターネットくん

できるよ

あくざわ

すげー!

完成したもの

あくざわ

実際に完成した仕組みがこちらです!

①スマートウォッチが鳴る(Huaway BAND 8)

あくざわ

お、スマートウォッチが鳴ったぞ。
一時間ごとの体調記録だな。

②記録する

あくざわ

今のパフォーマンスはまぁまぁ良好。
3をタップ!

③スプレッドシートに自動的にデータが記録される

※日付と点数が自動的に記録されていきます。

④データがたまると、パフォーマンスの良い時間帯を把握できる

※適当に入力した仮データです!
あくざわ

全体的に朝の方がパフォーマンスが高いみたいだ。
大事なことは朝作業したほうがよさそうだな・・・

という感じです!
今回はChat GPTくんに大活躍してもらいました。感謝です。

あくざわ

よろしくね

Chat GPTくん

まかせとけ

手順

実際に作った手順を紹介します。

LINE公式アカウントを作る

https://www.lycbiz.com/jp/signup/
→ここからLINE公式アカウントのアカウントを作成。

※自分のLINEに勝手にアカウントが追加されました。(このアカウントは使わない)

https://developers.line.biz/ja/services/messaging-api/
→続いてここからBot用のアカウントを登録。
QRでBotを友達に追加しました。

メッセージ自動送信のGASを用意する

参考記事→https://tonari-it.com/gas-line-bot-friend-token/
この記事の執筆者タカハシさんに感謝します。(知識ゼロからBOTを動かせました!)

上記記事のコードをGASにコピーし、コードに、
 ・自分のLINEアカウントのユーザーID
 ・公式アカウントのアクセストークン
これを張り付けて保存・実行します。

すると・・・?

「Hello,world!」が自分のLINEアカウントに送信されてきました。すごい!

1時間ごとに定期送信してくれるようにする

続いて、1hごとに定期送信してくれるよう、コードをカスタマイズしていきます。

Chat GPTにコードを作ってもらう

先ほどのタカハシさんのコードをもとに、毎日08:00~22:00の間、1時間おきに同じメッセージを送信・通知してくれるようにします。
私はプログラムは全くわからないので、Chat GPTくんに聞きました。

あくざわ

これ、LINE公式アカウントのメッセージAPI向けのGASのコードなんだけど、
「毎日08:00~22:00の間、1時間ごとに定期送信する」
って設定にできない?

Chat GPTくん

できるよ

あくざわ

やったー

以下、ChatGPTに編集してもらったコードです。

function sendScheduledMessage() {
  const now = new Date();
  const hour = now.getHours();
  
  // 毎日08:00から22:00の間で、1時間ごとに実行
  if (hour >= 8 && hour <= 22) {
    const url = 'https://api.line.me/v2/bot/message/push';
    const token = '+++++++++'; // チャネルアクセストークンを設定する

    const payload = {
      to: '+++++++++++', // ユーザーIDを設定する
      messages: [
        { type: 'text', text: 'チェック:体調記録' }
      ]
    };

    const params = {
      method: 'post',
      contentType: 'application/json',
      headers: {
        Authorization: 'Bearer ' + token
      },
      payload: JSON.stringify(payload)
    };

    UrlFetchApp.fetch(url, params);
  }
}

内容を確認したところ、8時から22時に実行されるコードではないです。
「コードが実行されたとき8時代から22時代の間であればメッセージを送信する」っていう内容っぽいですね。

Chat GPTくん

1時間ごとに送信するように、GASトリガー設定もやってね

あくざわ

やってみる

トリガー設定

GASのトリガー設定で、1時間ごとに実行してもらうよう指定します。

ためしに1分おきトリガーにセットしてみました。
(あとで直しました)
鬼LINEしてくるBOTになった・・・

これでOK!
1時間ごとに決まった文章を送信してくれるBOTが完成しました。

スプレッドシートに返信を自動記録できるようにする

次に、スプレッドシートに返信された値を自動で記録されるようにします。

あくざわ

公式アカウントに返信された文字列を、日付時刻とセットでスプレッドシートに記録したいんだけど、やり方わかる?

Chat GPTくん

わかるよ

あくざわ

やったー

回答は以下の通り。

はい、Google Apps Script (GAS) を使用して、LINE Messaging APIから受信したメッセージをGoogleスプレッドシートに記録することができます。

以下に基本的な手順を示します:

1:Google Apps Scriptのセットアップ: Google Driveで新しいGoogleスプレッドシートを作成します。そのスプレッドシートに対してGoogle Apps Scriptを開き、スクリプトを追加します。
2:LINEからのWebhookを受信: Google Apps ScriptにはWebアプリケーションとして公開する機能があり、これを使用してLINEからのWebhookを受信します。
3:メッセージをスプレッドシートに記録: GASで受信したメッセージの内容とタイムスタンプをスプレッドシートに記録します。

function doPost(e) {
  var data = JSON.parse(e.postData.contents);
  
  if (data.events && data.events.length > 0) {
    var event = data.events[0];
    
    if (event.type === 'message') {
      var timestamp = new Date();
      var message = event.message.text;
      
      var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
      sheet.appendRow([timestamp, message]);
    }
  }
  
  return ContentService.createTextOutput('Message Received');
}

このスクリプトは、メッセージが受信されたときに呼び出される関数です。次のステップでWebアプリケーションとして公開します。

1:Google Apps Scriptエディタで、[公開] > [ウェブアプリケーションとして公開]を選択します。
2:ウェブアプリケーションとして公開の設定を行います。
 ・プロジェクトバージョン: 新しいバージョンを作成
 ・アクセス: すべてのGoogleアカウントのユーザー(アノニマスユーザーを含む)
 ・リンクを知っている全員(無制限):チェック
3:公開ボタンをクリックし、ウェブアプリケーションのURLを取得します。
4:LINE公式アカウントのメッセージAPIのコールバックURLを、先ほど取得したウェブアプリケーションのURLに設定します。

Chat GPTくん

ってことなので、やってみて

あくざわ

やってみる

スプレッドシートを作って、
コードをコピペして、
あくざわ

あれ、公開ボタンがない・・・

と思ったら、デプロイの中で公開設定を行うようです。
新しいデプロイ>ウェブアプリを選択して、

 ・次のユーザーとして実行:自分
 ・アクセスできるユーザー:全員
で設定。

ウェブアプリのURLをコピーして、
WebhookURLに貼り付け。
WebhookをONにします。

※ChatGPTはコールバックURLと言ってましたけど、今(2023.10.15)の表記はWebhook URLになってますね。

動作テスト

さてさて、これで動作するらしいです。
試してみます!

LINEで返信すると・・・
記録されました!!!
あくざわ

できた!!! ありがとう!!!

Chat GPTくん

おめでとう!!! よかったね!!!

データ閲覧用スプレッドシートの設定

あくざわ

グラフで見えるようにします

今回測定したい、以下のデータが確認できるスプレッドシートを作ります。

【確認したいこと】
・日ごとのパフォーマンス(10/15、10/16・・・の値の平均値)
・時間帯ごとのパフォーマンス(18時代・19時代・・・の値の平均値)

データ閲覧用スプレッドシートを別途新規作成し、A1に以下の関数を入力します。

=IMPORTRANGE("連動用シートURL", "シート1!A:B")

→閲覧用のシートに自動反映されるようになります。
(連動しているシートを直接編集したくなかったため設定)

日付の分解

次に、日付時刻を分解します。やり方を知らないのでChat GPTくんに聞きます。

あくざわ

スプレッドシートのA2に 2023/10/15 18:09:33 という文字列がある。
ここから、

・日付だけ(yyyy/mm/dd)
・時間だけ(hh)

これを取得する方法ってある?

Chat GPTくん

あるよ

あくざわ

ありがとー

・日付だけ:=IF(A2="", "", TEXT(A2, "yyyy/mm/dd"))
・時間だけ:=IF(A2="", "", HOUR(A2))

上記関数で作れます。
(日付列が空欄の時に変な値が返されるので、IF文で日付が空欄なら空欄を返すようにしました)

日付ごとの平均出し(view(days)

次に、日付ごとの平均出しをしていきます。

新しくシートを作って、今日以降の日付を並べておきます。
そしてChat GPTにやり方を聞きます。

あくざわ

これできる?(表現が難しい)

【前提】
・viewシートのA列に日付が入力されている
・dataシートのC列にも日付が入力されていて、dataシートのB列には値が入力されている。

【やりたいこと】
・viewシートのAxと一致するdataシートのC列と同じ行のB列の値の平均を出力したい

Chat GPTくん

できるよ

=AVERAGEIF(data!C:C, A2, data!B:B)

な、なるほど!
このままコピーするとエラーが出るので、

=IFERROR(AVERAGEIF(data!C:C, A53, data!B:B), "")

エラーが出た場合は空欄を返すようにしました。

これで日付ごとの平均点出しができるようになりました!

時間ごとの平均出し(view hours)

同様に、時間ごとの平均も出します。

時間はdataシートのD列にメモしたので、先ほどの関数のdata!C:Cをdata!D:Dに変えるだけですね。

=IFERROR(AVERAGEIF(data!D:D, A2, data!B:B), "")

できました!
あとはデータがたまり次第、適当にグラフを作れば調子の波が観測できるようになりますね。

その他、子細な設定

コードが絡まない、ちょっとした設定を行います。

自動返信をOFFにする

初期設定だと、「返信できないよー」という自動応答をしてしまうため、OFFします。

LINE公式アカウント>設定>応答設定>応答メッセージをOFF

→自動返信を消せました。

スマートウォッチで1,2,3,4をタップ入力できるようにする

HUAWAY SMART BANDのショートカット返信から、1,2,3,4をタップで入力できるようにします。

これで準備OK! 運用できるようになります(運用方法へ)

感想

あくざわ

つ、作れたー!!!

インターネットくん

よかったね!!!

ということで、手軽に自分のパフォーマンスを記録できるツールが完成しました! 頑張った!
感想ですが、Chat GPTは神ですね。

Chat GPTくん

神です

自分のやりたいことを伝えれば、(実現可能であれば)やり方を答えてくれるので、このツールを使いこなせるだけでいろいろなことが便利になりそうです。

とりあえず1カ月くらい測定し続けて、自分の傾向(いつごろ集中できてるとか)をチェックしてみます!

(蛇足)作った理由

ある投資家がおすすめしていた書籍・東大家庭教師が教える 頭が良くなる思考法を読んだ。
自分にとって大事な課題をまず一つ設定し、それを解決すると人生はよりよくなるらしい。
課題を考えた結果、「起きている間、高いパフォーマンスを維持したい」となった。

同書では、課題を解決する行動をするなら、その行動が有効だったかどうかを測定しなければならないとあった。
そして人間は自己正当化が激しいので、後から思い出して判断するのもNG,必ず記録が必要ということ。

「自分のパフォーマンスを定常的に記録するなんてどうすりゃええねん」
と思っていたところ、「定期的にブザーが鳴り、その時の気分を採点する」心理実験があった気がする。
(詳細は忘れた、多分なにかの本で読んだんだと思う)

定期的にブザーが鳴るなら忘れないだろう。
そしてちょうどスマートウォッチを持っている。
「このスマートウォッチで作れたら最高じゃん」
と思い、いろいろ調べて作ってみた。

参考記事

https://tonari-it.com/gas-line-message-api-overview/
→LINE Developersのアカウント・BOT作成方法や、
 規定のメッセージを提示送信する方法についての記事。

https://auto-worker.com/blog/?p=6383#
→トリガーの設定方法

この記事を書いた人

阿久澤です。

コメント

コメントする

CAPTCHA


目次