Copyright (C) 2018 DeNA Co.,Ltd. All Rights Reserved.
Copyright (C) 2018 DeNA Co.,Ltd. All Rights Reserved.
DeSCヘルスケアにおけるGo
活用事例の紹介
DeNA.go #2
July 18, 2019
栗田佳祐
DeSC Healthcare Inc. && DeNA Life Science Inc.
1
Slide 2
Slide 2 text
Copyright (C) 2018 DeNA Co.,Ltd. All Rights Reserved.
自己紹介
■ 栗田佳祐
■ サーバーサイドエンジニア
■ 2012〜2015:ブラウザゲーム
■ 2015〜現在:DeSCヘルスケア
⁃ 2015.10-2017.10:KenCoM (後述) のサービス開発
⁃ 現在:利用することでユーザーの健康を促進する新規サービスを開発中
■ @kurikei
2
Slide 3
Slide 3 text
Copyright (C) 2018 DeNA Co.,Ltd. All Rights Reserved.
アジェンダ
■ 自己紹介
■ ヘルスケア事業部の紹介
⁃ ミッション
⁃ サービス
■ アーキテクチャとディレクトリ構成
■ レイヤードアーキテクチャとDIの利用ケースの紹介
■ 暗号化の手法と透過的に行うための仕組みの紹介
3
Slide 4
Slide 4 text
Copyright (C) 2018 DeNA Co.,Ltd. All Rights Reserved.
ヘルスケア事業部のミッション
4
https://healthcare.dena.com/
Slide 5
Slide 5 text
Copyright (C) 2018 DeNA Co.,Ltd. All Rights Reserved.
ヘルスケアのサービス紹介
5
Slide 6
Slide 6 text
Copyright (C) 2018 DeNA Co.,Ltd. All Rights Reserved.
技術概要
■ これらのサービスを利用している前提でお話します
⁃ Google Cloud Platform
• Google App Engine(GAE)
⁃ Go 1.11
• Cloud Firestore
• Cloud Functions
⁃ Firestoreの作成/更新イベントをトリガーして非同期処理を行う
⁃ CircleCI
⁃ OpenAPI 3
6
Copyright (C) 2018 DeNA Co.,Ltd. All Rights Reserved.
■ レイヤードアーキテクチャとDIの利用ケースの紹介
8
Slide 9
Slide 9 text
Copyright (C) 2018 DeNA Co.,Ltd. All Rights Reserved.
domainでインターフェイスを定義し、infrastructure層の具体的実装をDI
9
domainではインターフェイスを定義
・infrastructure/firestore/user_repository.go
・di.go
・domain/user/repository.go
infrastructureでは具体的な処理を記載
Slide 10
Slide 10 text
Copyright (C) 2018 DeNA Co.,Ltd. All Rights Reserved.
変更が見込まれるライブラリもDIで差し替え可能な状態にしておく
■ GoogleAppEngine/Go 1.12では appengine パッケージが利用不可になる
⁃ 代替コストの大きいものは引き続きappengineパッケージを利用しつつも、いつでも差し替えられる準
備はしておく
10
抽象層を定義
具体的な実装(変更の可能性のあるパッケージに依存)
DI を行う。具体的な実装が変わる場合はここで差し替える
Slide 11
Slide 11 text
Copyright (C) 2018 DeNA Co.,Ltd. All Rights Reserved.
■ 暗号化の手法と透過的に行うための仕組みの紹介
11
Slide 12
Slide 12 text
Copyright (C) 2018 DeNA Co.,Ltd. All Rights Reserved.
レイヤードアーキテクチャ(+DI)を採用するメリット
■ レイヤードアーキテクチャを採用することでメリットは大きい
⁃ 関心事が分離できる
⁃ レイヤーごとに変更のライフサイクルは異なる
• domain層はしばしば機能要件によって変わる
• infrastructure層は外部要因によって変更を余儀なくされる
⁃ あるレイヤーの変更時に別のレイヤーの変更がいらなくなる
12