
Contents
前回のおさらい
前回、回数を数えるだけの筋トレアプリをSwiftUIで自作しました。
記録も分析もなし。ただ回数を表示するだけ。
実際に使ってみて、不足を感じたのは1つだけです。
インターバルの終了が分からない。
画面を見る余裕がない場面では、
「音が鳴るだけ」で十分だと気づきました。
今回追加した機能
今回追加したのは、以下だけです。
- 秒数をカウントダウンする
- 0になったら音を鳴らす
- 画面遷移なし、設定なし
相変わらず、割り切り全振りです。
実装方針(シンプル重視)
- Timer を1本使う
- 状態管理は @State のみ
- 音はシステム効果音を使う
- 永続化・バックグラウンド対応はしない
「筋トレ中に確実に使えること」を最優先にしました。
コードサンプル:インターバルタイマー(最小構成)
インターバル管理用の状態
@State private var remainingTime: Int = 60
@State private var timer: Timer?
タイマー開始・停止処理
func startTimer() {
timer?.invalidate()
timer = Timer.scheduledTimer(withTimeInterval: 1, repeats: true) { _ in
if remainingTime > 0 {
remainingTime -= 1
} else {
stopTimer()
playSound()
}
}
}
func stopTimer() {
timer?.invalidate()
timer = nil
}
音を鳴らす(システム効果音)
import AudioToolbox
func playSound() {
AudioServicesPlaySystemSound(1005)
}
※ 1005 は標準の短い通知音です。
「うるさすぎない」のがポイント。
画面への組み込み例
VStack(spacing: 16) {
Text("休憩")
.font(.headline)
Text("\(remainingTime) 秒")
.font(.largeTitle)
HStack {
Button("開始") {
startTimer()
}
Button("停止") {
stopTimer()
}
}
}
これで
開始 → カウントダウン → 音が鳴る
という最低限の流れが完成します。
あえてやらなかったこと
- 秒数のカスタマイズ
- バックグラウンド実行
- バイブレーション切替
- Apple Watch対応
どれも「やろうと思えばできる」ですが、
今は不要 と判断しました。
使ってみて分かったこと
- 音が鳴るだけで十分
- 画面を見なくていいのが楽
- 実装が軽いので壊れにくい
回数カウントと同様、
機能を足したのに、思考は増えていない のが良い点です。
次にやるなら(予定)
- 秒数を3パターンだけ切替
- 音量を固定値にする
- トレーニング開始時のワンタップ化
ただし、必要になるまでやりません。
関連記事
筋トレアプリがサービス終了。回数を数えるだけのiOSアプリを自作した話
自分だけの筋トレアプリを作ってみよう! 〜アプリ開発の楽しさと挑戦〜
おわりに
筋トレ中に欲しいのは、
「正確さ」より「邪魔しないこと」。
回数カウント+音だけのインターバル。
これ以上でも以下でもない構成が、今の自分には最適でした。
本日はここまで。では、また次の記事でお会いしましょう。




-300x169.png)