Slide 1

Slide 1 text

Copyright © DeNA Co., Ltd. All Rights Reserved. 新規サービスでGo, GAEを使ってみた話 とその振り返り 1

Slide 2

Slide 2 text

Copyright © DeNA Co., Ltd. All Rights Reserved. 自己紹介 2 ・基本情報 - DeSCヘルスケア - 新卒2年目 - 鶴田拓也(つるだたくや) ・普段してること - カミナル 開発・運用 - サーバサイドエンジニア

Slide 3

Slide 3 text

Copyright © DeNA Co., Ltd. All Rights Reserved. 今日話すこと 3 ・DeSCヘルスケアのサービス ・新規で作ったプロダクト ・こんな感じで作りました - Google App Engine(GAE) - Deploy - QA環境の構築 - Analytics - DataStore - BigQuery - DataStudio ・失敗したこと・苦戦したこと

Slide 4

Slide 4 text

Copyright © DeNA Co., Ltd. All Rights Reserved. DeSCヘルスケアのサービス

Slide 5

Slide 5 text

Copyright © DeNA Co., Ltd. All Rights Reserved. DeSCヘルスケアのサービス KenCoM さんぽジスタ

Slide 6

Slide 6 text

Copyright © DeNA Co., Ltd. All Rights Reserved. DeSCヘルスケアのサービス - 利用者の健診結果 - 身体データの記録(歩数・体重・血圧 ・血糖値) - 興味関心に沿った健康情報のレコメ ンデーション - ウォーキングイベント開催 - 活動に応じてポイント取得 KenCoM

Slide 7

Slide 7 text

Copyright © DeNA Co., Ltd. All Rights Reserved. DeSCヘルスケアのサービス - 歩数管理 - 1対1のデイリー歩数バトル - 健保内での月間歩数ランキング - KenCoMポイントの獲得 さんぽジスタ

Slide 8

Slide 8 text

Copyright © DeNA Co., Ltd. All Rights Reserved. 今回作ったサービス

Slide 9

Slide 9 text

Copyright © DeNA Co., Ltd. All Rights Reserved. カミナルとは 9 ・歩いたら - 1日8000歩以上 - 週に4日以上 ・ご褒美 - コーヒー - アイス ・2017/10 ~ - 開発開始 ・2018/03 ~ - トライアルスタート

Slide 10

Slide 10 text

Copyright © DeNA Co., Ltd. All Rights Reserved. こんな感じで作りました

Slide 11

Slide 11 text

Copyright © DeNA Co., Ltd. All Rights Reserved. こんな感じで作りました

Slide 12

Slide 12 text

Copyright © DeNA Co., Ltd. All Rights Reserved. こんな感じで作りました ・GAE + Go + Datastore ・net/http + GAE libraly ・gorilla/mux, urfave/negroni, pkg/error ….

Slide 13

Slide 13 text

Copyright © DeNA Co., Ltd. All Rights Reserved. こんな感じで作りました 13 ・GAE - サクッと作ってサクッと潰す - 社内の知見を増やす - 使ってみたかった ・Go - Standard EnvironmentでRails使えない - Go使ってみたかった

Slide 14

Slide 14 text

Copyright © DeNA Co., Ltd. All Rights Reserved. こんな感じで作りました Deployment

Slide 15

Slide 15 text

Copyright © DeNA Co., Ltd. All Rights Reserved. ~Deploy~ 15 test deploy webhook push

Slide 16

Slide 16 text

Copyright © DeNA Co., Ltd. All Rights Reserved. ~Deploy~ 16 f/branch_a f/branch_b f/branc_c QA push push push

Slide 17

Slide 17 text

Copyright © DeNA Co., Ltd. All Rights Reserved. ~Deploy~ 17 f/branch_a f/branch_b f/branch_c version: version: version: QA https://f-branch-a-dot.com - branch毎に環境が作 成される https://f-branch-b-dot.com https://f-branch-c-dot.com

Slide 18

Slide 18 text

Copyright © DeNA Co., Ltd. All Rights Reserved. ~Deploy~ 18 f/branch_a f/branch_b f/branch_c version: version: version: QA https://f-branch-a-dot.com - debugモードで向き先を 変更できるように

Slide 19

Slide 19 text

Copyright © DeNA Co., Ltd. All Rights Reserved. こんな感じで作りました Analytics

Slide 20

Slide 20 text

Copyright © DeNA Co., Ltd. All Rights Reserved. ~Analytics~ 20 Datastore Big Query Data Studio

Slide 21

Slide 21 text

Copyright © DeNA Co., Ltd. All Rights Reserved. ~Analytics~ 21 Data Studio Big Query

Slide 22

Slide 22 text

Copyright © DeNA Co., Ltd. All Rights Reserved. 失敗したこと・苦戦したこと

Slide 23

Slide 23 text

Copyright © DeNA Co., Ltd. All Rights Reserved. 歩数は最新のものが届くとは限らない

Slide 24

Slide 24 text

Copyright © DeNA Co., Ltd. All Rights Reserved. 歩数送信の流れ 5/21 5/22 12:00 12:00 7000 8000 7000 ①送る! ②8000歩 確定!! 5/21の歩数 ③送る! 8000 23:59

Slide 25

Slide 25 text

Copyright © DeNA Co., Ltd. All Rights Reserved. 歩数送信の流れ 5/21 5/22 12:00 12:00 7000 8000 7000 7000 ①送る! ②8000歩 確定!! 5/21の歩数 ③送る! 23:59

Slide 26

Slide 26 text

Copyright © DeNA Co., Ltd. All Rights Reserved. 歩数取得失敗の原因 5/21の実際の歩数 5/21 12:00 5/21 23:59 5/22 12:00 7000 8000 8000 歩数の書き込み ヘルスケアから 取得 7000歩を送る 歩数の書き込み ヘルスケアから 取得 8000歩を送る 7000歩 8000歩

Slide 27

Slide 27 text

Copyright © DeNA Co., Ltd. All Rights Reserved. 歩数取得失敗の原因 7000 8000 8000 歩数の書き込み ヘルスケアから 取得 7000歩を送る 歩数の書き込み ヘルスケアから 取得 7000歩を送る 歩数の書き込み 5/21 12:00 5/21 23:59 5/22 12:00 7000歩 7000歩 5/21の実際の歩数

Slide 28

Slide 28 text

Copyright © DeNA Co., Ltd. All Rights Reserved. ヘルスケアの歩数情報 ヘルスケア⇨今日⇨歩数⇨全てのデー タを表示

Slide 29

Slide 29 text

Copyright © DeNA Co., Ltd. All Rights Reserved. ヘルスケアの歩数情報 ヘルスケへの追加日⇨ 終了時間⇨ ヘルスケア⇨今日⇨歩数⇨全てのデー タを表示 差分

Slide 30

Slide 30 text

Copyright © DeNA Co., Ltd. All Rights Reserved. 歩数取得失敗の原因 7000 8000 8000 歩数の書き込み ヘルスケアから 取得 7000歩を送る 歩数の書き込み ヘルスケアから 取得 7000歩を送る 歩数の書き込み 5/21 12:00 5/21 23:59 5/22 12:00 7000歩 7000歩 5/21の実際の歩数 差分

Slide 31

Slide 31 text

Copyright © DeNA Co., Ltd. All Rights Reserved. 歩数取得できない原因 差分 歩数が更新されてからヘルスケアに書き込まれ るまでラグがある カミナルが最新の歩数を取得できない 前日の歩数をポストするが、最新の歩数とは限ら ない 目標を達成しているのに、不達成になってしまう

Slide 32

Slide 32 text

Copyright © DeNA Co., Ltd. All Rights Reserved. 歩数問題への対応 ・対応 - 判定結果が失敗の場合は最大1週間待つ - 端末側でヘルスケアへの導線を追加 - ヘルスケアを開くと歩数が書き込まれるた め

Slide 33

Slide 33 text

Copyright © DeNA Co., Ltd. All Rights Reserved. struct に context を詰めていた

Slide 34

Slide 34 text

Copyright © DeNA Co., Ltd. All Rights Reserved. 失敗例

Slide 35

Slide 35 text

Copyright © DeNA Co., Ltd. All Rights Reserved. 失敗例 Do not store Contexts inside a struct type; instead, pass a Context explicitly to each function that needs it. The Context should be the first parameter, typically named ctx: Go Doc - Package context

Slide 36

Slide 36 text

Copyright © DeNA Co., Ltd. All Rights Reserved. 対応

Slide 37

Slide 37 text

Copyright © DeNA Co., Ltd. All Rights Reserved. 理由 struct をリクエストスコープと紐づけて状態として管理してしまっている ので 別のリクエストスコープから struct を利用できてしまい キャンセル情報が伝搬されない(メモリリークの可能性)

Slide 38

Slide 38 text

Copyright © DeNA Co., Ltd. All Rights Reserved. まとめ ・Go, GAEでサクッと構築 ・Datastore, BQ, DataStudio で BI 構築 ・端末からの歩数は最新のものとは限らない ・アンチパターン踏んじゃった

Slide 39

Slide 39 text

Copyright © DeNA Co., Ltd. All Rights Reserved. ご静聴ありがとうございました。