5
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

ChatGPTを使っているとスクワットを促されるMacアプリを作った【Swift / Vision】

5
Last updated at Posted at 2026-10-19

こんにちは。

今回、「Squat for Mac」 というmacOS向けのアプリを個人開発し、GitHubで公開しました。

ChatGPTやClaudeなどのAIツールを長時間使っていると、スクワットをするように促してくれるアプリです。

Download: Squat for Mac v0.9.2

なぜ作ったのか

最近、ChatGPTやClaude、CodexなどのAIツールを使って開発することが増えました。

AIによって開発の効率は上がりましたが、一方で、パソコンの前に座っている時間も長くなっています。

特にAIを使った開発では、プロンプトを入力してから回答が返ってくるまで、ちょっとした待ち時間が発生します。

「この時間に少しでも運動できたらいいのでは?」

というのが、開発のきっかけです。

とはいえ、運動するためにわざわざ別のアプリを開いたり、トレーニングメニューを考えたりするのは面倒です。

そこで、AIを使っている時間をきっかけに、1〜2回でもスクワットをする習慣を作れないかと考えました。

作ったもの

Squat for Macは、Macのメニューバーに常駐するシンプルな運動促進アプリです。

Squat for Mac

※画面内の運動記録はデモデータです。

主な機能は次の4つです。

  1. AIアプリの利用時間を計測:ChatGPT・Codex・Claudeの利用時間を計測
  2. スクワットのリマインド:一定時間AIを使うと運動を促す通知を表示
  3. カメラによる回数カウント:Macのカメラで上下運動を認識し、回数を自動計測
  4. 運動記録の可視化:GitHubのContribution Graphのようなカレンダーで運動履歴を確認

運動の目標回数は1〜30回から設定できます。

個人的には、毎日何十回もスクワットすることより、運動を始めるまでのハードルをできるだけ下げることを重視しています。

技術スタック

今回はmacOSのネイティブアプリとして実装しました。

技術 用途
Swift アプリケーションの実装
SwiftUI UIの構築
AppKit メニューバー・ウィンドウ管理
AVFoundation カメラ映像の取得
Vision 顔の位置検出・動作認識
SQLite 運動履歴のローカル保存

基本的にはAppleのフレームワークを活用しています。

① AIアプリの利用時間を計測する

AIアプリの利用状況を把握するために、NSWorkspaceを使用しています。

NSWorkspace.shared.frontmostApplication?.bundleIdentifier

この情報から、現在Macで前面に表示されているアプリを判定できます。

Squatでは、ChatGPT・Codex・ClaudeのBundle IDを対象として、利用時間を集計しています。

ただし、単純にアプリの起動時間を数えているわけではありません。

他のアプリを操作している時間や、5分以上操作がない時間、Macのスリープ中などは計測を停止します。

また、複数のAIアプリを開いていても、前面にあるアプリだけを計測することで、利用時間が二重に加算されないようにしています。

現在は、AIの回答生成そのものを検出しているのではなく、AIアプリを前面で使用している時間を基準に通知する仕組みです。

通知間隔は30〜180分から選択できます。

② Visionでスクワットをカウントする

スクワットの認識には、AppleのVisionフレームワークを使用しています。

今回採用したのは、身体全体の姿勢を詳細に解析する方式ではなく、顔の位置の上下移動を利用したシンプルなカウント方式です。

処理の流れは次のようになっています。

カメラ映像を取得
       ↓
Visionで顔を検出
       ↓
顔の位置を取得
       ↓
初期位置をキャリブレーション
       ↓
顔が一定以上下がったか判定
       ↓
元の位置まで戻ったか判定
       ↓
スクワット回数を +1

実装では、VNDetectFaceRectanglesRequestを使って顔の位置を取得しています。

ただし、単純に顔が下がって上がっただけでカウントすると、細かな頭の動きなどで誤検出が発生します。

そのため、移動量だけでなく、一定時間その位置に留まったか、下降から上昇までの時間が十分か、といった条件も組み合わせています。

また、カメラの画角や使用者の位置によって認識結果が変わるため、運動開始前に約3秒間のキャリブレーションを行うようにしました。

なお、この方式は上下運動をカウントするためのもので、スクワットのフォームを正確に評価するものではありません。

③ ローカルで完結する設計

カメラを利用するアプリなので、プライバシーにも配慮しました。

Squatでは、カメラ映像の処理をMac上で完結させています。

映像をサーバーへ送信したり、録画したりする仕組みはありません。

また、運動履歴にはSQLiteを使用し、ローカルに保存しています。

そのため、アカウント登録やクラウドサービスへの接続は必要ありません。

GitHubのContribution Graphのように運動を可視化

個人的に気に入っているのが、運動記録をカレンダー形式で可視化する機能です。

Squat Calendar

※こちらもデモデータです。

GitHubのContribution Graphのように、日々の積み重ねを視覚的に確認できるようにしています。

スクワットは1日数回でも構いません。

重要なのは、運動したという小さな実績が残ることだと考えています。

また、運動記録を画像として保存・共有する機能も用意しています。

インストール方法

現在、Apple Silicon搭載Mac向けの公開プレビュー版(v0.9.2) を配布しています。

以下からダウンロードできます。

Squat for Macをダウンロード

ZIPファイルを展開し、アプリケーションフォルダに移動して利用できます。

なお、現時点ではApple Developer IDによる署名と公証には対応していないため、初回起動時にmacOSのセキュリティ警告が表示される場合があります。

詳しい手順はREADMEに記載しています。

ソースコードもGitHub上で公開しており、手元でビルドできます。

git clone https://github.com/rin999999334/squat-for-mac.git

cd squat-for-mac

./scripts/build.sh

open "dist/Squat for Mac.app"

※コードの公開ライセンスは現在未決定です。現時点では、改変・再配布を許可するオープンソースライセンスは付与していません。

今後について

まだ公開プレビュー版なので、改善したい部分はいくつかあります。

特に、今回の開発で実現したかったのは、AIの利用時間を計測すること自体ではなく、AIを利用する中で自然に運動するきっかけを作ることです。

将来的には、AIの回答生成中や生成完了のタイミングと連動できれば、より自然に運動を促せると考えています。

ただし、通常のChatGPTやClaudeの回答生成との連動は、現時点では実装済みの機能ではありません。

まずは実際に使ってもらいながら、通知のタイミングやスクワットの認識精度、UIなどを改善していきたいと思っています。

最後に

今回のSquat for Macは、かなり小さな課題から生まれたアプリです。

AIによって開発が便利になった一方で、人間が身体を動かす時間は減っている気がします。

だったら、AIを使う時間を少しだけ健康的な時間に変えられないか。

そんな発想から作りました。

同じようにMacで長時間作業している方や、AIを使って開発している方に試してもらえたらうれしいです。

フィードバックも歓迎しています。

気になった方はぜひGitHubを覗いてみてください。

GitHub: https://github.com/rin999999334/squat-for-mac

役に立ちそうだと思ったら、Starを付けてもらえると励みになります。

5
1
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
5
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?