Save 37% off PRO during our Black Friday Sale! »

JavaエンジニアがKotlin_SpringでWebアプリケーションを作った話__1_.pdf

8bf5ef27f515041b93d3211571a7ed46?s=47 yasu-yamasaki
February 18, 2021

 JavaエンジニアがKotlin_SpringでWebアプリケーションを作った話__1_.pdf

8bf5ef27f515041b93d3211571a7ed46?s=128

yasu-yamasaki

February 18, 2021
Tweet

Transcript

  1. JavaエンジニアがKotlin+SpringでWebアプ リケーションを作った話 2021年2月18日(木)LINE Developer Meetup #70 - Kotlin Finatext Ltd.

    山﨑 康行
  2. Copyright © FINATEXT. All rights Reserved. 1
 自己紹介 山﨑 康行

      @yasu_yamasaki ( 2018/12〜 Finatext ) • バックエンド担当 • JavaでのWebアプリケーション開発歴:8年 • Kotlin歴:2年 • フロント(Vue.js)とインフラもやります • 趣味は一人カラオケ
  3. Copyright © FINATEXT. All rights Reserved. 2
 会社紹介 Finatext グループ

    • 『金融を「サービス」として再発明する』 • 証券ビジネスプラットフォーム「BaaS (Brokerage as a Service)」 ◦ ずーっと手数料無料のコミュニティ型株取引アプリ「STREAM」 ◦ 永久不滅ポイントで気軽に積立投資「セゾンポケット」 ◦ 日本株だけのポートフォリオで資産運用「Wealth Wing」 • 保険プラットフォーム「Inspire (Insurance as a Service)」 ◦ 産前から産後まで、妊婦さんの困りごとにきめ細かく寄り添うミニ保険「母子 保険はぐ」
  4. Copyright © FINATEXT. All rights Reserved. 3
 今日話すこと • Kotlinを使ってみたいJavaのサーバサイドエンジニアに向けて

    ◦ JavaのWebアプリ開発経験あれば、KotlinでWebアプリは作れたと いう事例 ◦ 躓いたポイントを紹介 • Kotlinをすでに習得している人に向けて ◦ サーバーサイドKotlinの開発事例
  5. Copyright © FINATEXT. All rights Reserved. 4
 Agenda • 事例紹介

    • 使ってみての所感 • つまづきエピソード紹介
  6. Copyright © FINATEXT. All rights Reserved. 5
 Agenda • 事例紹介

    • 使ってみての所感 • つまづきエピソード紹介
  7. Copyright © FINATEXT. All rights Reserved. 6
 サービスについて Wealth Wingは入金をするだけで運用が始まる、お

    まかせ投資サービスです。 あなたは待つだけ。日本株のみの高度な運用戦略 で高いリターンを目指します。 • サービスの特性 ◦ システムによるポートフォリオ(資産)管理 ◦ リバランス・出金等に伴う証券の自動売買 ◦ ユーザのリクエストに対してリアルタイムな証券の 売買は発生しない
  8. Copyright © FINATEXT. All rights Reserved. 7
 システム構成 現物株の売買 証券口座管理

    (残高・入出金) 認証 投資一任 戦略管理 外部システム(市場等) 証券ビジネスプラットフォーム BaaS ポートフォリオ 管理 Wealth Wingシステム サービス管理 (お知らせ・利用料等) BFF エンドユーザ
  9. Copyright © FINATEXT. All rights Reserved. 8
 システム構成をインフラよりにブレイクダウン Application Fargate

    【Consumer】 Consumer
  10. Copyright © FINATEXT. All rights Reserved. 9
 アプリケーションのアーキテクチャ概要 Consumerモジュール ・エンドユーザ向けAPI

    ・BFF的な処理 Adminモジュール ・管理者向けAPI ・BFF的な処理 Batchモジュール ・バッチ処理 Coreモジュール ・ドメインロジック Infrastructureモジュール ・リポジトリの実装 ・ドメインエンティティの永続化、 復元 ・DBやBaaS等の外部システム との接続 • 各アプリケーションはそれぞれ別のモジュール • ドメインロジックはCoreモジュールに集約 • DBや外部システムとの接続はInfrastructureモジュールに集約 • これらのモジュールは1つのGradleプロジェクトのサブプロジェクトになっている モジュールの依存関係図
  11. Copyright © FINATEXT. All rights Reserved. 10
 利用している技術

  12. Copyright © FINATEXT. All rights Reserved. 11
 Agenda • 事例紹介

    • 使ってみての所感 • つまづきエピソード紹介
  13. Copyright © FINATEXT. All rights Reserved. 12
 所感 • Java

    + Springの知見は、そのまま使える。 ◦ 基本的にはJava + Springと同じ ◦ システムの運用保守は同じ ◦ Springの使い方も同じ ◦ Lintやカバレッジ計測等、Kotlinとして扱わなければならない部分で、若干はまりポイント はある ここを消すと、もはやJavaによる開発
  14. Copyright © FINATEXT. All rights Reserved. 13
 所感 Javaに比べKotlinは、堅牢性の高いコードが簡潔に書ける 例:null

    safety public void request(Input input) { if (input == null) { throw new IllegalArgumentException("input not null") } // ... } 不必要なnullチェックはなくなります ※Javaでも@NotNull等で対応可
  15. Copyright © FINATEXT. All rights Reserved. 14
 所感 Javaに比べKotlinは、堅牢性の高いコードが簡潔に書ける 例:data

    class data class User( // = デフォルト値 val id: UUID = UUID.randomUUID(), // 変わらない val birthDay: LocalDate, // 変わる var address: String, // nullable var company: Company? ) Value Objectを簡潔に表現できる ※Javaにも似た仕様のRecordが実装されました
  16. Copyright © FINATEXT. All rights Reserved. 15
 所感 Javaに比べKotlinは、堅牢性の高いコードが簡潔に書ける 例:Scope

    Functions User createUser(String name) { User user = new User(name) userRepository.insert(user) return user } ローカル変数を減らすことができる fun createUser(name: String): User { return User(name) .also { userRepository.insert(it) } } Java Kotlin
  17. Copyright © FINATEXT. All rights Reserved. 16
 所感 チーム開発は・・・ •

    プロジェクトの状況 ◦ バックエンドチーム:最大5人、入れ替わりトータル10人くらい ◦ Kotlinを習得しているメンバは1人くらいしかおらず • 学習コストは低い ◦ Javaを知っているメンバであれば、Kotlinの習得は早かった(1,2週間程度) ◦ Javaを知らないメンバだと、結構時間が掛かった印象だが、どちらかというとSpring Frameworkによるもの • 堅牢性が高いコードが書けるのでチーム開発も◎
  18. Copyright © FINATEXT. All rights Reserved. 17
 Agenda • 事例紹介

    • 使ってみての所感 • つまづきエピソード紹介
  19. Copyright © FINATEXT. All rights Reserved. 18
 つまづきエピソード紹介 Kotlinには検査例外がない

  20. Copyright © FINATEXT. All rights Reserved. 19
 やりたかったこと 業務ロジックで発生する業務例外を定義して …

  21. Copyright © FINATEXT. All rights Reserved. 20
 やりたかったこと 呼び出し側で確実にキャッチ!

  22. Copyright © FINATEXT. All rights Reserved. 21
 まず:@Throwsをつける catch強制できない…

  23. Copyright © FINATEXT. All rights Reserved. 22
 次に:Result型を使う Result型はreturnできない

  24. Copyright © FINATEXT. All rights Reserved. 23
 最後に:Sealed Classを使う Sealed

    Classとは… 同じファイル内からだけ継承できるクラス。 誤解を恐れずに言うと、インスタンスを生成できる Enumのようなもの
  25. Copyright © FINATEXT. All rights Reserved. 24
 最後に:Sealed Classを使う •

    呼び出し側で必ずチェックされる • Errorが追加された場合、呼び出し側がコンパイルエラーになり、対応漏れを防げる
  26. Copyright © FINATEXT. All rights Reserved. 25
 さいごに • 質問・ご意見歓迎です

    • 個別のご質問があれば @yasu_yamasaki 宛にご連絡ください • 資料のURLもTwitterで共有いたします • Finatext では一緒に働く仲間を募集中です ◦ https://hd.finatext.com/recruit/ • ミートアップやってます。当面はオンライン。 ◦ https://finatext.connpass.com/event/202070/
  27. Copyright © FINATEXT. All rights Reserved. 26