概要
BMI Dial(BMIダイヤル) は、円形のダイヤルを回して使う iOS 向けの BMI 計算アプリです。
中央の円は身長・体重・BMI の3項目に分かれていて、指で回すと「上に来た項目」が自動で算出されます。 残りの2つを入力するだけ、という操作系にすることで、「どれを求めたいか」をダイヤルの向きで直感的に切り替えられます。 健康管理層・トレーニーを対象に、シンプルで美しい UI を目指しました。
広告なし・データ収集なしで、入力はすべて端末内で完結します。現在 App Store リリースに向けて準備中(v1.0) です。
本アプリの数値・判定は一般的な情報提供を目的としたもので、医療上の助言に代わるものではありません。
主な機能
- 回して算出 — 中央のダイヤルを回し、上に来た項目(身長・体重・BMI)を残り2つから自動計算
- JASSO 基準の判定 — 日本肥満学会(JASSO)基準による判定と、適正体重の表示
- 目標体重インサイト — 目標体重までの増減がひと目でわかる
- 単位切替 — メートル法/ヤード・ポンド法
- 3つのテーマ — ふんわりパステル/モノ・ミニマル/ダークモード
- 日本語・英語対応
プライバシー
- 広告なし・データ収集なし — 解析も広告 SDK も入れていません
- 入力データはすべて端末内で完結し、外部に送信されません(App Privacy: データ収集なし)
技術構成
- SwiftUI(iOS 18+)で実装
- MVVM — 計算ロジックを
BMIViewModelに分離 - ダイヤルの描画・操作は Canvas / GeometryReader / DragGesture を使用
- ローカライズ(日本語・英語)
- ユニットテスト(XCTest) — 計算ロジック(
BMIViewModel/ 単位変換Units)をテスト - GitHub Actions による CI — macOS ランナー上で
xcodebuild testを実行し、コードカバレッジを計測
設計メモ
- ダイヤルの幾何 — 直径 300pt の円を3セクター(各 120°)に分割し、conic-gradient で描画。各項目ラベルは中心から半径 104pt のリング上に配置。
- 回転とスナップ — ドラッグ中はポインタ角度(
atan2)の差分でホイール全体を回転させ、指を離すと最寄りの 120°の倍数へスナップ(280ms / easeOutCubic)。スナップ確定後に算出対象を再判定して再計算する。 - 算出対象の判定 — 回転角から「上部に来ているセクター」を求め、その項目を自動算出扱いにする。
- 広告なし方針 — v1.0 はプライバシー申告を「データ収集なし」で完結させるため、広告 SDK を外して出荷。広告コードは
#if canImport(GoogleMobileAds)でガードしたまま残してあり、将来 SDK を戻すだけで再有効化できる設計にしている。





