SlideShare une entreprise Scribd logo
1  sur  28
Télécharger pour lire hors ligne
HealthKitで日別のデー
タを一度に取得する
@yimajo
potatotips 23
<「BMI指数が25以上の方」はご応募をご遠慮頂いております>
自己紹介
一人で株式会社キュリオシティソフトウェアをやっています
今城 善矩
https://stargzr.net
STARGAZER
GitHub,
Qiita,
SlideShare,
Stack Overflowの
★数的なものを全部
合計します
https://stargzr.net
インタビューされてもいいよという人
を探しています
本題
日毎のデータを取得したい
• だいたい右図のようなものを
やりたがるはず
• 期間を決めてデータを取得で
きるが日別にクエリを作成す
るのは面倒
• データを一気に取得して日毎
に取り出せる
具体的な説明が少なく
て理解に時間がかかる
https://github.com/yimajo/
HealthKitStatisticsCollectionDemo
func requestWeakStatisticsCollection() {
// 今から一週間前
let calendar: NSCalendar = NSCalendar.currentCalendar()
let day = -7
let now = NSDate()
let today = calendar.startOfDayForDate(now)
// endは今でいい
let endDate = now
// startはdayを今日から加算した
let startDate = calendar.dateByAddingUnit([.Day], value: day, toDate: today, options: NSCalendarOptions.WrapComponents)!
// 今日の始まりの0時からアンカーにしたい
let anchorDate = today
let intervalComponents = NSDateComponents()
intervalComponents.day = 1
let predicate = HKQuery.predicateForSamplesWithStartDate(startDate, endDate: endDate, options: [.None])
let quantityType = HKObjectType.quantityTypeForIdentifier(HKQuantityTypeIdentifierStepCount)!
let statsOptions: HKStatisticsOptions = [HKStatisticsOptions.SeparateBySource, HKStatisticsOptions.CumulativeSum]
let query = HKStatisticsCollectionQuery(quantityType: quantityType, quantitySamplePredicate: predicate, options: statsOptions,
anchorDate: anchorDate, intervalComponents: intervalComponents)
query.initialResultsHandler = { [unowned self] (query, result, error) in
guard let result = result where error == nil else{
return
}
dispatch_async(dispatch_get_main_queue(), { () -> Void in
self.statisticsCollection = result
self.tableView.reloadData()
})
}
healthStore.executeQuery(query)
}
前提知識
HKStatistics
HKStatistics
Δt
start end
sum, min, max, average
HKStatistics
HKStatistics
Δt
start end
sum, min, max, average
歩数 歩数歩数
歩数 歩数
HKStatistics
HKStatistics
Δt
start end
sum, min, max, average
歩数 歩数歩数
歩数 歩数
 Watch
iPhone
HKStatisticsは決められた範
囲のデータを利用しやすく管
理している
これをCollectionとして
連続したデータで一度に
取り出したい
例:22日から現在まで歩数を一度に取得する設定
今24日23日22日
例:22日から現在まで歩数を一度に取得する設定
今24日23日22日
startDateを0時
例:22日から現在まで歩数を一度に取得する設定
今24日23日22日
startDateを0時 endDate
例:22日から現在まで歩数を一度に取得する設定
今24日23日22日
startDateを0時 endDate
Δtを1日
例:22日から現在まで歩数を一度に取得する設定
今24日23日22日
startDateを0時 endDate
Δtを1日
HKStatistics
例:22日から現在まで歩数を一度に取得する設定
今24日23日22日
startDateを0時 endDate
Δtを1日
anchorDateを0時にセット
HKStatistics
例:22日から現在まで歩数を一度に取得する設定
今24日23日22日
startDateを0時 endDate
Δtを1日
anchorDateを0時にセット
HKStatistics
⚓
例:22日から現在まで歩数を一度に取得する設定
HKStatisticsHKStatistics HKStatistics
今24日23日22日
startDateを0時 endDate
Δtを1日
anchorDateを0時にセット
HKStatistics
⚓
例:22日から現在まで歩数を一度に取得する設定
HKStatisticsHKStatistics HKStatistics
今24日23日22日
sum
2,084歩
sum
4,376歩
sum
444歩
startDateを0時 endDate
Δtを1日
anchorDateを0時にセット
HKStatistics
⚓
補足
anchorDateについて
• NSDateクラスだがΔtを一日
にした場合は0:00から23:59
の間の何時何分か分かればい
い
• 例では22日0:00にしたが23
日0:00でも結果は同じ
⚓
ソース別重複データ
• statistics.sumQuantity()は既に
重複データを省いている=同時刻
の別ソースのデータは合計してい
ない
• statistics.sumQuantityForSour
ce(source:)ではソース別のデー
タが取れる
• .SeparateBySourceはソース別
でデータを取得したいかどうかを
クエリに渡すオプション
歩数 歩数歩数
歩数 歩数
 Watch
iPhone
参考
• http://azu.github.io/slide/tech_ios/
• https://developer.apple.com/videos/play/
wwdc2014-203/
• https://developer.apple.com/library/
prerelease/ios/documentation/HealthKit/
Reference/HealthKit_Framework/index.html

Contenu connexe

Tendances

「関心の分離」と「疎結合」 ソフトウェアアーキテクチャのひとかけら
「関心の分離」と「疎結合」   ソフトウェアアーキテクチャのひとかけら「関心の分離」と「疎結合」   ソフトウェアアーキテクチャのひとかけら
「関心の分離」と「疎結合」 ソフトウェアアーキテクチャのひとかけら
Atsushi Nakamura
 
CTFはとんでもないものを 盗んでいきました。私の時間です…
CTFはとんでもないものを 盗んでいきました。私の時間です…CTFはとんでもないものを 盗んでいきました。私の時間です…
CTFはとんでもないものを 盗んでいきました。私の時間です…
Hiromu Yakura
 

Tendances (20)

開発速度が速い #とは(LayerX社内資料)
開発速度が速い #とは(LayerX社内資料)開発速度が速い #とは(LayerX社内資料)
開発速度が速い #とは(LayerX社内資料)
 
フロー効率性とリソース効率性について #xpjug
フロー効率性とリソース効率性について #xpjugフロー効率性とリソース効率性について #xpjug
フロー効率性とリソース効率性について #xpjug
 
エンジニアの個人ブランディングと技術組織
エンジニアの個人ブランディングと技術組織エンジニアの個人ブランディングと技術組織
エンジニアの個人ブランディングと技術組織
 
Swagger ではない OpenAPI Specification 3.0 による API サーバー開発
Swagger ではない OpenAPI Specification 3.0 による API サーバー開発Swagger ではない OpenAPI Specification 3.0 による API サーバー開発
Swagger ではない OpenAPI Specification 3.0 による API サーバー開発
 
「関心の分離」と「疎結合」 ソフトウェアアーキテクチャのひとかけら
「関心の分離」と「疎結合」   ソフトウェアアーキテクチャのひとかけら「関心の分離」と「疎結合」   ソフトウェアアーキテクチャのひとかけら
「関心の分離」と「疎結合」 ソフトウェアアーキテクチャのひとかけら
 
データ履歴管理のためのテンポラルデータモデルとReladomoの紹介 #jjug_ccc #ccc_g3
データ履歴管理のためのテンポラルデータモデルとReladomoの紹介 #jjug_ccc #ccc_g3 データ履歴管理のためのテンポラルデータモデルとReladomoの紹介 #jjug_ccc #ccc_g3
データ履歴管理のためのテンポラルデータモデルとReladomoの紹介 #jjug_ccc #ccc_g3
 
それはYAGNIか? それとも思考停止か?
それはYAGNIか? それとも思考停止か?それはYAGNIか? それとも思考停止か?
それはYAGNIか? それとも思考停止か?
 
新たなgitのブランチモデル「Git Feature Flow」!Git Flow,Git Hub Flow,Git Lab Flowを超えれるか?
新たなgitのブランチモデル「Git Feature Flow」!Git Flow,Git Hub Flow,Git Lab Flowを超えれるか?新たなgitのブランチモデル「Git Feature Flow」!Git Flow,Git Hub Flow,Git Lab Flowを超えれるか?
新たなgitのブランチモデル「Git Feature Flow」!Git Flow,Git Hub Flow,Git Lab Flowを超えれるか?
 
これからのネイティブアプリにおけるOpenID Connectの活用
これからのネイティブアプリにおけるOpenID Connectの活用これからのネイティブアプリにおけるOpenID Connectの活用
これからのネイティブアプリにおけるOpenID Connectの活用
 
Flutter移行の苦労と、乗り越えた先に得られたもの
Flutter移行の苦労と、乗り越えた先に得られたものFlutter移行の苦労と、乗り越えた先に得られたもの
Flutter移行の苦労と、乗り越えた先に得られたもの
 
オンプレML基盤on Kubernetes 〜Yahoo! JAPAN AIPF〜
オンプレML基盤on Kubernetes 〜Yahoo! JAPAN AIPF〜オンプレML基盤on Kubernetes 〜Yahoo! JAPAN AIPF〜
オンプレML基盤on Kubernetes 〜Yahoo! JAPAN AIPF〜
 
例外設計における大罪
例外設計における大罪例外設計における大罪
例外設計における大罪
 
RSA暗号運用でやってはいけない n のこと #ssmjp
RSA暗号運用でやってはいけない n のこと #ssmjpRSA暗号運用でやってはいけない n のこと #ssmjp
RSA暗号運用でやってはいけない n のこと #ssmjp
 
MCC CTF講習会 pwn編
MCC CTF講習会 pwn編MCC CTF講習会 pwn編
MCC CTF講習会 pwn編
 
初心者向けCTFのWeb分野の強化法
初心者向けCTFのWeb分野の強化法初心者向けCTFのWeb分野の強化法
初心者向けCTFのWeb分野の強化法
 
PlaySQLAlchemy: SQLAlchemy入門
PlaySQLAlchemy: SQLAlchemy入門PlaySQLAlchemy: SQLAlchemy入門
PlaySQLAlchemy: SQLAlchemy入門
 
CTFはとんでもないものを 盗んでいきました。私の時間です…
CTFはとんでもないものを 盗んでいきました。私の時間です…CTFはとんでもないものを 盗んでいきました。私の時間です…
CTFはとんでもないものを 盗んでいきました。私の時間です…
 
Guide To AGPL
Guide To AGPLGuide To AGPL
Guide To AGPL
 
やはりお前らのMVCは間違っている
やはりお前らのMVCは間違っているやはりお前らのMVCは間違っている
やはりお前らのMVCは間違っている
 
アプリを成長させるためのログ取りとログ解析に必要なこと
アプリを成長させるためのログ取りとログ解析に必要なことアプリを成長させるためのログ取りとログ解析に必要なこと
アプリを成長させるためのログ取りとログ解析に必要なこと
 

En vedette

En vedette (15)

Xcode7時代のアプリ配布
Xcode7時代のアプリ配布Xcode7時代のアプリ配布
Xcode7時代のアプリ配布
 
Swift Scriptingのすゝめ
Swift ScriptingのすゝめSwift Scriptingのすゝめ
Swift Scriptingのすゝめ
 
View Monitoring Tips
View Monitoring TipsView Monitoring Tips
View Monitoring Tips
 
watchOS2 tips
watchOS2 tipswatchOS2 tips
watchOS2 tips
 
tvOSネイティブアプリを作る
tvOSネイティブアプリを作るtvOSネイティブアプリを作る
tvOSネイティブアプリを作る
 
Androidでライブラリを作る
Androidでライブラリを作るAndroidでライブラリを作る
Androidでライブラリを作る
 
【Potatotips #23】手軽にHTTPでJSONにアクセスできる環境を用意する
【Potatotips #23】手軽にHTTPでJSONにアクセスできる環境を用意する【Potatotips #23】手軽にHTTPでJSONにアクセスできる環境を用意する
【Potatotips #23】手軽にHTTPでJSONにアクセスできる環境を用意する
 
隕石という名のスクリーンショットをSlackに落下させる話
隕石という名のスクリーンショットをSlackに落下させる話隕石という名のスクリーンショットをSlackに落下させる話
隕石という名のスクリーンショットをSlackに落下させる話
 
Type Safe Assets Handling in Swift
Type Safe Assets Handling in SwiftType Safe Assets Handling in Swift
Type Safe Assets Handling in Swift
 
Objective-C Generics
Objective-C GenericsObjective-C Generics
Objective-C Generics
 
My first tvOS
My first tvOSMy first tvOS
My first tvOS
 
個人で開発したアプリがベスト新着に選ばれた話
個人で開発したアプリがベスト新着に選ばれた話個人で開発したアプリがベスト新着に選ばれた話
個人で開発したアプリがベスト新着に選ばれた話
 
Caffeでお手軽本格ディープラーニングアプリ @potatotips
Caffeでお手軽本格ディープラーニングアプリ @potatotipsCaffeでお手軽本格ディープラーニングアプリ @potatotips
Caffeでお手軽本格ディープラーニングアプリ @potatotips
 
Introducing Cardio
Introducing CardioIntroducing Cardio
Introducing Cardio
 
Apple Watch 間通信
Apple Watch 間通信Apple Watch 間通信
Apple Watch 間通信
 

Similaire à HealthKitで日別のデータを一度に取得する

Similaire à HealthKitで日別のデータを一度に取得する (6)

BigQueryで集計するシステムを作って分かったKPI集計ツール作成
BigQueryで集計するシステムを作って分かったKPI集計ツール作成BigQueryで集計するシステムを作って分かったKPI集計ツール作成
BigQueryで集計するシステムを作って分かったKPI集計ツール作成
 
Pydata tokyo-24-hootku
Pydata tokyo-24-hootkuPydata tokyo-24-hootku
Pydata tokyo-24-hootku
 
Get started with future C# .Net development with Docker
Get started with future C# .Net development with DockerGet started with future C# .Net development with Docker
Get started with future C# .Net development with Docker
 
Github時代のgitのはなし
Github時代のgitのはなしGithub時代のgitのはなし
Github時代のgitのはなし
 
ギークを目指すエンジニャーの 情報収集方法 mohikan Slack
ギークを目指すエンジニャーの 情報収集方法 mohikan Slackギークを目指すエンジニャーの 情報収集方法 mohikan Slack
ギークを目指すエンジニャーの 情報収集方法 mohikan Slack
 
GoでシュッとWebスクレイピングする
GoでシュッとWebスクレイピングするGoでシュッとWebスクレイピングする
GoでシュッとWebスクレイピングする
 

Plus de 今城 善矩

Plus de 今城 善矩 (13)

Stargazer Meetup1
Stargazer Meetup1Stargazer Meetup1
Stargazer Meetup1
 
とにかく明るいCore Spotlight
とにかく明るいCore Spotlightとにかく明るいCore Spotlight
とにかく明るいCore Spotlight
 
SansanのEightアプリでRealmを導入した件
SansanのEightアプリでRealmを導入した件SansanのEightアプリでRealmを導入した件
SansanのEightアプリでRealmを導入した件
 
BaseViewControllerは作りたくない
BaseViewControllerは作りたくないBaseViewControllerは作りたくない
BaseViewControllerは作りたくない
 
まだSwiftで消耗してるの?
まだSwiftで消耗してるの?まだSwiftで消耗してるの?
まだSwiftで消耗してるの?
 
小学生でも分かった気になるiOS8のSize Class
小学生でも分かった気になるiOS8のSize Class小学生でも分かった気になるiOS8のSize Class
小学生でも分かった気になるiOS8のSize Class
 
iOSアプリ開発の現場で訊いてきたtips
iOSアプリ開発の現場で訊いてきたtipsiOSアプリ開発の現場で訊いてきたtips
iOSアプリ開発の現場で訊いてきたtips
 
Swiftだめ自慢Beta5
Swiftだめ自慢Beta5Swiftだめ自慢Beta5
Swiftだめ自慢Beta5
 
WebApiを利用する際のOptional Bindingやクロージャを駆使したSwiftらしいコードの書き方
WebApiを利用する際のOptional Bindingやクロージャを駆使したSwiftらしいコードの書き方WebApiを利用する際のOptional Bindingやクロージャを駆使したSwiftらしいコードの書き方
WebApiを利用する際のOptional Bindingやクロージャを駆使したSwiftらしいコードの書き方
 
やはりお前らのCore Dataの使い方も間違っている
やはりお前らのCore Dataの使い方も間違っているやはりお前らのCore Dataの使い方も間違っている
やはりお前らのCore Dataの使い方も間違っている
 
OHHTTPStubsを使ったiOSアプリ開発
OHHTTPStubsを使ったiOSアプリ開発OHHTTPStubsを使ったiOSアプリ開発
OHHTTPStubsを使ったiOSアプリ開発
 
ジョブズも成仏するTips考えたったwww
ジョブズも成仏するTips考えたったwwwジョブズも成仏するTips考えたったwww
ジョブズも成仏するTips考えたったwww
 
やはりお前らのiOS7対応は間違っている
やはりお前らのiOS7対応は間違っているやはりお前らのiOS7対応は間違っている
やはりお前らのiOS7対応は間違っている
 

Dernier

Dernier (10)

論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
 
Utilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native IntegrationsUtilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native Integrations
 
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
 
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
 
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。
 
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
 
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
 
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
 
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
 
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
 

HealthKitで日別のデータを一度に取得する