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

地点検索の進化とDXを支えるリアーキテクチャ

 地点検索の進化とDXを支えるリアーキテクチャ

2019年9月20日に開催された「ナビタイムの現場 第3経路 -ナビタイムを支える屋台骨-」にて発表した資料です

NAVITIME JAPAN

September 20, 2019
Tweet

More Decks by NAVITIME JAPAN

Other Decks in Technology

Transcript

  1. ABOUT ME ABOUT ME Yu Mochizuki @ NAVITIME JAPAN Co.,

    Ltd. MY WORK MY WORK 地点検索の研究開発 全サービス共通 API 基盤開発 開発者向け検証サポート
  2. MY CAREER MY CAREER 1. コア技術である経路探索エンジンの開発 2. B2B 事業 厳しい制約条件の中,

    技術的負債に向き合い, DX の重要性に気づく. 開発リーダーを担当し, DX 重視の現場運営を実践. 3. バックエンドサーバ開発に そんな中で巡ってきたリアーキテクチャ案件が, 今⽇の話. ※ DX = Developer Experience ( 開発者体験)
  3. マイクロサービスとは マイクロサービスとは アプリケーションを⼩さな独⽴したサービスの組み合わせによって実現するアー キテクチャ. クライアント サービス サービス サービス サービス ID

    プロ バイダー マイクロサービス API ゲー トウェイ リモート サ ービス 管理 CDN 静的コン テンツ サービス検索 https://docs.microso .com/ja-jp/azure/architecture/guide/architecture-styles/images/microservices-logical.svg
  4. おまけ : マイクロサービスと組織構成 おまけ : マイクロサービスと組織構成 今回は が⾃然に当てはまる事例となった. コンウェイの法則 Any

    organization that designs a system (defined broadly) will produce a design whose structure is a copy of the organization's communication structure. http://www.melconway.com/Home/Conways_Law.html
  5. 実装のモダン化 実装のモダン化 ほぼすべての Java コードを Kotlin で書き直し, 実装をシンプルにした. 例えば, 愚直な検索叩き直しロジックを...

    final Response response1 = client.execute(createQuery1()); if (response1.isSatisfied()) { return Optional.of(result1); } final Response response2 = client.execute(createQuery2()); if (response2.isSatisfied()) { return Optional.of(result2); } return Optional.empty();
  6. Kotlin ( ) で書くと, 興味が分割されて simple & testable に. ※

    ポイントはクエリ⽣成が遅延評価されること. Java で真似するとここが⼤変. Sequence val queries = sequence { // 抽象化 testable . yield(createQuery1()) yield(createQuery2()) } return queries.map { client.execute(it) } .firstOrNull { it.isSatisfied() }
  7. WHY DX FIRST? WHY DX FIRST? プロダクトを育てる⼈を, 継続的に育てる 技術的負債のプライマリバランスを保つ これを実現するために,

    開発者が楽しいと思うこと を優先的にやる. 開発者の勘に任せた結果, プロダクトの価値が最⼤化される.
  8. DX FIRST の⼤前提 : ⼀流の開発者であり続ける DX FIRST の⼤前提 : ⼀流の開発者であり続ける

    開発者の感性が鈍かったら良い⽅向に進むはずがない. → を → に近づける判断ができるようになる.
  9. FOR DX: イベントトレース FOR DX: イベントトレース ブラウザだけでデバッグできるように, 外部リクエスト等をトレース. { "items":

    [ ... ], "_debug": { "externalActions": [ { "url": "https://external.com/api?word=%E6%9D%B1%E4%BA%AC", "params": { "word": "東京" } } ] } }
  10. FOR DX: エラートレース FOR DX: エラートレース ブラウザだけでデバッグできるように, 発⽣した例外をトレース. { "code":

    503, "message": "A backend service is not available now.", "_debug": { "exception": { "message": "External API returns status code 503.", "stacktrace": [ "jp.co.navitime.foo.ExternalApiClient.kt:123", ... ] } } }
  11. 結局 , DX FIRST とは 結局 , DX FIRST とは

    楽しいこと = やりがいがあること. 基本に忠実に, ストイックに, 技術で解決すること こそが, エンジニアの楽しみ.
  12. DX FIRST の効果 DX FIRST の効果 新たに join したメンバの感想 機能追加不安だけどテストが書けるので安⼼して進められそう.

    これ読んでいたおかげで検索システムの⾼速化頑張れそう. モブプロで解説聞いてる間の⼼境は SW EP4 のミレニアム・ファルコン号でル ークがブラスターをライトセーバーで跳ね返す訓練してる時のそれ.
  13. 共通 API 基盤の技術⾼度化 共通 API 基盤の技術⾼度化 新しい⾔語やフレームワークの知識を得たことで, 共通 API サーバを⾼度化する

    アイデアが⽣まれた. たとえば, Spring AOP にインスパイアされて AspectJ を導⼊し, 数千⾏のコードを 削減した.
  14. ⾃⾝のキャリアアップ ⾃⾝のキャリアアップ 開発者検証の抜本的な⾒直しを経験したことで, ⾃⾝の SET (So ware Engineering in Test)

    エンジニア としてのキャリアを開拓した. 現在は, このリアーキテクチャの中で培ったテストやモニタリングのノウハウを, 社内で啓蒙する活動や, 技術⽀援をしている.