Upgrade to PRO for Only $50/Year—Limited-Time Offer! 🔥

「2024年版 Kotlin サーバーサイドプログラミング実践開発」の復習

「2024年版 Kotlin サーバーサイドプログラミング実践開発」の復習

■ イベント
After Kotlin Fest 2024 LT Night
https://sansan.connpass.com/event/320810/

■ 発表者
Bill One Engineering Unit
小式澤 篤

■ Bill One 開発エンジニア 採用情報
https://media.sansan-engineering.com/billone-engineer

SansanTech

July 08, 2024
Tweet

More Decks by SansanTech

Other Decks in Technology

Transcript

  1. 写真が入ります ⼩式澤 篤 (Atsushi Koshikizawa) Sansan株式会社 技術本部 Bill One Engineering

    Unit 2016年 BtoC 業界の会社へ新卒⼊社し、主にサーバーサイドや全 ⽂検索システムを担当。2022年に BtoC 業界から Sansan へ中途 ⼊社。⼊社以来 Web アプリケーション開発エンジニアとして Bill One の開発に従事。主に請求書受領領域の開発を⾏っていた。 現在はエンジニアリングマネジャーとしてマネジメントするとと もに、 Bill One の品質向上を推進している。 @lastarrow21 @lasta
  2. 会社概要 2 表参道本社 神山ラボ Sansan Innovation Lab 社 名 Sansan株式会社

    所在地 表参道本社 東京都渋⾕区神宮前5-52-2 ⻘⼭オーバルビル13F グループ 会社 Sansan Global Pte. Ltd.(シンガポール) Sansan Global Development Center, Inc.(フィリピン) Sansan Global (Thailand) Co., Ltd.(タイ) ログミー株式会社 株式会社ダイヤモンド企業情報編集社 クリエイティブサーベイ株式会社 株式会社⾔語理解研究所 1519名(2024年2⽉29⽇時点) 従業員数 2007年6⽉11⽇ 設 ⽴ ⽀店:⼤阪、名古屋、福岡 サテライトオフィス:徳島、京都、新潟 拠 点 寺⽥ 親弘 代表者
  3. 働き⽅を変えるDXサービス 請求 ⼈や企業との出会いをビジネスチャンスにつなげる「働き⽅を変えるDXサービス」を提供 ビジネスフローにおけるさまざまな分野でサービスを展開 名刺管理 名刺DX 営業 営業DX 契約 法務DX

    経理DX 個⼈向けDX 法⼈向けDX 必要な情報を すぐに⾒つけられる 情報の管理がしやすく すぐに共有できる 情報を分析・活⽤しやすく データに基づいた判断ができる SansanのDXサービスの活⽤で変わる働き⽅
  4. - 前⽇から熱を出して参加できませんでした - 1ヶ⽉以上前から参加に向けて予習等準備していたので悔しい - タイトルには「復習」とあるが実際には参加していない - ⽵端さんの 登壇資料 および

    登壇後のブログ が素晴らしく学びになる - 今からサーバーサイド Kotlin を導⼊しようと考えている⽅、今サーバーサイ ド Kotlin を実践している⽅は、この資料はどうでも良いので⽵端さんの資料 と 書籍 を読むことをおすすめします Kotlin Fest 2024 参加できませんでした 😷
  5. Kotlin Fest 2024 参加できませんでした 😷 サーバーサイド Kotlin を導⼊済みのプロダクト Bill One

    の実情との⽐較をメインに紹介します - 前⽇から熱を出して参加できませんでした - 1ヶ⽉以上前から参加に向けて予習等準備していたので悔しい - タイトルには「復習」とあるが実際には参加していない - ⽵端さんの 登壇資料 および 登壇後のブログ が素晴らしく学びになる - 今からサーバーサイド Kotlin を導⼊しようと考えている⽅、今サーバーサイ ド Kotlin を実践している⽅は、この資料はどうでも良いので⽵端さんの資料 と 書籍 を読むことをおすすめします
  6. Email Cloud Load Balancing Backend Cloud Run Database Cloud SQL

    Static Files Cloud Storage Cloud Tasks API Gateway Cloud Load Balancing API Client User Logging Error Reporting Cloud Build Bill One Entry Management / Developer Tools Cloud Functions Monitoring Authentication Login Screen Frontend / BFF Cloud Run Pub/Sub Bill One のアーキテクチャ概観 約7割が Kotlin
  7. おすすめされていたもの 他に挙げられていたもの Bill One で採⽤しているもの Web アプリケーション フレームワーク Ktor Micronaut

    gRPC-Kotlin (※) Ktor DI フレームワーク Koin Dagger 2 Kodein (なし) O/R マッパー jOOQ Exposed Ktorm (なし) テストフレームワーク Kotest Spek JUnit 5 Kotest (⼀部のみ) 最近のサーバーサイド Kotlin で使えるフレームワーク (※) gRPC-Kotlin は 厳密には Web アプリケーションフレームワークではないが、 Web インタフェースの⼀種として紹介
  8. - Kotlin 製のマイクロサービスでは全て Ktor を採⽤している - 軽量で柔軟性が⾼く、起動速度も早く、学習コストが低い - 多くのメンバーが Kotlin

    未経験から参画できている - Ktor でも起動時間に影響が出るはある - Java Agent をベースとしたライブラリの導⼊ (参考) - コード量の肥⼤化 - JetBrains 社製で Kotlin のアップデート追従性も安定的、ライブラリ群の バージョンアップコストが⽐較的低い - 10以上のマイクロサービスで採⽤しているがすべて Ktor 2.3.x - 資料作成当時、ほぼ最新のバージョン - とはいえメジャーバージョンアップは⼤変だった Web アプリケーションフレームワーク - Bill One の実情
  9. - “ ⽐較的新しいフレームワークのため、エコシステムやサードパーティの プラグインは発展途上 ” - 基本的な開発時は問題ないが、独⾃の AOP 的なプラグインを作成したい場 合、ドキュメント不⾜感は否めない

    - “ Spring のようなフルスタックフレームワークではないため、⽤途に応 じて他のフレームワークとの組み合わせも必要 ” - 裏を返すと Spring Framework へのロックインは無いため組み合わせ⾃由 - Ktor: Project Generator (Spring Initializr のようなもの) がオンラインおよび IntelliJ IDEA 組み込みで⽤意されているため、初めてアプリケーションを構築す る際も迷いにくい Web アプリケーションフレームワーク - Bill One の実情
  10. - Bill One ではモジュール間の依存関係をコーディング規約で定義している のみで DI フレームワークを利⽤していない - ドメイン層の単体テスト +

    API 単位の単⼀モジュールテストが主 - テストごとに PostgreSQL DB スキーマを1から⽣成している - 規約とテストコードの共通化でテスト実⾏時の安全性を担保している - もし使うとしたら、個⼈的には⽵端さんも推奨している Koin が最有⼒ - マルチプラットフォームに対応していて Android 開発者でも馴染みがある - DI コンテナは設定が複雑化しやすいが Koin はシンプル - Guice は⾟かった思い出が…… - Spring Framework 経験者であれば通常の開発に困らなさそうな記法セット DI フレームワーク - Bill One での実情
  11. - ブログでも話題に上がっていたが Bill One でもクエリ DSL を⽤いず、ほ ぼ⽣の SQL を書いている

    (SQL マッパー型) (参考) - O/R マッパーはどこまで⾏っても SQL の知識が必要となる - どのような SQL を発⾏しているか⼀⽬瞭然でチューニングもしやすい - マイグレーションは flyway を利⽤している - O/R マッパーに限らず Kotlin (JVM) アプリケーションを構築する際は Kotlin 製のライブラリだけではなく Java 製のライブラリも候補に上がる - Exposed は 2024/8 にバージョン 1.0 のリリースを⽬指しているので、今 後盛り上がりを⾒せるかもしれない - jOOQ と Exposed はコード⽣成の利⽤有無に依存 - O/R 未導⼊の場合はこの2つの動向をしばらく追っておくと良さそう O/R マッパー - Bill One の実情
  12. - Bill One ではほとんど JUnit 5 + MockK + AssertJ

    + Ktor Server Test - 1マイクロサービスのみ Kotest への移⾏が進⾏中 - JUnit と並⾏して動作可能 - テーブルテストを始め開発者体験が向上している “ 様々な記述⽅法が⽤意されているので、プロジェクトによって⼀定の⽅針 決めは必要 ” - 事前にルールを整備している - Test Style は FunSpec へ統⼀ - Kotest Matchers / Assertions は利⽤せず AssertJ を利⽤ - …… テストフレームワーク - Bill One の実情
  13. “ サーバーサイドの選択肢として Kotlin が⼀番⼈気という状況ではない “ - 「Kotlin愛好会」や「Server-Side Kotlin Meetup」といったコミュニティはあるが、 まだまだ他の⾔語やフレームワークと⽐べると発展途上

    - ⼀⽅で、 Kotlin Fest 2024 のスポンサー企業群にて、主として Mobile で採⽤し ている企業とサーバーサイドで採⽤している企業はおおよそ半々 (※) - ⾔語としてもフレームワークとして発展が期待できる技術 サーバーサイド Kotlin の現状と今後 (※) あくまで本資料の作成者の主観