0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

走らないと電気ショックが飛んでくるアプリを作った

Posted at

はじめに:なぜ人は走らないのか

皆さん、こんにちは。

以前、AIに怠惰判定されたら電気ショックを食らうアプリを作った者です。

あのアプリを作った直後から、一つ気になっていたことがありました。

運動だけは、どうしても続かない。

「今日は走りませんでした」と報告すれば電気ショックが来るんですが、報告しなければ来ない。そう、自己申告制の穴です。人間、サボろうと思えばいくらでもサボれる。

そこで今回は、サボりようがないシステムを作りました。

作ったもの:ランニングゲーム

完全自動監視ランニングゲーム

完全自動監視ランニングゲーム

↑こちら。Stravaのユーザー数制限でまだログインできないんですがね

完全自動監視ランニングゲームは、Stravaと連携してランニングを自動追跡し、目標未達成だと電気ショックが飛んでくるWebアプリです。

UIはイカゲーム風にしました。ゲームに負けたら死ぬ(電気ショックが来る)という緊張感を出したかったからです。あと単純にノリ。

画面イメージ

画面イメージ

ハングルで「러닝 게임(ランニングゲーム)」と書いてあります。私は読めません。

電気ショックが来るタイミング

電気ショック判定は、ランニング終了時のWebhookと毎日0時のバッチの2箇所

電気ショック判定は、ランニング終了時のWebhookと毎日0時のバッチの2箇所

このアプリ、2段階の電気ショックがあります。

  1. リアルタイム

ランニングを終えてStravaにアップロードすると、Webhook経由で即座に判定が走ります。

例えばユーザーの目標設定が下記だったと仮定します。

  • 目標距離:5km
  • 目標ペース:5:00/km

この条件を1つでも満たしていないと、その場で電気ショック。

4.9km走っても、ダメです。100m足りない。電気ショック。
5:01/kmでも、ダメです。1秒遅い。電気ショック。

容赦がありません。

  1. 深夜0時の最終審判

毎日深夜0時、VercelのCronを使って、その日のランニング記録をチェックします。

その日1回もOK判定のランニングがない場合、電気ショック。

つまり、こういうことです↓

深夜0時の最終審判

無事に生き残るには一発クリアするしかない。オワタ式。

何度失敗しても挑戦し続ければ、深夜の電気は免除されます。

逆に言えば、走らなければ確実に1発は来るということです。

技術構成:自動追跡のアーキテクチャ

技術構成

電気ショック関連に特化した図解

使用技術

  • Next.js 16 (App Router + Server Actions)
  • NextAuth.js v5 (Strava OAuth認証)
  • Prisma + Neon (PostgreSQLデータベース)
  • Strava Webhook (新規アクティビティの自動通知)
  • Strava API (過去のアクティビティ同期)
  • Pavlok API (電気ショック)
  • Nano Banana Pro API (プレイヤー画像生成)
  • Vercel Cron (深夜の定期実行)

ポイントはStrava Webhookです。

StravaにはAPIとWebhookがあります。
APIは「こちらから情報を取りに行く」もの。
Webhookは「向こうから通知が来る」もの。

Webhookを使うことで、アクティビティが記録された瞬間に通知を受け取れます。ポーリングで定期的にAPIを叩く必要がありません。

自己申告の穴を塞ぐ

自己申告の穴を塞ぐ

人は監視されないと本領発揮できない生き物です。特に私。

前作のAIスパークでは、自分で行動を報告する必要がありました。
つまり、報告しなければ逃げられた。嘘を言っても逃げられた。

今回は違います。
Stravaが勝手に記録して、Webhookが勝手に飛んできて、勝手に判定されて、勝手に電気ショックが来ます。
私がやることは、ただ走る(か走らないか)だけ。
GPSは嘘をつけません。距離もペースも、衛星が見ています。

ちなみに、過去のアクティビティもStrava同期ボタンで一括取得できます。これまでの走行履歴を確認したいときに便利です。

プレイヤー画像生成

プロフィール画面で顔写真をアップロードまたはカメラで撮影すると、AIがイカゲーム風の参加者画像を生成してくれます。

プレイヤー画像生成

GeminiのNano Banana Proで生成

自分だけの参加者画像が手に入るので、気分が盛り上がります。

電気ショックレベルの設定

目標設定画面で、電気ショックの強さを1〜100で設定できます。

AIスパークユーザーの悪ふざけにより、先日95の電気ショックを初めて浴びましたが、相手に殺意が湧くレベルの痛みでした。

どんなコーチングのアドバイスよりも、痛みが最高の行動促進になります。

Pavlokの接続問題

実は一つ、技術的な課題があります。
Pavlokのスマホ接続が、頻繁に切れる。

Bluetoothの仕様上、スマホとPavlokが離れると接続が切れてしまいます。近くにいても一定時間使用が無い場合、自動で接続が切れるようです。
そして、接続が切れているとAPI経由のZapが届かない。
つまり、せっかくNGを出しても、電気が来ないことがある。
サボりではなく、技術的な問題で逃げられてしまう。

これを防ぐためには、スマホのバッテリー最適化からPavlokアプリを除外する必要があるようです。
詳しくは Pavlok公式ヘルプ を参照してください。

これからの運用

実は、まだ本格運用は始めていません。
現在、北海道に滞在中でして、豪雪で外を走れない。
もし走ろうものなら、電気ショックを浴びる前に雪に埋もれて死んでしまいそうです。
なので、東京に戻る2月から本格的に使い始める予定です。

ただ、システムは完成しているので、走ったら即座に判定されるし、走らなかったら0時に電気が来るという緊張感はすでにあります。
中途半端に走ると即座に電気が来るので、「とりあえず走った」では済まない。
ちゃんと目標を達成するまで走ることになるでしょう。
...たぶん。

今後の展望

  • 複数ユーザー対応: 現在Stravaに本番申請中。1週間ほどで審査が通る予定
  • ランキング機能: 複数人で競い合えたら面白そう
  • 脱落演出: イカゲームよろしく、目標未達成が続いたら「脱落」演出を入れたい

あなたも参加できます

このアプリ、もうすぐ誰でも使えるようになります。

完全自動監視ランニングゲーム

↑こちら。Stravaのユーザー数制限でまだログインできないんですがね

現在、Stravaの本番審査中です。審査が通り次第(1週間ほど)、Stravaアカウントでログインするだけで、すぐに始められます。
ただし、Pavlokを持っていないと電気は来ません。Pavlokは送料込みで5万円弱です。
「5万円払って電気ショックを買う」という狂気の沙汰ですが、運動習慣が身につくなら安いものです。
ジムの年会費より安い。しかもサボったら電気が来るので、ジムより確実に続きます。

クーポン

下記リンクからPavlok各種が20%オフで購入できるので、興味ある方は使ってみてください。
僕はPavlok3 Proを購入しました。

Get 20% off using my discount code

おわりに

「運動を習慣にしたい」と思ったとき、多くの人はモチベーションに頼ろうとします。
でもモチベーションなんて、雨が降っただけで消え去ります。
だったら、物理的な痛みに頼ればいいんです。

走らなければ電気が来る。シンプルです。
人類の本能を、現代テクノロジーでハックする。
これがランニングゲームです。
クリアしたければ、走れ。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?