


目的

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



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



作れるよ



作る!!!
概要



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



できるよ



すげー!
完成したもの



実際に完成した仕組みがこちらです!
①スマートウォッチが鳴る(Huaway BAND 8)





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





今のパフォーマンスはまぁまぁ良好。
3をタップ!
③スプレッドシートに自動的にデータが記録される


※日付と点数が自動的に記録されていきます。
④データがたまると、パフォーマンスの良い時間帯を把握できる





全体的に朝の方がパフォーマンスが高いみたいだ。
大事なことは朝作業したほうがよさそうだな・・・
という感じです!
今回はChat GPTくんに大活躍してもらいました。感謝です。



よろしくね



まかせとけ
手順
実際に作った手順を紹介します。
LINE公式アカウントを作る
https://www.lycbiz.com/jp/signup/
→ここからLINE公式アカウントのアカウントを作成。


※自分のLINEに勝手にアカウントが追加されました。(このアカウントは使わない)
https://developers.line.biz/ja/services/messaging-api/
→続いてここからBot用のアカウントを登録。
QRでBotを友達に追加しました。


メッセージ自動送信のGASを用意する
上記記事のコードを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時間ごとに定期送信する」
って設定にできない?



できるよ



やったー
以下、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時代の間であればメッセージを送信する」っていう内容っぽいですね。



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



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


(あとで直しました)


これでOK!
1時間ごとに決まった文章を送信してくれるBOTが完成しました。
スプレッドシートに返信を自動記録できるようにする
次に、スプレッドシートに返信された値を自動で記録されるようにします。



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



わかるよ



やったー
回答は以下の通り。
はい、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に設定します。



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



やってみる







あれ、公開ボタンがない・・・
と思ったら、デプロイの中で公開設定を行うようです。
新しいデプロイ>ウェブアプリを選択して、
・次のユーザーとして実行:自分
・アクセスできるユーザー:全員
で設定。






WebhookをONにします。
※ChatGPTはコールバックURLと言ってましたけど、今(2023.10.15)の表記はWebhook URLになってますね。
動作テスト
さてさて、これで動作するらしいです。
試してみます!







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



おめでとう!!! よかったね!!!
データ閲覧用スプレッドシートの設定



グラフで見えるようにします
今回測定したい、以下のデータが確認できるスプレッドシートを作ります。
データ閲覧用スプレッドシートを別途新規作成し、A1に以下の関数を入力します。
=IMPORTRANGE("連動用シートURL", "シート1!A:B")


→閲覧用のシートに自動反映されるようになります。
(連動しているシートを直接編集したくなかったため設定)
日付の分解
次に、日付時刻を分解します。やり方を知らないのでChat GPTくんに聞きます。



スプレッドシートのA2に 2023/10/15 18:09:33 という文字列がある。
ここから、
・日付だけ(yyyy/mm/dd)
・時間だけ(hh)
これを取得する方法ってある?



あるよ



ありがとー
・日付だけ:=IF(A2="", "", TEXT(A2, "yyyy/mm/dd"))
・時間だけ:=IF(A2="", "", HOUR(A2))
上記関数で作れます。
(日付列が空欄の時に変な値が返されるので、IF文で日付が空欄なら空欄を返すようにしました)
日付ごとの平均出し(view(days)
次に、日付ごとの平均出しをしていきます。


新しくシートを作って、今日以降の日付を並べておきます。
そして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は神ですね。



神です
自分のやりたいことを伝えれば、(実現可能であれば)やり方を答えてくれるので、このツールを使いこなせるだけでいろいろなことが便利になりそうです。
とりあえず1カ月くらい測定し続けて、自分の傾向(いつごろ集中できてるとか)をチェックしてみます!
(蛇足)作った理由
ある投資家がおすすめしていた書籍・東大家庭教師が教える 頭が良くなる思考法を読んだ。
自分にとって大事な課題をまず一つ設定し、それを解決すると人生はよりよくなるらしい。
課題を考えた結果、「起きている間、高いパフォーマンスを維持したい」となった。
同書では、課題を解決する行動をするなら、その行動が有効だったかどうかを測定しなければならないとあった。
そして人間は自己正当化が激しいので、後から思い出して判断するのもNG,必ず記録が必要ということ。
「自分のパフォーマンスを定常的に記録するなんてどうすりゃええねん」
と思っていたところ、「定期的にブザーが鳴り、その時の気分を採点する」心理実験があった気がする。
(詳細は忘れた、多分なにかの本で読んだんだと思う)
定期的にブザーが鳴るなら忘れないだろう。
そしてちょうどスマートウォッチを持っている。
「このスマートウォッチで作れたら最高じゃん」
と思い、いろいろ調べて作ってみた。
参考記事
https://tonari-it.com/gas-line-message-api-overview/
→LINE Developersのアカウント・BOT作成方法や、
規定のメッセージを提示送信する方法についての記事。
https://auto-worker.com/blog/?p=6383#
→トリガーの設定方法
コメント