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

新規サービスでGo, GAEを使ってみた話 とその振り返り

新規サービスでGo, GAEを使ってみた話 とその振り返り

takuya tsuruda

May 23, 2018
Tweet

Other Decks in Technology

Transcript

  1. Copyright © DeNA Co., Ltd. All Rights Reserved. 自己紹介 2

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

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

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

    歩数管理 - 1対1のデイリー歩数バトル - 健保内での月間歩数ランキング - KenCoMポイントの獲得 さんぽジスタ
  5. Copyright © DeNA Co., Ltd. All Rights Reserved. カミナルとは 9

    ・歩いたら - 1日8000歩以上 - 週に4日以上 ・ご褒美 - コーヒー - アイス ・2017/10 ~ - 開発開始 ・2018/03 ~ - トライアルスタート
  6. Copyright © DeNA Co., Ltd. All Rights Reserved. こんな感じで作りました ・GAE

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

    ・GAE - サクッと作ってサクッと潰す - 社内の知見を増やす - 使ってみたかった ・Go - Standard EnvironmentでRails使えない - Go使ってみたかった
  8. Copyright © DeNA Co., Ltd. All Rights Reserved. ~Deploy~ 16

    f/branch_a f/branch_b f/branc_c QA push push push
  9. 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
  10. 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モードで向き先を 変更できるように
  11. Copyright © DeNA Co., Ltd. All Rights Reserved. 歩数送信の流れ 5/21

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

    5/22 12:00 12:00 7000 8000 7000 7000 ①送る! ②8000歩 確定!! 5/21の歩数 ③送る! 23:59
  13. 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歩
  14. 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の実際の歩数
  15. Copyright © DeNA Co., Ltd. All Rights Reserved. ヘルスケアの歩数情報 ヘルスケへの追加日⇨

    終了時間⇨ ヘルスケア⇨今日⇨歩数⇨全てのデー タを表示 差分
  16. 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の実際の歩数 差分
  17. Copyright © DeNA Co., Ltd. All Rights Reserved. 歩数取得できない原因 差分

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

    - 判定結果が失敗の場合は最大1週間待つ - 端末側でヘルスケアへの導線を追加 - ヘルスケアを開くと歩数が書き込まれるた め
  19. 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
  20. Copyright © DeNA Co., Ltd. All Rights Reserved. 理由 struct

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

    GAEでサクッと構築 ・Datastore, BQ, DataStudio で BI 構築 ・端末からの歩数は最新のものとは限らない ・アンチパターン踏んじゃった