Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

B2B2Cなヘルスケアサービスの作り方

3,447 views

Published on

DeNA Techcon 2016で発表した資料です。

Published in: Software

B2B2Cなヘルスケアサービスの作り方

  1. 1. Copyright (C) DeNA Co.,Ltd. All Rights Reserved. 2016/01/29 Tomohiro Mitsumune DeSC Healthcare, Inc. B2B2Cなヘルスケ アサービスの作り方 1
  2. 2. Copyright (C) DeNA Co.,Ltd. All Rights Reserved. アジェンダ ⁃ DeSCヘルスケアとは? ⁃ Webサービス ⁃ ネイティブアプリ 2
  3. 3. Copyright (C) DeNA Co.,Ltd. All Rights Reserved. 自己紹介 ⁃ @t_mitz ⁃ DeSCヘルスケア株式会社 サービス企画開発部 ⁃ 前職では新規サービス立ち上げや開発チームのマネージメントに従事 ⁃ DeNAではマンガボックスやNBPFの立ち上げに参加 ⁃ サーバーサイドエンジニアだったけど最近はiOSとAndroidがメイン ⁃ 齢35にして人生初のフルマラソン完走しました 3
  4. 4. Copyright (C) DeNA Co.,Ltd. All Rights Reserved. DeSCヘルスケア? 4
  5. 5. Copyright (C) DeNA Co.,Ltd. All Rights Reserved. DeSCヘルスケア 5
  6. 6. Copyright (C) DeNA Co.,Ltd. All Rights Reserved. KenCoM 6
  7. 7. Copyright (C) DeNA Co.,Ltd. All Rights Reserved. Webサービス 7
  8. 8. Copyright (C) DeNA Co.,Ltd. All Rights Reserved. やったこと ⁃ アプリケーションの一部の設計・実装を担当 ⁃ ポータルサイト部分 ⁃ CI / CD ⁃ 社内でRailsベースのCI/CD環境が無かった ⁃ 環境の制限でSaaSが利用できないため仕組みを自作 ⁃ コードレビューおじさん ⁃ コンポーネント間でのデータ連係があるので設計を重点的に ⁃ Ruby書いた経験が少ない人もいたのでサポート(厳しめに) 8
  9. 9. Copyright (C) DeNA Co.,Ltd. All Rights Reserved. 構成 ⁃ ポータルサイト ⁃ Rails4 ⁃ データAPI ⁃ Rails4 ⁃ grape 9
  10. 10. Copyright (C) DeNA Co.,Ltd. All Rights Reserved. 10 システム全体
  11. 11. Copyright (C) DeNA Co.,Ltd. All Rights Reserved. セキュリティ ⁃ 要件が非常に厳しい ⁃ 厚生労働省が定めているセキュリティガイドラインに準拠 ⁃ データヘルス計画における健康情報の取扱い ⁃ 匿名データの作成・提供に係わるガイドライン ⁃ 医療情報システムの安全管理に関するガイドライン 11
  12. 12. Copyright (C) DeNA Co.,Ltd. All Rights Reserved. セキュリティ対策 12
  13. 13. Copyright (C) DeNA Co.,Ltd. All Rights Reserved. データベース構成 ⁃ 個人情報とそうでないデータでDBを分割 ⁃ セキュリティ対策のため秘匿性が高い個人情報はAPI経由で取得 ⁃ データの取得に必要なtokenはJWTで生成しAPIサーバーで検証 ⁃ MySQLもSSL接続 13
  14. 14. Copyright (C) DeNA Co.,Ltd. All Rights Reserved. データベース暗号化 ⁃ 個人情報に該当するデータは全て暗号化 ⁃ symmetric-encryptionというgemを利用 ⁃ http://rocketjob.github.io/symmetric-encryption/ ⁃ Railsから透過的にOpenSSLを使ったデータ暗号化 ⁃ 環境(dev, test, prod)ごとに異なる設定 ⁃ セキュリティ強度を高めるため暗号化に利用する を定期的に更新 - の生成や やIVのマスキング処理をするコマンドラインツールは gemを自作(非公開) 14
  15. 15. Copyright (C) DeNA Co.,Ltd. All Rights Reserved. CI / CD 15
  16. 16. Copyright (C) DeNA Co.,Ltd. All Rights Reserved. ChatOPS IRC + Jenkins + Github Enterprise + sinatra + capistrano 16
  17. 17. Copyright (C) DeNA Co.,Ltd. All Rights Reserved. Q. なんでSaaSを使っていないの? A. オンプレ環境で利用できるSaaSが無かった(当時) ⁃ またAWSやAzureはセキュリティポリシー的に利用不可 17
  18. 18. Copyright (C) DeNA Co.,Ltd. All Rights Reserved. Q. なんでSlackじゃなくてIRCなの? A. Slackのアクセス元IPアドレスが固定できないため通 信元の制限がかけられなかったから ⁃ インバウンドな通信を許可するなら経路は限定 ⁃ SlackはインフラがAWSなので動的IP ⁃ ダメ元でサポートにメールしてみたけどやっぱりダメでした ⁃ 将来的に固定IPにできるようにしたいけど今は無理、という回答 18
  19. 19. Copyright (C) DeNA Co.,Ltd. All Rights Reserved. ネイティブアプリ 19
  20. 20. Copyright (C) DeNA Co.,Ltd. All Rights Reserved. はじめに ⁃ やったこと ⁃ iOSアプリ開発 ⁃ Androidアプリ開発(少しだけ) ⁃ はなすこと ⁃ 主にiOS ⁃ 使っているライブラリの紹介 ⁃ 開発していて気づいたこと・こまったこと 20
  21. 21. Copyright (C) DeNA Co.,Ltd. All Rights Reserved. ネイティブアプリの要件 ⁃ あくまでメインはWebアプリ ⁃ ネイティブアプリはアドオン的な立ち位置 ⁃ 導入先の健保でスマホ未所持な人が利用不可 ⁃ 営業先が限定されてしまい機会損失 ⁃ ネイティブアプリに期待されること ⁃ プッシュ通知で有資格者に健保からのお知らせ ⁃ バイタルデータを活用した機能 21
  22. 22. Copyright (C) DeNA Co.,Ltd. All Rights Reserved. プッシュ通知 22
  23. 23. Copyright (C) DeNA Co.,Ltd. All Rights Reserved. Parse 23
  24. 24. Copyright (C) DeNA Co.,Ltd. All Rights Reserved. Parse ⁃ プッシュ通知の基盤として利用 ⁃ 理由 ⁃ コストに対する費用対効果が非常に高い ⁃ 開発コスト・ランニングコスト ⁃ 100万ユーザ/月までは無料 24
  25. 25. Copyright (C) DeNA Co.,Ltd. All Rights Reserved. Parseのメリット・デメリット ⁃ メリット ⁃ 組み込みが簡単 ⁃ 管理画面の素晴らしい出来 ⁃ 豊富なAPI ⁃ デメリット ⁃ 複雑なことはできないためビジネスロジックに合わないとつらい ⁃ 簡単に使えすぎてオペミスの発生確率が高そう 25
  26. 26. Copyright (C) DeNA Co.,Ltd. All Rights Reserved. 突然のshutdown 26
  27. 27. Copyright (C) DeNA Co.,Ltd. All Rights Reserved. バイタルデータの活用 27
  28. 28. Copyright (C) DeNA Co.,Ltd. All Rights Reserved. HealthKit ⁃ ヘルスケアに関するさまざまな項目を管理 ⁃ iOS端末がヘルスケアデータの入れ物になるイメージ ⁃ 自動取得できるデータもあるが大半は別途入力が必要 ⁃ HKStatisticsCollectionQueryを利用 ⁃ ある期間内で指定したインターバルでデータ集計するAPI ⁃ 歩数グラフ作成に使っている 28
  29. 29. Copyright (C) DeNA Co.,Ltd. All Rights Reserved. HealthKitでこまったこと ⁃ エラーが発生したときのデバッグ ⁃ compltionHandlerはprivateスレッドでバックグラウンド動作 ⁃ closureのclosureとかで動いていたりするのでCrashlyticsで追う のつらい。。。 ⁃ 対応方法 ⁃ 無駄にメモリを使わないようにいろんなところを最適化 29
  30. 30. Copyright (C) DeNA Co.,Ltd. All Rights Reserved. iOS開発あれこれ 30
  31. 31. Copyright (C) DeNA Co.,Ltd. All Rights Reserved. アプリ審査 ⁃ HealthKitの利用 ⁃ 利用用途をアプリ内で明記、が理由で数回リジェクト ⁃ レビュワーが変わる度に指摘 ⁃ 細かい指摘をされるので審査依頼時に補足メッセージを添えると良い 31
  32. 32. Copyright (C) DeNA Co.,Ltd. All Rights Reserved. Swiftのバージョンアップ ⁃ Swift2.0で動いています ⁃ 1.1時代に開発スタート ⁃ 開発始めてすぐ1.2が出る ⁃ 実装自体もまだ小さかったのでMigrationはたいしたことなかった ⁃ WWDC2015でSwift2 + Xcode7発表 ⁃ CocoaのAPIまわりはそれほど壊れなかった ⁃ Cocoapodでインストールしてるライブラリが大変 32
  33. 33. Copyright (C) DeNA Co.,Ltd. All Rights Reserved. 利用しているライブラリ ⁃ Alamofire ⁃ AlamofireImage ⁃ Realm ⁃ SwiftyJSON ⁃ Charts 33
  34. 34. Copyright (C) DeNA Co.,Ltd. All Rights Reserved. Alamofire ⁃ 1.3 → 2.0.X → 3.1.0 とバージョンアップ ⁃ 2.0からSwift 2に対応 ⁃ 下位互換性の無いインターフェース変更が入った ⁃ 3.0はresponse serializationの改善をするためのリリース ⁃ 2.0をベースによりシンプルに ⁃ NSURLSessionを自前のものに差し替えたりできる ⁃ サーバーAPIをcallする処理が多かったの涙目で修正 34
  35. 35. Copyright (C) DeNA Co.,Ltd. All Rights Reserved. AlamofireImage ⁃ Webから画像をダウンロード・キャッシュ ⁃ SDWebImageの代替ライブラリ ⁃ Alamofireのアドオンとして動作 Q. なんでSDWebImageを使ってないのか? A. Pure Swiftで書かれたライブラリで統一したかったから ⁃ 画像fetchするベンチマーク結果はほぼ変わらなかった ⁃ Kingfisherも候補だったがAlamofireを導入済だったのでこちらに 35
  36. 36. Copyright (C) DeNA Co.,Ltd. All Rights Reserved. Realm ⁃ 0.95でConfigurationまわりの変更 ⁃ Realm Javaと似た感じに ⁃ 0.96でNULLサポート ⁃ try catchのエラーハンドリングをやらないとエラー ⁃ エラーハンドリング対応のマイグレーションがめんどくさかった ⁃ Realmインスタンスを生成するところ全てで書く必要がある 36
  37. 37. Copyright (C) DeNA Co.,Ltd. All Rights Reserved. Charts ⁃ MPAndroidChartをiOS向けにportされたグラフライブラリ ⁃ iOSとAndroidで同じグラフが作れてべんり ⁃ githubではios-chartsという名前 ⁃ 問題点 ⁃ APIインターフェースの一部に互換性がない ⁃ 公式ドキュメントがAndroidのみ ⁃ ソースコードがドキュメント 😇 37
  38. 38. Copyright (C) DeNA Co.,Ltd. All Rights Reserved. 38
  39. 39. Copyright (C) DeNA Co.,Ltd. All Rights Reserved. まとめ 39
  40. 40. Copyright (C) DeNA Co.,Ltd. All Rights Reserved. まとめ ⁃ Webアプリ ⁃ セキュリティ対応は大変 ⁃ セキュリティ要件を満たしてくれるgemあるので活用 ⁃ ネイティブアプリ ⁃ 巨人の肩の上に立つ ⁃ Swiftライブラリは最新版を使いましょう 40
  41. 41. Copyright (C) DeNA Co.,Ltd. All Rights Reserved. ご静聴ありがとうございました 41

×