Microservices Meetup vol.9 参加レポート  #microserv

Microservices Meetup vol.9 (FiNC App & Frontend)
FiNCのアプリ/Webフロントエンジニアがクライアントサイド視点でのマイクロサービスを語ります
https://microservices-meetup.connpass.com/event/105174/

# 概要
今回、サーバサイドのMicroservicesの話でけではなく、Microservicesを統合するレイヤーとなるAndroid/iOSアプリ、Webアプリのエンジニアがクライアント視点で、具体的な実践例も踏まえながら発表してくれました。

すでにレポートを詳細にまとめている方がいらっしゃるので、ここでは各セッションの要点と私が感じた所感をまとめたいと思います。

## 参考になるレポート

https://note.mu/suwash/n/ncce1c2051c13
https://qiita.com/moomooya/items/1034bc5ffa05b4d9351e

## Twitter

[#microserv](https://twitter.com/search?q=%23microserv)

# 各セッションのまとめ

## ウェルカムトーク「マイクロサービスとクライアント: 理想と現実の狭間で」

@qsona さん
https://speakerdeck.com/qsona/ideal-and-reality-of-microservices-from-the-client-side

- Microservicesの概要
- フロントエンドの役割、課題
- それらに対してFiNCが取り組んでいること

## クライアントサイドから考えるマイクロサービス

@neonankiti さん
https://speakerdeck.com/neonankiti/kuraiantosaidokarakao-eru-maikurosabisu

- クライアントから見たMicroservices
    - 実装コストという意味ではさほど変わらない
- Microservices運用の課題と解決方法
    - 実際に起きた問題点を例に説明
    - Microservicesになったことで、潜在的な課題が見えてきた
    - コミュニケーションが大事
        - Microservicesを踏まえた設計はサービス全体のことなので、チームおよびサービス関係者で共通の認識を持つ必要がある
- マイクロアプリ化
    - @neonankiti さんが作った単語
    - 強いていうならマルチモジュール化が一番近いかも
    - [マルチモジュール化のすヽめ](https://motida-japan.hatenablog.com/entry/2018/02/09/102628)
        - 関連書籍
            - [大きめのAndroidアプリでの設計を考えてみる~pocket~](https://booth.pm/ja/items/837226)
            - 具体的なマルチモジュールの実装手順がまとめてある
    - Webとアプリのシームレスな体験にはInstantAppsを使うと良いかも
        - それにはマルチモジュール化が必要
        - JIRAのクライアントアプリが提供しているらしい

## マイクロサービスとクライアントとコンテキスト境界

@takasek さん
https://speakerdeck.com/takasek/20181030-number-microserv

- クライアント・サーバ間のコンテキスト境界をどこに置くか？
- FiNCアプリの構成
    - MVVM(ModelはUseCase + Domain + Repository)
    - BFF + MicroServices
- クライアントが担保すべき整合性
    - ViewとModel
    - ModelとModel
- クライアントのビジネスロジックはどこか次第
    - 割とUseCaseあたりで落ち着くことが多いが、そこはサービス次第

## 実践、BFF ~ BFFはFiNCのアプリで何を解決したのか ~

@izmeal2000 さん
https://speakerdeck.com/kensukeizumi/shi-jian-bff-bffhafincfalseapuridehe-wojie-jue-sitafalseka

- 具体的な課題を例に、どんな改善を行ったかを紹介
    - 詳細はスライドを見た方がわかりやすいので割愛します
- 今後の展望
    - BFFは通常クライアント側の人間が開発・運用するべき
    - Kotlin + Spring WebFlux + protobuf で開発中！

## お礼ポイント投票機能をSPAに実装してMicro Frontendsを実践している話

@nobuhikosawai さん
（2018/11/08追記）
資料は「AWS Dev Day 2018」でよりブラッシュアップした内容で登壇されていたのでそちらを貼っておきました
https://speakerdeck.com/nobuhikosawai/the-theory-and-practice-of-micro-frontends

- MicroFrontendsとは？
- フロントエンドモノリス
    - マイクロサービス化しても、フロントがボトルネックになり得る
- IKEAとかでも実践されている
- もろもろどんな課題を解決したか、具体例を交えて紹介

## 飛び込みLT：マイクロサービス開発に分散トレーシングを導入してみた

@bgpat さん
https://speakerdeck.com/bgpat/distributed-tracing-for-microservices

# 所感

Microservicesの概要とネイティブアプリ側の対応について聞きたかったので、大変参考になりました。
WebアプリのFrontEndはわからないことが多かったので、大枠しか理解できていませんが、おそらく抱える課題はネイティブアプリと近いのかなと思いました。

マルチモジュール化については、数日前にちょうど同じ資料(マルチモジュールのすヽめ)を読み込んでいたところだったのですが、今回発表内容にも盛り込まれていたので、注目度がさらに上がりました。
懇親会でAndroid/iOS間でのドメインロジックなどの共通化の話がありましたが、`Kotlin native`などを導入する場合もマルチモジュール（最低でもcommon moduleを作る必要がある）にするのは必要なので、InstantAppsも含め、マルチモジュール化を進めるメリットはありそうに感じました。(もちろんサービス次第だとは思いますが)

また、コンテキスト境界の話は大変興味深かったです。私自身DDDの知見がそこまでないのですが、これらをないがしろにしてしまうと、システム全体がカオスになっていくことが容易に想像できました。
今現在クライアントサイドのアーキテクチャを検討しているのですが、サーバサイドも含めたところの観点が少なかったことに気づきを得られたのは大きな収穫でした。

最後に、今回の発表を聞いていて、良いサービスを良い設計で作るには、サービスに関係する人たちとのコミュニケーションを活発にするのが大事なんだと改めて感じました。頭ではわかっていてもコミュニケーションロスは発生しうるので、今後ともしっかりと意識していきたいと思っています。

良い発表をありがとうございました。