Webhook で体重を晒す

この記事は Customine Advent Calendar 2023の4日目の記事です。

晒すとうまくいく

YouTube 動画で金春もお話しているように、自分の活動を他の人に晒して見てもらうことはモチベーションの維持に繋がります。

私自身、1年間毎日社内に体重を晒すことがダイエットを続けるモチベーションの1つになっています。

築山 Ver.2020 Summer
築山 Ver.2023 Autumn

アールスリーの社内 Slack(チャットツール)には「bodymake」というチャンネルがあり、ランニングの記録、登山の記録、ジムに行った結果などが自動・手動で報告されています。

金春のランニング記録
築山の自転車記録

ダイエットのメインは「結果にコミット」するパーソナルトレーニングジムなのですが、ダイエットを始めたときに「よし、体重をみんなに見てもらおう!」と思い、体重を測った結果を Slack に通知できないものか?と考えました。

システム構成の検討

では、具体的な手段を考えてみます。

今回のようにシステム間(今回だと体重計とSlack)の連携を考える時には、データの入口と出口でどんなインタフェース(やり取りするための口)があるかを調べ、それらを繋ぐ方法を考える必要があります。

データの入り口と出口

■入口:体重計
私が使っている体重計は withings という Wi-fi 経由でデータを飛ばすことにできるもので、調べてみたら APIもあるようです。

■出口:Slack
最終的な通知先は Slack で決まっています。そして、Slack はエンジニアに好まれることからわかるように、APIがしっかりと用意されています。

繋ぐ方法

Withings にも Slack にも API があるので連携することは技術的には可能です。しかし、私はプログラムは書けません!(キリッ)

そこで、更に調べてみると IFTTTというサービスを使うことで Withings で体重を測定した結果を他のサービスに連携することができるようです。ただし、IFTTT には Slack に通知する機能がありませんでした。

一方、カスタマインで Slack への通知機能があるので kintone にさえデータが入ってくればなんとかなるのですが、IFTTT では kintone への連携もできません。

詰みました!
このままでは 私の体重計と Slack を連携することはできません。

そこで、IFTTT で連携可能なサービスと kintone の間を連携することを考えます。

調べてみると、IFTTT の連携先として Google Sheets(スプレッドシート)がありました。そして、IFTTT では kintone への連携はできないのですが、Zapier を使うと Google Sheets と kintone の連携ができそうです。

システム構成

つまりはこういうことになりました。

設定内容

Withings

買います。

単4電池x4本もお忘れなく!

Google Sheets

空のスプレッドシートを1つ用意するだけです。
特にデータを登録する必要がありません。このあとで質問する IFTTT によって自動的に体重と体脂肪重が以下のように記録されます。

kintone

kintone は IFTTT によって転記された体重を書くだけで良いのですが、それだけでは面白くないのでいくつかフィールドを追加をしました。

1.前日比
IFTTT を経由して Withings から飛んでくるのはその時の体重ですが、kintone には過去のデータが蓄積されているのでそれと見比べて前日比を登録したいです。

2.7日間平均
ダイエットであまりやらないほうが良いことの1つとして、「毎日の推移に一喜一憂」です。我々会社員は飲み会もあったり、運動をした前後で体重が大きく変わります。そのため、前日比だけで一喜一憂しているとモチベーションが続かないので、少し長めのスパンで傾向を見るほうが良いと言われています。
そこで、前日比だけではなく、7日間の平均を出せるようにしました。

3.1言コメント
ただ体重だけが Slack に通知されても味気ないので、前日との増減有無によって3種類のコメントが登録されるようにしました。

IFTTT

Withings での体重測定をきっかけに Google Sheets に登録します。設定はとても簡単です。

Zapier

Google Sheets に登録された内容を kintone に転記します。

カスタマイン

この kintone に登録された情報を Slack に登録するのがカスタマインです。前フリが長すぎて皆さんお忘れかもしれませんが、これはカスタマイン アドベントカレンダーの記事なのです。

Zapier が kintone に登録したらWebhook を発火させ、その Webhook を受け取ったカスタマインが Slack に通知する仕組みを作ります。では、カスタマイズ設定を見ながら、何をやっているか簡単に解説していきます。

最初の2アクションは Webhook 連携のときのお作法のようなものです。今回の利用方法では起こり得ないのですが、誤発火による無限ループを避けるために追加条件として「Webhookの発生がレコードの追加によるならば」を入れています。

これは入れなくてもいいのですが、曜日によって体重の傾向が変わる可能性があるため、あとで分析しやすいように一応入れておきました。

今日以前の7件のレコードを取得し、体重、体脂肪率の7日間平均を計算しています。

平均の計算結果や曜日を元のレコードに反映します。この設定は、前日比で太ったとき、痩せたとき、同じだったときで一言コメントを替えたいので、追加条件を替えて3パターン作成します。

残りは Slack の通知のための設定です。体重の増減によってコメントを替える部分は IF 関数を使えば 1 アクションで実現できると思います。ただ、カスタマインらしさを考えるとできるだけ IF 関数は使いたくなかったので、一旦「値が変更されているレコードを保存する」で保存し、その保存したレコードに入っているコメントを取得して送る方法にしました。

こうするとアクション数は 3 つになりますが関数は使用しないため、カスタマイズがわかりやすくなります。僕がダイエットをやめて体重管理を後任の人に任せることになっても安心して引き継げますね!

では、体重計に乗ってみよう!

ちゃんと Slack に測定結果が通知されまたね!

皆さんも体重通知カスタマイズのお世話になる必要が無いよう、年末年始健康にお過ごしください!

投稿者プロフィール

アバター画像
築山 春木
gusuku シリーズのエンドユーザー様への提案・パートナー様への支援をメインに活動しています