ハイライト
Apple は、WWDC21 で Dan Harris と Jeff Warren に瞑想の始め方を説明してもらうよう手配し、開発者はストレス管理、集中トレーニング、習慣形成を健康アプリの機能に変えるための明確なプロセスを手に入れました。
主要内容
このセッション中に新しい Apple API はリリースされませんでした。これは、開発者によくあるもう 1 つの問題を解決します。つまり、長時間画面を見つめ、進捗状況を把握し、オンライン事故に対処した後、体はまだ椅子に座ったままで、不安、疲労、衝動によって注意が奪われてしまうのです。
ダン・ハリスはテレビの生放送中にパニック発作を起こすことから始まります。彼は、根本的な原因を、長期にわたる高圧的な仕事、戦争での報道後のうつ病、そして自分自身への間違った対処法にあると突き止めました。その後、彼は毎日 5 ~ 10 分間瞑想を実践し始め、その結果 3 つの結果が得られたと結論付けました。それは、より穏やかになり、より集中力が増し、心の中にある考えがより認識できるようになったというものです。
Apple はこのプレゼンテーションを「健康とフィットネス」のテーマに基づいて行いました。要点は簡単です。ヘルスケア アプリは歩数、心拍数、睡眠を記録するだけでは十分ではありません。ユーザーが本当に必要としているのは、ストレスが生じたときに一時停止し、特定し、現在の瞬間に戻るのに役立つ小さな実行可能なアクションです。
ジェフ・ウォーレンの運動習慣は短い。座って深呼吸をし、額、肩、腹部をリラックスさせます。呼吸など、焦点を当てる対象を選択します。心がさまよったときにそれを見つけて、呼吸に戻ってください。このサイクルが実践そのものです。
アプリ開発者にとって、このセッションの価値は製品構造にあります。優れた瞑想やメンタルヘルス機能を実現するには、最初に長いセッションを続ける必要はありません。 1分から開始でき、「敷居が低く、再現性があり、中断後の再開が可能」を核としており、ユーザーが安定した習慣を確立できるよう支援する。
詳細
1. 1 分で習慣のデザインを始めましょう
(14:17)
Dan Harris 氏が提示した最小しきい値は、31 日間のうち 25 日間は 1 日あたり少なくとも 1 分です。彼は次の 2 つの短い文を強調しました。One minute countsそしてdaily-ish。前者は初期コストを削減し、後者はユーザーに回収の余地を残します。
このルールは、まず純粋な Swift モデルとして作成できます。プライベート API には依存せず、新しいシステム機能も想定しません。
import Foundation
struct MeditationCheckIn {
let date: Date
let minutes: Int
}
struct DailyIshHabit {
let targetDays = 25
let windowDays = 31
func isOnTrack(checkIns: [MeditationCheckIn], calendar: Calendar = .current) -> Bool {
let practicedDays = Set(checkIns
.filter { $0.minutes >= 1 }
.map { calendar.startOfDay(for: $0.date) })
return practicedDays.count >= targetDays
}
}
キーポイント:
MeditationCheckIn「少なくとも 1 分」の閾値に対応して、日付と練習時間のみが記録されます。targetDaysこれは 25 日で、ダンが言った 31 日のうちの 25 日に相当します。windowDaysインターフェイスでターゲット期間を表示しやすくするために、31 日間のウィンドウを保持します。filter { $0.minutes >= 1 }1 分未満のレコードを除外します。calendar.startOfDay(for:)同じ日の複数のエクササイズを 1 日に結合します。practicedDays.count >= targetDays完了までの日数を使用して、ユーザーがまだ順調に進んでいるかどうかを判断します。
このモデルの最終的な意味は、1 日トレーニングを怠ったことを失敗状態にしないことです。インターフェースに「このサイクルは 18 日間完了しました。まだ 7 日間残っています」と表示できるため、ユーザーは継続しやすくなります。
2. 瞑想を実行可能なステートマシンに分割する
(17:29)
ジェフ・ウォーレンの 5 分間の練習には明確な順序があります。姿勢を整え、深呼吸をし、体をリラックスさせ、環境の不完全さを受け入れ、注意の対象として呼吸を選択し、心がさまよっているときに気づき、呼吸に戻ります。
ステートマシンとして記述することで、アプリはコピーライティング、タイミング、振動プロンプトを安定して制御できます。
enum MeditationStep: String, CaseIterable {
case posture
case deepBreath
case softenBody
case allowExperience
case noticeBreath
case returnToBreath
case close
var prompt: String {
switch self {
case .posture:
return "楽な座り方を選び、目を閉じても、床の方を見てもかまいません。"
case .deepBreath:
return "何度か深呼吸し、吸うときに背筋を伸ばし、吐くときに力を抜きます。"
case .softenBody:
return "額、肩、お腹をゆるめます。"
case .allowExperience:
return "音、身体感覚、考えが自然に現れるままにします。"
case .noticeBreath:
return "呼吸の感覚に注意を向けます。"
case .returnToBreath:
return "気がそれたことに気づいたら、呼吸に戻ります。"
case .close:
return "今この瞬間に、より落ち着き、より存在できているかを観察してから目を開けます。"
}
}
}
キーポイント:
MeditationStep逐語的な原稿の演習ステップに対応します。CaseIterableインターフェースがすべてのステップを順番に実行できるようにします。prompt各ステップをユーザーが直接フォローできる文に変換します。postureジェフからのガイダンスで、リスナーに快適なポジションを選択してもらいます。softenBody額、肩、腹部を適宜リラックスさせます。allowExperience通信により、音、身体感覚、思考が自然に生じます。returnToBreath心がさまよっていることに気づいたら、呼吸に戻ります。
このコードは、SwiftUI のオンボーディング ページ、watchOS での短い演習、または音声コースの字幕プロンプトに配置するのに適しています。
3. 「マインドワンダリング」を練習イベントとして扱う
(20:25)
ジェフは、ゾーンアウトするのは自然なことだと言います。ダンは後に、瞑想の中心となる行為は、気が散っていることに繰り返し気づき、再び始めることだと付け加えた。ユーザーが正しく瞑想することは心をクリアにすることと同じだと考えると、初日で諦めてしまいがちです。
アプリは「心の迷い発見」をポジティブなイベントに変えることができます。ユーザーがボタンをクリックすると、失敗ではなくリターンが記録されます。
struct DistractionEvent {
let occurredAt: Date
let returnedToAnchor: Bool
}
struct MeditationSession {
private(set) var distractions: [DistractionEvent] = []
mutating func recordReturn(at date: Date = Date()) {
let event = DistractionEvent(
occurredAt: date,
returnedToAnchor: true
)
distractions.append(event)
}
}
キーポイント:
DistractionEvent気を散らした後の復帰を文書化する。returnedToAnchorユーザーが呼吸などの注意の対象に戻ったことを示します。MeditationSession演習からのすべての回帰イベントを保存します。recordReturnユーザーが「検出と返却」を完了した場合にのみレコードを追加します。- トランスクリプトではマインドワンダリングが実践の一部であることを強調しているため、ここには失敗の数はありません。
インターフェースはボタンに「戻ってきました」と書き込むことができます。ユーザーがそれを押すと、アプリに「これは演習です」と表示されます。これは、「気が散る数 +1」を表示するというよりも、セッションのガイダンスに近いです。
4. 一時停止チェックで画面の圧力を管理する
(26:22)
ダンはジェフに、テクノロジーとの緊張関係にどのように対処しているのか尋ねました。ジェフのアプローチは、仕事中に一時停止し、自分がどこにいるかを確認し、ストレッチし、散歩し、再び戻ってくることです。彼は毎日のスクリーンタイムも制限しています。
これは簡単なチェックリストに変えることができます。メニュー バー アプリ、ポモドーロ、Apple Watch リマインダー、または開発者ツール プラグインへの配置に適しています。
struct NervousSystemCheck {
var bodyTension: Int
var attentionStuck: Bool
var needsWalk: Bool
var suggestedAction: String {
if needsWalk {
return "画面から離れて、数分歩きます。"
}
if bodyTension >= 7 {
return "1 分止まり、肩とお腹をゆるめます。"
}
if attentionStuck {
return "深呼吸を 3 回してから、次の一手を決めます。"
}
return "作業を続け、次の休憩でまた確認します。"
}
}
キーポイント:
bodyTensionジェフの発言に応じた身体的緊張のレベルを記録し、自分の状態を確認します。attentionStuck注意が単一のオブジェクトに集中していることを示します。needsWalkジェフが言及した散歩に相当します。suggestedActionステータスに基づいて特定のアクションを与えます。- 戻り値は短く、通知、コンプリケーション、またはウィジェットに適しています。
この機能の重要な点はタイミングです。リマインダーは、ユーザーの集中力を毎回中断するものであってはなりません。これは、長時間画面を使用した後、会議の終了後、またはコンパイルが複数回失敗した後などに適しています。
5. 幸福を訓練可能な状態として見る
(27:48)
ダンの最終的な結論は、平和、幸福、つながり、思いやり、愛はすべて訓練することができ、瞑想はその方法の 1 つである、というものです。健康アプリの場合、目標は単に達成記録だけではなく、練習後のユーザーのステータスの変化も意味します。
各エクササイズの後に軽いメモを取ることができます。
struct PostMeditationReflection {
let settled: Bool
let present: Bool
let note: String?
var summary: String {
switch (settled, present) {
case (true, true):
return "より落ち着き、より今ここにいます。"
case (true, false):
return "身体がより落ち着いています。"
case (false, true):
return "注意がより今ここにあります。"
case (false, false):
return "1 回の練習を完了しました。"
}
}
}
キーポイント:
settled終了前にジェフが尋ねた「もっと落ち着いた?」という質問に対応します。present「より存在感があるかどうか」に相当します。noteユーザーに空き録音スペースを残しておきます。summaryバイナリ状態で短いフィードバックを生成します。- たとえ両方の値が
false、フィードバックは依然としてユーザーが演習を完了したことを認識します。
この設計により、瞑想がパフォーマンスのレビューに変わることがなくなります。ユーザーは変更を観察するだけで済み、次回は続行できます。
重要ポイント
- やるべきこと: 1 分間の瞑想ポータルを作成し、アプリまたは Apple Watch コンプリケーションのホームページに配置します。
- 実行する価値がある理由: ダンは、1 分が重要であり、閾値を低くすることが習慣の形成に役立つことを明らかにしました。
- 開始方法: を使用します
DailyIshHabit31日以内の練習日数を記録し、ホームページに「1分スタート」ボタンを設けるだけ。
- やるべきこと: 「ただいま」ボタンを作成し、ユーザーが気が散った後に呼吸に戻った回数を記録します。
- 実行する価値がある理由: ジェフもダンも、心がさまよった後に戻ってくるのは動きを練習することだと強調しています。
- 開始方法: を使用します
MeditationSession.recordReturn()イベントを追加し、エンドページに「6回戻ってきました」と表示します。
- やるべきこと: 画面圧力による一時停止のリマインダーを作成します。
- 実行する価値がある理由: ジェフは、テクノロジーの使用は、バランスを回復するために一時停止し、ストレッチし、歩くことに依存していると述べました。
- 開始方法: 長時間集中すると現れる
NervousSystemCheckリラックスしたり散歩したりするための提案を含む Q&A。
- やるべきこと: 社交不安対策カードを作成します。
- 実行する価値がある理由: ジェフは、最初に具体的な不安を特定し、それから関係者に同意を伝えることをお勧めします。
- 開始方法: ユーザーに「心配していること」と「相手にどのように協力してほしいか」を書き留めてもらい、コピーできる短いメッセージとして保存します。
- やるべきこと: 運動後のステータスを記録します。
- やる価値がある理由: ジェフは練習の終わりに、もっと安定して存在感を発揮できるかどうか尋ねました。
- 開始方法: を使用します
PostMeditationReflection2 つのブール値と週ごとの変更を示す短いメモを保存します。
関連セッション
- Apple Watch 用のワークアウト アプリを構築する — SwiftUI と HealthKit を使用して完全な運動追跡を行い、身体的および精神的健康アプリのスポーツ側のエントリとして適しています。
- 動作で健康を測定 - 身体活動データの健康判定を補う歩行安定性と 6 分間ウォーキングについて説明します。
- 研究とケアのアプリを構築する、パート 1: オンボーディングのセットアップ — ResearchKit と CareKit が健康研究とケアのプロセスをどのように設計できるかを示します。
- 検証可能な健康記録の探索 — 医療データを必要とするアプリに適した、健康記録の安全な要求と処理について説明します。
コメント
GitHub Issues · utterances