(Sample)
今回は、「呼吸ガイド付きの瞑想アプリ」の実装について、コード全体の意味と各機能の役割を解説していきます。呼吸法を可視化するだけで、ユーザーの心の安定に大きく役立つアプリになります。
動作するデモ機能付きのHTMLだけで作れるので、プログラミング初学者にもぴったり!
どんなアプリ?
「吸う」「止める」「吐く」「止める」という呼吸サイクルを、丸い円の大きさと色で表現します。さらに、各フェーズの長さをスライダーで自由に調整できるようになっています。
全体の構成まとめ
項目 | 概要 |
---|---|
表示要素 | 円形アニメーション+呼吸指示テキスト |
操作 | 「開始/停止」ボタン、4種類の呼吸時間スライダー |
動作 | 時間に合わせて円の拡大・縮小と色の透明度が変化 |
HTML構造を読み解く
コア部分
<div class="circle" id="circle">吸ってください</div>
これは、アニメーションの主役となる丸い円で、テキストも中に入っています。
時間設定スライダー
<input type="range" id="inhaleTime" value="4" min="1" max="20" />
- 吸う、止める、吐く、止める、の4ステップをそれぞれ調整可能。
- スライダーの値はリアルタイムにラベルに反映されます。
CSSでアニメーションを演出
.circle
クラスの主な特徴
.circle {
width: 200px;
height: 200px;
border-radius: 50%;
transition: transform var(--duration, 4s) ease-in-out;
}
- 円の大きさを変えるには
transform: scale()
を使用 - 色の変化も
background-color
をrgba()
で透明度付きにして制御
例えるなら「風船が膨らんだり縮んだりしているイメージ」です!
JavaScriptで呼吸サイクルを制御
呼吸の流れを配列で管理
const instructions = [
"吸ってください",
"止めてください",
"吐いてください",
"止めてください",
];
instructionIndex
をインクリメントしながら、順番にテキストとアニメーションを切り替えています。
呼吸フェーズに応じた動き
switch (instructionIndex) {
case 0: // 吸う
circle.style.transform = "scale(3)";
circle.style.backgroundColor = "rgba(76, 175, 80, 0.3)";
break;
case 2: // 吐く
circle.style.transform = "scale(1)";
circle.style.backgroundColor = "rgba(76, 175, 80, 1)";
break;
}
- 吸うときは
scale(3)
→ 円が大きくなる - 吐くときは
scale(1)
→ 円が元に戻る - 色の透明度で呼吸フェーズを視覚的に補助
タイマー制御がポイント!
setInterval
と setTimeout
を組み合わせることで、「動く」「止まる」の繰り返しが可能になっています。
setTimeout(() => {
intervalId = setInterval(updateInstruction, time * 1000);
instructionIndex = (instructionIndex + 1) % instructions.length;
updateInstruction();
}, time * 1000);
なぜ setTimeout
を使ってるの?
「止める」フェーズではタイマーを一旦止める必要があるため、一時停止→再開の制御に使われています。
スライダーのカスタマイズ(UI向上)
function updateSliderColor(slider) {
const value = ((slider.value - slider.min) / (slider.max - slider.min)) * 100;
slider.style.background = `linear-gradient(to right, #007bff 0%, #007bff ${value}%, #ddd ${value}%, #ddd 100%)`;
}
- スライダーの背景色を動的に更新することで、直感的に「今どこ?」が分かる仕掛けになっています。
応用アイデア(もっと良くするには?)
アイデア | 内容 |
---|---|
音声ガイドの追加 | 各フェーズで「吸ってください」などの音声再生 |
背景の色も変化 | 呼吸に合わせて画面全体の色を変えると没入感アップ |
カウント表示 | 各フェーズに残り秒数を表示する |
タイマー表示 | 瞑想セッションの残り時間カウントダウン機能 |
今後の学習ステップ
このアプリで習得できたことはたくさんあります!
setInterval
とsetTimeout
を使った繰り返しと一時停止- スライダーの値連動UI(
input[type=range]
のカスタマイズ) transform: scale()
やtransition
による動きのあるUI演出- イベント駆動型のプログラミングの考え方
次のステップとしてはこんなことにも挑戦してみましょう!
- 音声ガイドやBGMの導入
requestAnimationFrame
を使ったより滑らかな呼吸波形の表現- PWA(Progressive Web App)としてスマホ対応・オフライン化
瞑想アプリは「誰でも触れる・役に立つ・作っていて楽しい」3拍子揃ったプロジェクトです。ぜひ自分だけのアレンジを加えて、世界に一つだけのアプリを作ってみてくださいね!質問もいつでもどうぞ!