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?

SwiftUI × Cloudinary でつくるボイス付き筋トレアプリ『Ui』

Last updated at Posted at 2025-07-01

こんにちは、tenj1nです。
現在、個人開発で筋トレサポートアプリ『Ui』を制作しています。

アプリの目的と特徴

筋トレサポートアプリを開発しようと思ったきっかけは、自分自身が筋トレをなかなか継続できなかったことです。
どうすれば楽しく続けられるかを考えたときに、「使いやすいアプリで、好きなキャラクターが応援してくれたら、前向きな気持ちでトレーニングできるのでは?」と思い、このアプリの開発を始めました。

その中で生まれたのが、音声付きキャラクターUiによる“継続しやすい筋トレサポートアプリ”です。

このアプリは、トレーニングを「継続しやすく、楽しく」行うために、
かわいらしいボイスキャラクター「Ui(雨衣)」が操作をガイドしてくれるのが最大の特徴です。


アプリの目的と特徴

  • 筋トレを続けるモチベーションを維持する
  • Uiの音声ガイドで、使うたびにポジティブな気持ちになれる
  • 記録したトレーニングや体重をわかりやすく振り返れる
  • (補助機能)食事の画像からカロリー・料理名も推定できる
  • これまでの記録データをもとに、AIが最適なメニューを自動提案

技術構成

構成要素 技術
フロント SwiftUI(iOSアプリ)
音声ガイド Ui(雨衣)の音声素材(ライセンス購入済)
画像アップロード Cloudinary API
カロリー推定 Spoonacular API
バックエンド(予定) Flask(AI提案ロジック、音声解析など)

ホーム画面のUI(開発中)

現在のホーム画面は以下のようになっています:

ホーム画面のUIスクリーンショット 2025-07-01 19.15.23.png

  • 中央にキャラクター(仮)のアイコンが表示
  • 右側に「トレーニング」「ログ履歴」「記録保存」の主要機能ボタン
  • 下部には統計や設定にアクセスできるナビゲーションバー

今後はここからトレーニングメニューを選択し、実行・記録・フィードバックができるように拡張予定です。


トレーニングの流れ

  1. 「トレーニング」ボタンからメニューを選択
  2. 過去の記録データをもとに、AIが自動で最適な筋トレメニューを提案
  3. トレーニング開始 → Uiの音声で応援・案内
  4. 終了後、ログに記録
  5. 実施履歴や傾向は後からグラフで確認可能

補助機能:食事記録とカロリー推定

Cloudinaryを用いて画像をアップロードし、そのURLを Spoonacular API に渡して解析します:

CloudinaryUploader().uploadImage(image) { result in
    switch result {
    case .success(let url):
        self.analyzeFoodImage(with: url)
    case .failure(let error):
        print("アップロード失敗:", error.localizedDescription)
    }
}

推定処理:

func analyzeFoodImage(with imageURL: String) {
    let url = URL(string: "https://api.spoonacular.com/food/images/analyze?apiKey=API_KEY&imageUrl=\(imageURL)&language=ja")!
    URLSession.shared.dataTask(with: url) { data, _, _ in
        guard let data = data,
              let json = try? JSONSerialization.jsonObject(with: data) as? [String: Any],
              let category = json["category"] as? String else { return }

        DispatchQueue.main.async {
            self.foodName = category
            self.calories = (json["nutrition"] as? [String: Any])?["calories"] as? String ?? "取得失敗"
        }
    }.resume()
}

音声ガイドとキャラクター性

『Ui』の最大の魅力は、ただの記録アプリではなく、“一緒に頑張ってくれるパートナー”としての存在をUIと音声で表現している点です。

アプリ起動時やトレーニング完了時には、Uiの音声ガイドが再生され、ユーザーの行動をやさしく後押しします。

著作権とライセンスについて

本アプリでは、キャラクター「Ui(雨衣)」の音声素材を使用しています。
音声およびキャラクター素材は Ui公式サイト より正規ライセンスを購入し、アプリ内でのみ使用しています。
Qiita記事内では音声・画像などの素材自体は掲載いたしません。

🄫 Ui © 2021 TOKYO6 ENTERTAINMENT

今後の展望

AIによるトレーニング強度・頻度の最適化提案

録音データの活用による音声分析(食事傾向、トーン評価など)

トレーニングごとの消費カロリー・継続日数の可視化

カレンダー・グラフによる記録の振り返り機能

ボイス付きリアクションによる“ガチャ風ご褒美”機能 など

「筋トレを、楽しく続けられるように」
このコンセプトのもと、Uiアプリを引き続き開発していきます。

最後まで読んでいただき、ありがとうございました!

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?