Upgrade to Pro — share decks privately, control downloads, hide ads and more …

【スマホの熱中症対策】 ThermalState API 実践活用ガイド

【スマホの熱中症対策】 ThermalState API 実践活用ガイド

「暑い日にスマートフォンを使っていて、アプリの動作が遅くなった…」そんな経験、ありませんか?
特に屋外で利用されるアプリにとって、端末の温度はユーザー体験を大きく左右する重要な要素です。スマートフォンが熱を持つと、アプリのパフォーマンスが著しく低下したり、一部の機能が制限されたりすることがあります。このような影響を把握しておくことは、快適なサービス提供のために非常に重要です。

本トークでは、Foundationフレームワークに含まれる ProcessInfo.ThermalState API に注目します。このAPIを使うことで、デバイスの熱状態を4段階で把握することが可能です。
今回は実際に屋外で使われるモビリティアプリにおいて、ThermalState が季節や時間帯、アプリの状態などによってどのように変化するのかなど、実測データとともに詳しくご紹介します。
さらに、熱状態に応じてアプリが取ることができる対策についても解説します。

スマートフォンを「熱中症」から守り、夏でもクールで快適なユーザー体験をお届けしましょう!

Avatar for Atsushi Otsubo (tsuboyan)

Atsushi Otsubo (tsuboyan)

September 19, 2025
Tweet

More Decks by Atsushi Otsubo (tsuboyan)

Other Decks in Technology

Transcript

  1. Luup, Inc. - Confidential and Proprietary 2 2020.04~ • 新卒⼊社

    • iOSエンジニア 2023.11~ • iOSエンジニア tsuboyan (⼤坪 敦) 株式会社Luup, iOS エンジニア 2
  2. © all rights reserved Luup, Inc. 今年も ”暑さ”記録更新 導⼊ 4

    引用元: ウェザーニュース, https://weathernews.jp/news/202508/270086/
  3. © all rights reserved Luup, Inc. iPhone 17 仕様 導⼊

    8 引用元:https://www.apple.com/jp/iphone-17/specs/
  4. © all rights reserved Luup, Inc. iPhone 17 仕様 導⼊

    9 引用元:https://www.apple.com/jp/iphone-17/specs/
  5. © all rights reserved Luup, Inc. iPhone 17 仕様 導⼊

    10 引用元:https://www.apple.com/jp/iphone-17/specs/
  6. © all rights reserved Luup, Inc. ``` デバイス内部の温度が通常の動作温度範囲を超えると、次のような変化が見られる 場合があり ます。


    • 充電が遅くなる、停止する 
 • ディスプレイが暗くなる 、またはディスプレイに何も表示されなくなる 
 • 無線が低電力状態になると、モバイル通信の電波が弱くなる ことがあります。
 • カメラのフラッシュやその他のカメラ機能が一時的に無効 になる
 • 一部のアプリや機能で、フレームレートの低下や処理時間の増加により 
 パフォーマンスが低下 する ``` Appleのサポートドキュメントに記載あり 導⼊ 13 引用元: https://support.apple.com/ja-jp/118431
  7. © all rights reserved Luup, Inc. 熱の計測をするには - ThermalState API

    4段階で熱状態を取得可能 ThermalState について ThermalState 説明 Nominal 通常 Fair わずかに発熱 Serious 大きく発熱 Critical 著しく発熱。システムへの影響大 17
  8. © all rights reserved Luup, Inc. import Foundation let thermalState

    = ProcessInfo.processInfo.thermalState ThermalState について ThermalState の取得⽅法 18
  9. © all rights reserved Luup, Inc. ThermalState について ThermalState の取得⽅法

    import Foundation let thermalState = ProcessInfo.processInfo.thermalState switch thermalState { case .nominal: case .fair: case .serious: case .critical: @unknown default: } 19
  10. © all rights reserved Luup, Inc. ThermalState について ThermalState の変更を検知する

    20 NotificationCenter.default.addObserver( self, selector: #selector(thermalStateDidChange), name: ProcessInfo.thermalStateDidChangeNotification, object: nil ) @objc func thermalStateDidChange() { print("Thermal state changed!") }
  11. © all rights reserved Luup, Inc. ThermalState の変化要因 ThermalState が変化する要因

    外部要因 直射⽇光や、周囲の気温など、外から与えられる熱 内部要因 CPUやモニター、バッテリーなど、スマホ⾃⾝の動作による発熱 23
  12. © all rights reserved Luup, Inc. ThermalState の変化要因 ThermalState が変化する要因

    外部要因 直射⽇光や、周囲の気温など、外から与えられる熱 内部要因 CPUやモニター、バッテリーなど、スマホ⾃⾝の動作による発熱 24 → ⾼負荷をかける → 直射⽇光下におく
  13. © all rights reserved Luup, Inc. ※ iPhoneの発熱により、バッテリー寿命低下など悪影響が出る可能性があります。 今回の検証では、端末に異常がないか含め監視しながら検証を⾏いました。 ※

    検証結果についても、使⽤する端末の種類や状態‧気候など条件によって結果が ⼤きく変わる可能性があります。 25 検証上の注意 ThermalState が変化する要因
  14. © all rights reserved Luup, Inc. 負荷をかけるアプリを作り検証 27 • CPUに⾼負荷をかける

    ◦ 無限に三⾓関数の計算をする • GPUに⾼負荷をかける ◦ 多数の3Dオブジェクトにリアルな影や物理 ベースの質感を設定 ThermalState が変化する要因
  15. © all rights reserved Luup, Inc. 29 Energy Impact も

    Very High ThermalState が変化する要因
  16. © all rights reserved Luup, Inc. • 屋内で実施 • 室温:27度

    • 使⽤端末:iPhone 12 Pro 検証⽤のアプリを実⾏ 30 ThermalState が変化する要因 実施環境
  17. © all rights reserved Luup, Inc. ThermalState の変化にかかった時間 • Nominal

    (通常) → Fair (やや熱) :70秒 • Fair (やや熱) → Serious :40秒 • Serious → Critical :- 検証⽤のアプリを実⾏ 31 結果 ThermalState が変化する要因 ThermalState が変化する要因
  18. © all rights reserved Luup, Inc. • 実施⽇:9/17 AM 10:30

    • 外気温:約30度 • 使⽤端末:iPhone 12 Pro 直射⽇光下で検証 33 ThermalState が変化する要因 検証環境
  19. © all rights reserved Luup, Inc. ThermalState の変化にかかった時間 • Nominal

    → Fair :40秒 • Fair → Serious :85秒 • Serious → Critical :115秒 直射⽇光下で検証 34 ThermalState が変化する要因 結果
  20. © all rights reserved Luup, Inc. ThermalState の変化にかかった時間 • Nominal

    → Fair :40秒 • Fair → Serious :85秒 • Serious → Critical :115秒 • Critical → ⾼温注意警告:236秒 直射⽇光下で検証 35 ThermalState が変化する要因 結果
  21. © all rights reserved Luup, Inc. ThermalState の変化にかかった時間 • Nominal

    → Fair :35秒 • Fair → Serious :30秒 • Serious → Critical :30秒 直射⽇光 + ⾼負荷で検証 38 結果 ThermalState が変化する要因
  22. © all rights reserved Luup, Inc. 検証まとめ 40 ThermalState が変化する要因

    ThermalState が切り替わるまでの時間 高負荷 直射日光 高負荷 + 直射日光 Nominal → Fair 70秒 40秒 35秒 Fair → Serious 40秒 85秒 30秒 Serious → Critical - 115秒 30秒
  23. © all rights reserved Luup, Inc. LUUP アプリの基本機能 注意喚起 ナビ

    返却 43 車両・ポートの予約 ライド前 ライド直前 ライド中 ライド後 モビリティアプリでの実測データ
  24. © all rights reserved Luup, Inc. 引⽤元: tenki.jp ライド中は スマートフォンホルダーに

    iPhone がセットされる想定 44 モビリティアプリでの実測データ
  25. © all rights reserved Luup, Inc. ライド終了直前に ThermalState をログとして仕込む 注意喚起

    ナビ 返却 45 車両・ポートの予約 ライド前 ライド直前 ライド中 ライド後 モビリティアプリでの実測データ
  26. © all rights reserved Luup, Inc. ライド終了直前に ThermalState をログとして仕込む 注意喚起

    ナビ 返却 46 車両・ポートの予約 ライド前 ライド直前 ライド中 ライド後 モビリティアプリでの実測データ ログ仕込みポイント
  27. © all rights reserved Luup, Inc. ThermalState の割合の推移 (6⽉2⽇) 48

    モビリティアプリでの実測データ 天気 曇り ☁ 最高気温 25.0 ℃ 平均気温 20.1 ℃ 東京の天気 (気象庁発表)
  28. © all rights reserved Luup, Inc. ThermalState の割合の推移 (8⽉31⽇) 49

    モビリティアプリでの実測データ 東京の天気 (気象庁発表) 天気 晴 ☀ 最高気温 36.8 ℃ 平均気温 30.9 ℃
  29. © all rights reserved Luup, Inc. ThermalState の割合の推移 (8⽉31⽇) 50

    モビリティアプリでの実測データ 東京の天気 (気象庁発表) 天気 晴 ☀ 最高気温 36.8 ℃ 平均気温 30.9 ℃
  30. © all rights reserved Luup, Inc. ThermalState の割合の推移 (8⽉31⽇) 51

    日の出 (5:12) 日の入 (18:10) 正午 モビリティアプリでの実測データ 天気 晴 ☀ 最高気温 36.8 ℃ 平均気温 30.9 ℃ 東京の天気 (気象庁発表)
  31. © all rights reserved Luup, Inc. ThermalState の割合の推移 (8⽉31⽇) 52

    日の出 (5:12) 日の入 (18:10) 正午 モビリティアプリでの実測データ 東京の天気 (気象庁発表) 天気 晴 ☀ 最高気温 36.8 ℃ 平均気温 30.9 ℃
  32. © all rights reserved Luup, Inc. • ThermalState には 時間帯・季節の気温変化が明確に反映

    されていた • LUUPアプリでは、内部要因よりも外部気温の影響が大きい ことが示唆された • 特に 猛暑日の正午頃は Serious 以上の割合が急増 し、処理性能低下によってUX に影響した可能性があった 考察 54 モビリティアプリでの実測データ
  33. © all rights reserved Luup, Inc. ThermalState の変化要因ごとの対策が必要 外部要因 直射⽇光や、周囲の気温など、外から与えられる熱

    内部要因 CPUやモニター、バッテリーなど、スマホ⾃⾝の動作による発熱 56 → パフォーマンスを落とす → 涼しいところで使う (ように 促す) アプリが取れる対策
  34. © all rights reserved Luup, Inc. 57 パフォーマンスを落とす⽬安 ThermalState 開発者がやった方がいいこと

    (例) ポイント Fair - バックグラウンド処理やプリフェッチを控える ユーザー体験はそのまま、裏方 の処理を減らす Serious - ネットワークやBluetoothなどのI/O操作を削減 - 位置情報の精度要求レベルを下げる - FPSを下げる・アニメーション簡易化 ユーザー体験を少し落としてでも 熱を抑える Critical - ユーザーインタラクションに必要な最小限の機能に 抑える アプリが「落ちない」ことを最優先 アプリが取れる対策
  35. © all rights reserved Luup, Inc. Thermal State のデバッグ fair,

    serious, critical の状態を再現可能 58 アプリが取れる対策
  36. © all rights reserved Luup, Inc. 59 詳しくは、パフォーマンスの最適化に関するWWDCセッ ションやドキュメントも参照ください! WWDC’19:

    不利なネットワークと温度条件に向けて設計する https://developer.apple.com/jp/videos/play/wwdc2019/422/ WWDC’22: 電⼒の制限:バッテリー消費の改善 https://developer.apple.com/jp/videos/play/wwdc2022/10083/ ドキュメント: エネルギー効率とユーザーエクスペリエンス https://developer.apple.com/library/archive/documentation/Performance/Con ceptual/EnergyGuide-iOS/index.html#//apple_ref/doc/uid/TP40015243 アプリが取れる対策
  37. © all rights reserved Luup, Inc. • iPhoneが熱くなるとパフォーマンスが低下し、ユーザー体験(UX)が悪化する • ThermalState

    で、端末の発熱を4段階で検知できる • 検証の結果、直射⽇光下 + ⾼負荷環境だと、2分たらずでcritical(著しい発熱)状態に • 屋外で使われるアプリ (モビリティアプリ:LUUP) では、季節‧天候‧時間帯ごとに発 熱の度合いが⼤きく変わる • システムのパフォーマンスの調整や、使⽤環境の変更を促すことでスマホの熱中症を 予防しよう まとめ 60 iPhoneの「熱中症」について知っておきたいこと
  38. © all rights reserved Luup, Inc. 61 おまけ:サクッと ThermalState を確認する⽅法

    SensorsCatalog アプリ(約3MB) をインストールして、あなたのiPhoneの ThermalState を確認しましょう! アプリが取れる対策
  39. © all rights reserved Luup, Inc. 参考 - iPhoneやiPadが⾼温または低温になりすぎた場合, https://support.apple.com/ja-jp/118431

    - Respond to Thermal State Changes, https://developer.apple.com/library/archive/documentation/Performance/Conceptual/p ower_efficiency_guidelines_osx/RespondToThermalStateChanges.html#//apple_ref/doc/ uid/TP40013929-CH25-SW1 - Test under adverse device conditions (iOS), https://help.apple.com/xcode/mac/current/#/dev308429d42 - WWDC19-422: Designing for Adverse Network and Temperature Conditions, https://developer.apple.com/videos/play/wwdc2019/422/ 62
  40. Luup, Inc. - Confidential and Proprietary 66 2020.04~ • 新卒⼊社

    • iOSエンジニア 2023.11~ • iOSエンジニア tsuboyan (⼤坪 敦) 株式会社Luup, iOS エンジニア 66