コンテンツへスキップ

筋トレアプリのUX設計 - 操作を半分に減らしたZero Friction手法

筋トレアプリのUX設計 - 操作を半分に減らしたZero Friction手法 のアイキャッチ
Contents

    ベンチプレス80kgで潰れた直後、スマホで「重量入力 → 回数入力 → 保存 → タイマー開始」という4ステップを要求されたとき、こう思いました。

    「こんなの、続くわけがない」

    既存の筋トレアプリは「正確な記録」を優先し、ユーザーに多くを求めすぎています。

    この記事では、1回のワークアウトで操作回数を半分以下に削減した「Zero Friction UX」の設計思想を解説します。

    TL;DR

    • ジムで息が上がっている時、スマホ操作は認知的負荷が高すぎる
    • 「ユーザーが考える前にアプリが答えを出している」状態 = Zero Friction を目指した
    • Smart Pre-fill では、重量入力を「前回値コピー」から「文脈を読む提案」へ進化させた
    • Intent-Based Timer では「タイマー停止ボタン」を削除し、行動から意図を推測するUIにした

    この設計思想を実装した筋トレ記録アプリ Attain を公開中。コア機能は無料で使えます。 👉 アプリを見る


    課題: ジムでのスマホ操作は「苦痛」である

    Cognitive Tunneling(認知トンネル)問題

    高強度のトレーニング中、人間の認知リソースは極端に制限されます。 心理学では「Cognitive Tunneling」と呼ばれる状態です。

    通常時: 判断・記憶・操作・計画に余裕がある

    高負荷トレーニング中: 認知リソースの大半が「呼吸・筋肉制御」に消費され、UIを操作する余裕がほぼない

    この状態で「重量を入力 → 回数を入力 → 保存ボタン → タイマー開始」という4ステップを要求するのは、ユーザーへの暴力です。

    既存アプリの問題点

    多くの筋トレアプリ・ワークアウト記録アプリは「正確な記録」を優先し、ユーザーに多くの入力を求めます。UX設計の観点から見ると、これは問題です。

    操作認知負荷問題
    重量入力「前回何kgだっけ?」と思い出す必要
    回数入力セット終了直後なら覚えている
    保存タップでも「もう1回タップ」が地味にダルい
    タイマー開始「あ、タイマー押し忘れた」問題
    タイマー停止「次セット始めたいけど、まずタイマー消さないと」

    合計5回以上のインタラクション。 これを1セットごとに繰り返す。10セットやれば50回以上の操作です。


    設計哲学: Zero Friction

    目標

    ユーザーが考える前に、アプリが答えを出している

    「設定画面は敗北」という思想のもと、以下の原則を定めました。

    1. Learn, Don't Configure - 設定画面を作る代わりに、行動から学習
    2. Silent Learning - 学習していることをユーザーに意識させない
    3. Intent over Action - 明示的な操作より、意図の推測を優先

    Smart Defaults の優先順位

    優先度データソース
    1学習値このユーザーの過去の行動
    2文脈推論直前のセットの状態から推測
    3カテゴリデフォルト胸筋なら○kg等
    4グローバルデフォルト最終フォールバック

    解決策1: Smart Pre-fill(文脈を読む重量提案)

    「前回と同じ」では不十分

    単純な「前回値コピー」は、以下のケースで破綻します。

    • 失敗セット後はどうする? 前回80kg×8回で潰れた → 次も80kg? それとも75kgに落とす?
    • ウォームアップ後はどうする? 40kg×10回のウォームアップ → 次はメイン重量に飛びたい
    • 漸進性過負荷の場面は? 先週80kg×8回できた → 今週は82.5kgに挑戦すべき?

    ルールベースの提案エンジン

    新しいセットを開始する際のロジック:

    1. 前セットがあるか確認
    2. 前セットなし → 履歴のベスト重量を提案
    3. 前セットあり → 前セットが失敗かどうか確認
    4. 失敗 → 同じ重量を維持
    5. 成功 → ウォームアップかどうか確認
    6. ウォームアップ → ベスト重量へジャンプ
    7. 通常セット → 前セットの重量を維持

    なぜ「失敗後は維持」なのか

    ユーザーは「リトライ派」と「ドロップ派」に分かれます。

    • リトライ派は同じ重量で再挑戦したい
    • ドロップ派は重量を落として確実にこなしたい

    どちらが正解かはユーザー次第。 だからデフォルトは維持し、減量オプションをUIチップで提示します。

    +-----------------------------------+
    | Suggestion: 80 kg |
    | |
    | [-5%] [-10%] |
    +-----------------------------------+

    リトライ派は0タップ、ドロップ派は1タップ。どちらも最小限の操作で済みます。


    解決策2: Intent-Based Timer(意図駆動タイマー)

    「タイマー停止ボタン」を削除した理由

    従来のタイマーUIには「停止」ボタンがあります。

    +-----------------------------------+
    | 2:30 |
    | [-10s] [Stop] [+10s] |
    +-----------------------------------+

    問題点は明確です。

    • 「停止」を押す操作が必要
    • 押し忘れるとタイマーが鳴り続ける
    • 「次のセット始めたいけど、まずタイマー消さないと」というフリクション

    Intent-Based(意図駆動)アプローチ

    「入力開始 = 休憩終了」と再定義する

    ユーザーが重量や回数の入力を始めた瞬間、それは「次のセットの準備ができた」という意図のシグナルです。

    1. ユーザーがセット完了 → タイマー自動開始
    2. 休憩中...
    3. ユーザーが入力欄をタップ → タイマー自動停止
    4. 実測値を学習

    タイマー停止ボタンは不要になりました。 ユーザーの「次やるぞ」という意図を検知して、自動で停止します。

    実際に触ってみませんか? Smart Pre-fillとIntent-Based Timerは Attain で体験できます。コア機能は無料。

    実測値から学習する

    休憩時間の学習には中央値を使います。

    過去5回の休憩時間: [90, 95, 180, 88, 92](180秒は電話が来た等の外れ値)

    • 平均は109秒 ← 外れ値に引っ張られる
    • 中央値は92秒 ← ユーザーの「普段」を反映

    UI実装: フローティングタイマー

    なぜ画面下部なのか

    +-----------------------------------+
    | Header |
    +-----------------------------------+
    | Set Input Area |
    +-----------------------------------+
    | [Add Set Button] |
    | +-------+ |
    | | 2:30 | <-- Here |
    | +-------+ |
    +-----------------------------------+
    • 視線移動が少なく、入力エリアと近い位置にある
    • 親指が届く。片手操作でタップできる
    • 入力の妨げにならないサイズなので邪魔にならない

    最終セット検出

    「3セットやる人」が3セット目を終えた時、タイマーは自動開始しません

    ロジック:

    1. セット完了時に何セット目かを確認
    2. 1-2セット目 → タイマー自動開始
    3. 3セット目 → 過去の履歴を確認
    4. 普段3セットで終わる → タイマー開始しない
    5. 普段4セット以上 → タイマー自動開始

    ユーザーの「普段」を学習し、不要なタイマーを出さない。 これもSilent Learningの一例です。


    結果: 操作回数の削減

    操作BeforeAfter
    重量入力手動入力プリフィル済み
    回数入力手動入力手動入力
    保存タップ必要タップ必要
    タイマー開始タップ必要自動
    タイマー停止タップ必要自動

    5操作 → 2-3操作 に削減。

    1回のワークアウトで50回以上の操作が25回以下に。この差が、継続率に直結します。


    おわりに: 「設定画面は敗北」

    ユーザーに設定を求めることは、開発者の怠慢です。 ユーザー自身も、最適な値を正確には把握していません。

    シナリオ設定画面アプローチSmart Defaultアプローチ
    休憩時間種目別設定画面前回の値を記憶
    単位設定で切り替え前回使った単位を維持
    重量刻み選択画面よく使う刻み幅を学習

    「設定してください」ではなく「覚えました」

    このUX設計を、React Native + TypeScriptで実装した筋トレ記録アプリ「Attain」を公開しています。

    Attainを試す(無料)

    この記事で紹介したZero Friction UXを、実際に体験してみませんか?

    3つの特徴

    1. 操作回数を半減 - 1回のワークアウトで25回以上の操作を削減
    2. 設定画面ゼロ - 使うだけで学習し、最適化される
    3. PWA対応 - Webブラウザから即利用可能(iOS/Androidアプリは準備中)

    すぐに始められます

    • PWA対応 - Webブラウザからも利用可能
    • コア機能は無料 - ワークアウト記録、Smart Pre-fill、Intent-Based Timer

    👉 Attainを試す

    ※ 開発中のため、機能は今後変更される可能性があります。


    質問・フィードバックは X (@paveg_) まで!

    X Facebook B! Hatena