Slide 1

Slide 1 text

事業スピードを落とさず PHP→Kotlinリプレイスに 挑戦している話 Cake.jp Co.Ltd. @Server-Side Kotlin Meetup vol.1

Slide 2

Slide 2 text

アジェンダ - 自己紹介 - Cake.jp システムの - これまで - これから - Kotlinリプレイスの感触 - おわりに 2

Slide 3

Slide 3 text

🙇 コード1行も出てきません🥺 3

Slide 4

Slide 4 text

自己紹介 あらたま/@ar_tama - 株式会社Cake.jp CTO - ex ロコガイド, セオ商事, DeNA - 日本もちもち協会 代表 - サウナ好き 4

Slide 5

Slide 5 text

Cake.jpについて 会員数100万人突破! 国内最大級のケーキ・スイーツ総合通販サイト 5

Slide 6

Slide 6 text

Cake.jp システムのこれまで ※入社当初のあらたまさん 6

Slide 7

Slide 7 text

Cake.jp システムのこれまで - 2回のピボット - 足掛け10年ほどのコードベース - 定着しないメンテナ - どんどん生まれる関連事業&機能 - 目まぐるしく変わる業務フロー そして九龍城へ… 7

Slide 8

Slide 8 text

- 2回のピボット - 足掛け10年ほどのコードベース - 定着しないメンテナ - どんどん生まれる関連事業&機能 - 目まぐるしく変わる業務フロー そして九龍城へ… Cake.jp システムのこれまで 8 あるある

Slide 9

Slide 9 text

Cake.jp システムのこれまで =技術的投資がされてこなかった? 9

Slide 10

Slide 10 text

Cake.jp システムのこれまで =技術的投資がされてこなかった? No! 結果として、技術的投資以外の判断が優先されてきただけ 10

Slide 11

Slide 11 text

PMFは見えてきた🎂 Cake.jp システムのこれから 11

Slide 12

Slide 12 text

技術的投資に(も)力を入れよう → 九龍城を解きほぐして、新しいアプリケーションに載せ替えよう - 事業成長のボトルネックをなくすため - システムの寿命を延ばすため - 開発者生産性と楽しさを増幅させるため Cake.jp システムのこれから 12

Slide 13

Slide 13 text

3年先の開発組織を考える - 組織規模をどの程度拡大させるか? - メインシステムに殆ど絡まない新規事業が乱立するか? - 既存事業を5以上のチームに分割する可能性はあるか? Cake.jp システムのこれから 13

Slide 14

Slide 14 text

コンウェイの法則※ に従う 先の問いに… - YES→チームを細かく分割し、マイクロサービスアーキテクチャで - NO→チームを分割しすぎず、モジュラーモノリスアーキテクチャで ※ “組織の設計するシステムには ... その組織のコミュニケーション構造をそのまま反映した設計になるという制約が ある” Cake.jp システムのこれから 14

Slide 15

Slide 15 text

コンウェイの法則※ に従う 先の問いに… - YES→チームを細かく分割し、マイクロサービスアーキテクチャで - NO→チームを分割しすぎず、モジュラーモノリスアーキテクチャで ※ “組織の設計するシステムには ... その組織のコミュニケーション構造をそのまま反映した設計になるという制約が ある” Cake.jp システムのこれから 15

Slide 16

Slide 16 text

先人の知恵を積極的に借りる Cake.jp システムのこれから 16

Slide 17

Slide 17 text

- まずは既存の業務フローを洗い出し、あるべき姿とのギャップを知る - あるべき業務フローから業務ロジック(≒ドメインモデル)に落とし込む - Cake.jpは「マーケットプレイス型のECサイト」 - =ECサイトとしての基本機能は固く - 理想形がわからないところは柔軟に Cake.jp システムのこれから 17

Slide 18

Slide 18 text

- まずは既存の業務フローを洗い出し、あるべき姿とのギャップを知る - あるべき業務フローから業務ロジック(≒ドメインモデル)に落とし込む - Cake.jpは「マーケットプレイス型のECサイト」 - =ECサイトとしての基本機能は固く - 理想形がわからないところは柔軟に Cake.jp システムのこれから 18

Slide 19

Slide 19 text

そこでKotlinですよ 19

Slide 20

Slide 20 text

- 型安全!Null安全! - 表現が簡潔 - 「どこからでも何でも呼べちゃう」が防げる - アプリケーション特性によって使い分けができる - Spring MVC / Spring WebFlux + Coroutine 20 そこでKotlinですよ

Slide 21

Slide 21 text

現在は、一部機能のリプレイスが完了したところ (出荷日やお届け日にまつわる機能群) ※ 注文を受けてから製造する店舗も多いため、条件が複雑 Kotlinリプレイスの感触 21

Slide 22

Slide 22 text

- 型安全!Null安全! - 表現が簡潔! - Data Classべんり - ExceptionHandlerべんり(Spring) - 「どこからでも何でも呼べちゃう」が防げる - マルチモジュールでモジュラーモノリスを体現 - テストが書きやすい - mockkべんり - ドメインモデルに属性と振る舞いをもたせ、検証対象が明確に - まずはSpring MVCから - 今後WebFluxも積極導入していきたい 22 Kotlinリプレイスの感触

Slide 23

Slide 23 text

事業計画(開発計画)に絡めながら進めているので、総じていい感じ🥳 - マイナスをゼロにしている感が少なく、モチベーションを維持しやすい - リプレイス先が風化しにくい - ダブルメンテが起きにくい - トレードオフ:リプレイス完了までの時間>< 23 Kotlinリプレイスの感触

Slide 24

Slide 24 text

時間がなくて盛り込めなかった内容もたくさんあるので、詳細は懇親会で! - 直面している課題 - 今後取り入れたい周辺技術 - パッケージ・モジュールの粒度と狭義のアーキテクチャ 24 おわりに

Slide 25

Slide 25 text

We’re Hiring!!! Meetyもやってます🙌 お気軽にどうぞ 25 おわりに