【iOS18】メンタルヘルスを管理する
メンタルヘルスの新しいHealthKitAPI
メンタルヘルスをサポートするため、HealthKitに追加された新しいAPIが追加されました。自分の気分を振り返り、心の状態を記録して精神の健康状態を追跡できます。また、AppleWatchからも記録できるため、1日のどの時点でも簡単にチェックできます。
追加された評価シート
精神状態を詳しく評価するために、Healthアプリで不安やうつ病に関する標準化されたアンケートに回答することができます。GAD-7およびPHQ-9は質問票であり、世界中の医療従事者がメンタルヘルスのスクリーニングに使用しています。GAD-7(不安症)とPHQ-9(うつ病)に関する評価結果の読み書きが可能になりました。
State of Mind API
State of Mindは、個人の気分や感情を表現する方法です。感情は短期間の感情ですが、気分は長期的な感情です。自分の感情状態を特定することには、多くのメリットがあります。
State of Mindのパラメータ
State of Mindには4つのパラメータがあります。
-
Kind
(心の状態) -
Valence
(感情を示す値) -
Labels
(心の状態を表現するラベル) -
Associations
(心の状態に関連する事柄)
これらを使用して、誰かの精神状態を表すことができます。
プロパティ名 | 型 | 説明 |
---|---|---|
kind |
HKStateOfMind.Kind |
心の状態の種類 |
valence |
Double |
感情を示す値 |
labels |
[HKStateOfMind.Label] |
心の状態を表現するラベル |
associations |
[HKStateOfMind.Association] |
心の状態に関連する事柄 |
Kind:心の状態の種類
ケース名 | 説明 |
---|---|
dailyMood |
日々の気分を示す |
momentaryEmotion |
一時的な感情を示す |
Valence:感情を示す値
Labels:感情を表現する
ケース名 | 説明 |
---|---|
amazed |
驚いた |
amused |
面白がった |
angry |
怒った |
annoyed |
イライラした |
anxious |
不安 |
ashamed |
恥じる |
brave |
勇敢 |
calm |
落ち着いた |
confident |
自信がある |
content |
満足 |
disappointed |
失望した |
discouraged |
落胆した |
disgusted |
嫌悪した |
drained |
疲れ果てた |
embarrassed |
恥ずかしい |
excited |
興奮した |
frustrated |
不満を感じた |
grateful |
感謝している |
guilty |
罪悪感を感じた |
happy |
幸せ |
hopeful |
希望に満ちた |
hopeless |
絶望的 |
indifferent |
無関心 |
irritated |
イライラした |
jealous |
嫉妬した |
joyful |
喜び |
lonely |
孤独 |
overwhelmed |
圧倒された |
passionate |
情熱的 |
peaceful |
平和 |
proud |
誇りに思う |
relieved |
安堵した |
sad |
悲しい |
satisfied |
満足した |
scared |
怖い |
stressed |
ストレスを感じた |
surprised |
驚いた |
worried |
心配した |
Associations:心の状態に関連する事柄
ケース名 | 説明 |
---|---|
community |
コミュニティ |
currentEvents |
現在の出来事 |
dating |
デート |
education |
教育 |
family |
家族 |
fitness |
フィットネス |
friends |
友人 |
health |
健康 |
hobbies |
趣味 |
identity |
アイデンティティ |
money |
お金 |
partner |
パートナー |
selfCare |
セルフケア |
spirituality |
スピリチュアリティ |
tasks |
タスク |
travel |
旅行 |
weather |
天気 |
work |
仕事 |
HKStateOfMind
サンプルの保存方法(実装例)
新しいAPIを使用して、絵文字を使用して気分を記録し、それをHealthKitに保存できます。まずは記録したい感情を定義します。呼び出しやすいように絵文字をプロパティで定義します。
enum EmojiType: CaseIterable {
case angry
case sad
case indifferent
case satisfied
case happy
var emoji: String {
switch self {
case .angry: return "😡"
case .sad: return "😢"
case .indifferent: return "😐"
case .satisfied: return "😌"
case .happy: return "😊"
}
}
}
サンプルを作成するためのメソッドを作成します。感情を記録するためには、HKStateOfMind
サンプルを作成します。
/// イベントと絵文字の選択に基づいたState of Mindサンプルを作成
func createSample(for event: EventModel, emojiType: EmojiType) ->
HKStateOfMind {
let kind: HKStateOfMind.Kind = .momentaryEmotion
let valence: Double = emojiType.valence
let label = emojiType.label
let association = event.association
return HKStateOfMind(date: event.endDate,
kind: kind,
valence: valence,
labels: [label],
associations: [association])
}
HKStateOfMind
サンプルをHealthKitStoreに保存します。
// 絵文字の選択からState of Mindサンプルを保存
func save(sample: HKSample, healthStore: HKHealthStore) async {
do {
try await healthStore.save(sample)
} catch {
// エラー処理をここに記述
}
}
新しい条件検索
HealthKitでサンプルを検索するための4つの新しい条件指定(Predicate)を導入します。Kind
・Valence
・Labels
・Associations
を指定してクエリを実行できます。これにより、必要な情報を簡単に取得できます。
Predicateのメソッド紹介
Kind
Valence
Labels
Associations
HKStateOfMind
サンプルの呼び出し(実装例)
StateofMind
サンプルを呼び出す実装例です。
// 日付の条件指定を行うためのNSPredicateを定義
let datePredicate: NSPredicate = { ... }
// associationsの各要素に対して、対応するHKQueryの状態を取得するためのpredicateを作成
let associationsPredicate = NSCompoundPredicate(
orPredicateWithSubpredicates: associations.map {
// HKQueryの状態を取得するためのpredicateを作成
HKQuery.predicateForStatesOfMind(with: $0)
}
)
// 複合条件のpredicateを作成
let compoundPredicate = NSCompoundPredicate(
andPredicateWithSubpredicates: [datePredicate, associationsPredicate]
)
// 条件指定を行うためのpredicateを作成
let stateOfMindPredicate = HKSamplePredicate.stateOfMind(compoundPredicate)
// サンプルクエリを実行するためのdescriptorを定義
let descriptor = HKSampleQueryDescriptor(predicates: [stateOfMindPredicate],
sortDescriptors: [])
// クエリの結果を格納する配列を定義
var results: [HKStateOfMind] = []
do {
// クエリを実行して結果を非同期で待つ
results = try await descriptor.result(for: healthStore)
} catch {
// クエリ実行中にエラーが発生した場合の処理をここに記述
print("エラーが発生しました: \(error)")
}
特定のラベルを持つStateofMind
サンプルを取得するには、以下の実装が参考になります。
// 指定するラベルを定義
let label: HKStateOfMind.Label = .happy
// ラベル条件のpredicateを作成
let labelPredicate = HKQuery.predicateForStatesOfMind(with: label)
Valence
(感情を示す値)の表現方法
Valence
の値は-1
〜1
であるため、どのように表現するかはアプリによって変更する必要があります。
// 各valence値を0.0から2.0の範囲に調整
let adjustedValenceResults = results.map { $0.valence + 1.0 }
// 平均値を計算
let totalAdjustedValence = adjustedValenceResults.reduce(0.0, +)
let averageAdjustedValence = totalAdjustedValence / Double(results.count)
// パーセンテージに変換
let adjustedValenceAsPercent = Int(100.0 * (averageAdjustedValence / 2.0))
まとめ
新しいHealthKitAPIを活用することで、メンタルヘルスの管理ができるようになりました。個人の気分や感情を記録し、詳細な評価することで、精神状態を振り返ることができます。今後、メンタルヘルスの管理をiOSで行う場合は導入すべきと感じました。
最後に
間違い・気になる部分がありましたら、コメントいただけると大変うれしいです。
良かったと思ったら記事へのいいね、Xのフォローをよろしくお願いいたします。
個人でアプリを作成しています。良かったら覗いてみてください。
参考資料
Discussion