Slide 1

Slide 1 text

Scalaで新規サービス作ってる話 2023/10/13 Scalaわいわい勉強会 Naoki Aoyama - @aoiroaoino

Slide 2

Slide 2 text

❖ Naoki Aoyama ❖ Twitter/GitHub: @aoiroaoino ❖ 実践Scala入門 共著者 ❖ Working: $ whoami

Slide 3

Slide 3 text

No content

Slide 4

Slide 4 text

No content

Slide 5

Slide 5 text

関数型プログラミング 大好きな人類猫が 新規サービスをゼロから 開発している話

Slide 6

Slide 6 text

No content

Slide 7

Slide 7 text

No content

Slide 8

Slide 8 text

No content

Slide 9

Slide 9 text

バックエンドアプリケーションに Scala を採用 ❖ 言語(ランタイム)/ビルドツール ➢ Scala 2.13.12 ➢ Java (JDK) 17 ➢ sbt ❖ 主なライブラリ/フレームワーク ➢ Play Framework 2.9.0-RC3 ➢ Scalikejdbc 4.0.0 ➢ AWS SDK (Java) ➢ その他、連携サービスの SDK など ❖ ざっくり規模感 ➢ 数十の集約 ➢ 数十のユースケースクラス ➢ 数十のエンドポイント ➢ 数個のサービス(アプリケーションプロセス)

Slide 10

Slide 10 text

Tips: 関数型プログラミングや IO はどうしてる? ❖ FP: Cats 使ってます ➢ 目的の9割は cats.data.Validated, NonEmptyList を使いたかったから ➢ ごく一部、cats.data.EitherT を採用 ■ Future[Either[E, A]] を for 式でうまく扱うため ■ 基本的には public メソッドのシグネチャに登場させないルール ➢ ごく一部、cats.data.ContT を採用 ■ ただし、Controller での処理を合成/ハンドリングするくらい ❖ IO: scala.concurrent.Future 使ってます ➢ Scala 標準ライブラリにあること、 Play Framework との親和性を優先 ➢ 3rd party 製よりも学習コストの低さや中長期的なメンテナンス性も考慮

Slide 11

Slide 11 text

Tips: 他にも色々こだわってます ❖ フロントエンドアプリケーション ➢ React w/ TypeScript ➢ Next.js ❖ 設計、アーキテクチャ、プロジェクト構成 ➢ Domain Driven Design (DDD) ➢ Event-driven architecture ➢ Modular Monolith ❖ 継続的デリバリー、開発サイクル ➢ ほぼ毎日定期リリース ➢ トランクベース開発、 GitOps ➢ ほぼスクラム、ステークホルダー大集合のスプリントレビュー会

Slide 12

Slide 12 text

全然モナモナしていない?🤔

Slide 13

Slide 13 text

モナモナ => ワイワイ ※ワイワイするためにモナモナが必要の意味ではない

Slide 14

Slide 14 text

Scala の優位性を再考した ❖ 表現力の高さ ➢ プログラミング言語そのものが多機能 ➢ 強力な静的型システム ❖ Better Java + α ➢ 強力な標準ライブラリ/コレクション操作 ➢ 様々な Java 資産との親和性 ❖ ほぼ公式で提供される Lint ツール群 ➢ Scalafix, Scalafmt

Slide 15

Slide 15 text

目指すはビジネスインパクト、速度、品質の全部取り ❖ 速く作りたい、気軽に変更したい、そして品質は妥協しない ➢ 認知負荷や学習コストを極力下げる為の技術選定 ➢ Scalafix, Scalafmt を用いてレビューコストの低減 ❖ 学習コスト、オンボーディング工数の削減 ➢ DDD やアーキテクチャと関連づけられた命名規則 ➢ 一貫した一覧性の高いパッケージ構成など ➢ ただし、まだ体験した人はいない ...体験したい方います?

Slide 16

Slide 16 text

技術的チャレンジ ≠ 簡単な課題を難しく解く ※関数型プログラミングや過去の取り組みが簡単な課題を難しく解いていたという主張ではない

Slide 17

Slide 17 text

複雑な業務課題をできるだけ 簡潔に、素早く、継続的に 解決していきたい

Slide 18

Slide 18 text

その武器に Scala を選んだ \\\💪('ω'💪) ///

Slide 19

Slide 19 text

まとめ ❖ 新サービス「Scalebase ペイメント」を Scala で開発しています ❖ Better Java + α で Scala の良さを再考し最高の開発したい ❖ 今後も技術トピック公開していくよ、お楽しみに(?) ❖ 興味ある方、お話ししませんか?    👉 お仕事でも Scala の話題でワイワイしようぜ!!