はじめに:なぜ人は走らないのか
皆さん、こんにちは。
以前、AIに怠惰判定されたら電気ショックを食らうアプリを作った者です。
あのアプリを作った直後から、一つ気になっていたことがありました。
運動だけは、どうしても続かない。
「今日は走りませんでした」と報告すれば電気ショックが来るんですが、報告しなければ来ない。そう、自己申告制の穴です。人間、サボろうと思えばいくらでもサボれる。
そこで今回は、サボりようがないシステムを作りました。
作ったもの:ランニングゲーム
↑こちら。Stravaのユーザー数制限でまだログインできないんですがね
完全自動監視ランニングゲームは、Stravaと連携してランニングを自動追跡し、目標未達成だと電気ショックが飛んでくるWebアプリです。
UIはイカゲーム風にしました。ゲームに負けたら死ぬ(電気ショックが来る)という緊張感を出したかったからです。あと単純にノリ。
画面イメージ
ハングルで「러닝 게임(ランニングゲーム)」と書いてあります。私は読めません。
電気ショックが来るタイミング
電気ショック判定は、ランニング終了時のWebhookと毎日0時のバッチの2箇所
このアプリ、2段階の電気ショックがあります。
- リアルタイム
ランニングを終えてStravaにアップロードすると、Webhook経由で即座に判定が走ります。
例えばユーザーの目標設定が下記だったと仮定します。
- 目標距離:5km
- 目標ペース:5:00/km
この条件を1つでも満たしていないと、その場で電気ショック。
4.9km走っても、ダメです。100m足りない。電気ショック。
5:01/kmでも、ダメです。1秒遅い。電気ショック。
容赦がありません。
- 深夜0時の最終審判
毎日深夜0時、VercelのCronを使って、その日のランニング記録をチェックします。
その日1回もOK判定のランニングがない場合、電気ショック。
つまり、こういうことです↓
無事に生き残るには一発クリアするしかない。オワタ式。
何度失敗しても挑戦し続ければ、深夜の電気は免除されます。
逆に言えば、走らなければ確実に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
おわりに
「運動を習慣にしたい」と思ったとき、多くの人はモチベーションに頼ろうとします。
でもモチベーションなんて、雨が降っただけで消え去ります。
だったら、物理的な痛みに頼ればいいんです。
走らなければ電気が来る。シンプルです。
人類の本能を、現代テクノロジーでハックする。
これがランニングゲームです。
クリアしたければ、走れ。






