Slide 1

Slide 1 text

スタートアップでシードからシリーズA のLaravel でど うアーキテクチャを変化させたのか?

Slide 2

Slide 2 text

シリーズA に向けて事業が1 つから3 つに増えたスタートアップが、Laravel の レイヤードアーキテクチャから戦術的DDD への移行をどのように実現したかを 紹介します。 2024-03-29 | スタートアップでシードからシリーズA のLaravel でどうアーキテクチャを変化させたのか? 2

Slide 3

Slide 3 text

自己紹介

Slide 4

Slide 4 text

所属 株式会社TechBowl 住んでるところ 東京 何やってる? 「TechTrain 」というサービスで反復横跳びし続けている 何でも屋さん(Laravel, Next.js, AWS, etc...) 趣味 お酒( よく溺れる) サウナ 読書 2024-03-29 | スタートアップでシードからシリーズA のLaravel でどうアーキテクチャを変化させたのか? 4

Slide 5

Slide 5 text

TechTrain エンジニア教育+Direct スカウトのサービス。 Coding Stoic をテーマにちゃんとコードを書いていこう ね!というメンターが多めのエンジニアを育てるための サービスです。 2024-03-29 | スタートアップでシードからシリーズA のLaravel でどうアーキテクチャを変化させたのか? 5

Slide 6

Slide 6 text

一緒に働いてくれる人を探しています! 1. バックエンドエンジニア(Laravel + DDD) 2. フロントエンドエンジニア(Next.js with TypeScript) 3. TechTrain のメンター -> 筋がいい人なら教えたいぜ! 2024-03-29 | スタートアップでシードからシリーズA のLaravel でどうアーキテクチャを変化させたのか? 6

Slide 7

Slide 7 text

2024-03-29 | スタートアップでシードからシリーズA のLaravel でどうアーキテクチャを変化させたのか? 7

Slide 8

Slide 8 text

アジェンダ 1. 事業背景と課題 2. アーキテクチャをどう変えたのか? 3. そのほかにやったこと 2024-03-29 | スタートアップでシードからシリーズA のLaravel でどうアーキテクチャを変化させたのか? 8

Slide 9

Slide 9 text

1. 事業背景と課題 2024-03-29 | スタートアップでシードからシリーズA のLaravel でどうアーキテクチャを変化させたのか? 9

Slide 10

Slide 10 text

1. 事業背景と課題 シード 事業は1 つ 売り上げも大事だが、ニーズがあるのかの検証が大事なフェーズ ほぼLaravel に従ったざっくりレイヤーを分けたアーキテクチャ シリーズA 事業が1 つから3 つほどに増加 ニーズに幅が出始め、どのニーズにどのように提供していくかが問題になり 始める レイヤーだけだと情報が整理しきれなくなってくる 2024-03-29 | スタートアップでシードからシリーズA のLaravel でどうアーキテクチャを変化させたのか? 10

Slide 11

Slide 11 text

2. アーキテクチャをどう変えたのか? 2024-03-29 | スタートアップでシードからシリーズA のLaravel でどうアーキテクチャを変化させたのか? 11

Slide 12

Slide 12 text

Before ├── app │ ├── Console │ ├── Exceptions │ ├── Facades │ ├── Helpers │ ├── Http │ ├── Mail │ ├── Models │ ├── Notifications │ ├── Observers │ ├── Providers │ ├── Rules ↑ ここから上は、Laravel のデフォルトディレクトリ │ ├── Repositories <-- ゆるふわリポジトリ │ ├── Services <-- ドメインサービス │ └── UseCase <-- ユースケース 2024-03-29 | スタートアップでシードからシリーズA のLaravel でどうアーキテクチャを変化させたのか? 12

Slide 13

Slide 13 text

After ├── app <--- ここはディレクトリ構成はほぼ変わらず。以前のRepository~Usecase をDeprecated へ。 ├── Package <--- 追加 │ ├── Adapter │ ├── Application │ ├── Domain │ └── Infrastructure 2024-03-29 | スタートアップでシードからシリーズA のLaravel でどうアーキテクチャを変化させたのか? 13

Slide 14

Slide 14 text

何を主眼としたのか? 2-1. どこに何の事業のロジックがあるのかわかるようにする 2-2. 現在のディレクトリに無理やり手を入れなくても良い 2-3. 人数を無理やり増やさなくても良いようにする 2024-03-29 | スタートアップでシードからシリーズA のLaravel でどうアーキテクチャを変化させたのか? 14

Slide 15

Slide 15 text

2-1. どこに何の事業のロジックがあるのかわかるようにする 2024-03-29 | スタートアップでシードからシリーズA のLaravel でどうアーキテクチャを変化させたのか? 15

Slide 16

Slide 16 text

Before app ディレクトリのService クラスによく複数のドメインの情報が混入していた。 toArray(); // 一体中身どの属性を持ってるんだ・・・( 震え声) } public function updateMeeting() // <- 実はどのユーザー属性からも呼ばれてしまう { // 面談の更新処理 return $updated_meeting->toArray(); // 一体中身どの属性を持ってるんだ・・・( 震え声) } } 2024-03-29 | スタートアップでシードからシリーズA のLaravel でどうアーキテクチャを変化させたのか? 16

Slide 17

Slide 17 text

ある意味ドメイン情報の分割がうまくいってなかったが、層としての分割としてはあ る程度機能していたため、このような問題が発生。 認知負荷が上がる原因となっていた 2024-03-29 | スタートアップでシードからシリーズA のLaravel でどうアーキテクチャを変化させたのか? 17

Slide 18

Slide 18 text

After どの事業ドメインで誰が何を行うのか?といった分割を行った 更新だけ取り出して説明

Slide 19

Slide 19 text

2-2. 現在のディレクトリに無理やり手を入れなくても良い 2024-03-29 | スタートアップでシードからシリーズA のLaravel でどうアーキテクチャを変化させたのか? 19

Slide 20

Slide 20 text

前提としてPHP のプロジェクトであるため、次のようなミスをしてはならない 1. ネームスペースとディレクトリ構成が一致していない 2. 大文字小文字の区別が甘い 2024-03-29 | スタートアップでシードからシリーズA のLaravel でどうアーキテクチャを変化させたのか? 20

Slide 21

Slide 21 text

1. ディレクトリ変更を大きくしない方がミスは防げそう 2. 人数もそんなに多くなく、インターン生がミスをしないようにした方が良い 2024-03-29 | スタートアップでシードからシリーズA のLaravel でどうアーキテクチャを変化させたのか? 21

Slide 22

Slide 22 text

手段に対して必要な条件 1. ディレクトリの追加のみでロジック実装が可能 2. 既存のLaravel のartisan コマンドを拡張し、生成 3. ミスが起きづらい仕組みを作成 2024-03-29 | スタートアップでシードからシリーズA のLaravel でどうアーキテクチャを変化させたのか? 22

Slide 23

Slide 23 text

手段に対して必要な条件 1. ディレクトリの追加のみでロジック実装が可能 app ディレクトリ外に新しくディレクトリを作成 2. 既存のLaravel のartisan コマンドを拡張し、生成 app ディレクトリの構成を大きく変えない 3. ミスが起きづらい仕組みを作成 生成コマンドを作り、カバーする 2024-03-29 | スタートアップでシードからシリーズA のLaravel でどうアーキテクチャを変化させたのか? 23

Slide 24

Slide 24 text

After ├── app <--- ここはディレクトリ構成はほぼ変わらず ├── Package <--- 追加 │ ├── Adapter │ ├── Application │ ├── Domain │ └── Infrastructure 2024-03-29 | スタートアップでシードからシリーズA のLaravel でどうアーキテクチャを変化させたのか? 24

Slide 25

Slide 25 text

After: 生成コマンド 2024-03-29 | スタートアップでシードからシリーズA のLaravel でどうアーキテクチャを変化させたのか? 25

Slide 26

Slide 26 text

2-3. 人数を無理やり増やさなくても良いようにする 2024-03-29 | スタートアップでシードからシリーズA のLaravel でどうアーキテクチャを変化させたのか? 26

Slide 27

Slide 27 text

アーキテクチャ => 「コンウェイの法則」からは逃れられない 2024-03-29 | スタートアップでシードからシリーズA のLaravel でどうアーキテクチャを変化させたのか? 27

Slide 28

Slide 28 text

当時のエンジニア組織の体制 2024-03-29 | スタートアップでシードからシリーズA のLaravel でどうアーキテクチャを変化させたのか? 28

Slide 29

Slide 29 text

事業を複数またがることから情報整理が急務 2024-03-29 | スタートアップでシードからシリーズA のLaravel でどうアーキテクチャを変化させたのか? 29

Slide 30

Slide 30 text

情報整理+ 機能実装を的確に実装したい 2024-03-29 | スタートアップでシードからシリーズA のLaravel でどうアーキテクチャを変化させたのか? 30

Slide 31

Slide 31 text

戦略的DDD の考え方が望ましいと判断 2024-03-29 | スタートアップでシードからシリーズA のLaravel でどうアーキテクチャを変化させたのか? 31

Slide 32

Slide 32 text

ざっくりアーキテクチャの選択肢 マイクロサービスにする モノリスにする 2024-03-29 | スタートアップでシードからシリーズA のLaravel でどうアーキテクチャを変化させたのか? 32

Slide 33

Slide 33 text

マイクロサービスで戦術的DDD を実現するには、事業が3 つあるので、少なくとも 数ヶ月でリードクラスを3 名以上取る必要がある 入ってから活躍していただくまで大体6 ヶ月くらいかかる マイクロサービスにすると1 人1 つのサービス担当という形式になることが想定さ れ、内部の実装の共有が難しくなりかねない マイクロサービスの経験者が当時の候補者にいなかった 戦術的DDD はモノリス内で実装するといった方針が良さそうと判断し、アーキテ クトでモノリスで実装した経験がある方を採用 2024-03-29 | スタートアップでシードからシリーズA のLaravel でどうアーキテクチャを変化させたのか? 33

Slide 34

Slide 34 text

戦術的DDD を実現する アーキテクトの採用が急務となった 2024-03-29 | スタートアップでシードからシリーズA のLaravel でどうアーキテクチャを変化させたのか? 34

Slide 35

Slide 35 text

無事採用できたため、次の体制で移行を推進していった アーキテクト アーキテクトが考えたことを実装するドライバー 機能実装を行う今まで所属していたメンバー 2024-03-29 | スタートアップでシードからシリーズA のLaravel でどうアーキテクチャを変化させたのか? 35

Slide 36

Slide 36 text

3. そのほかやったこと 3-1. アーキテクト図を用意 3-2. オンボーディング資料の充実 3-3. ドメインモデル図を用意 2024-03-29 | スタートアップでシードからシリーズA のLaravel でどうアーキテクチャを変化させたのか? 36

Slide 37

Slide 37 text

3-1. アーキテクト図を用意 2024-03-29 | スタートアップでシードからシリーズA のLaravel でどうアーキテクチャを変化させたのか? 37

Slide 38

Slide 38 text

3-2. オンボーディング資料の充実 2024-03-29 | スタートアップでシードからシリーズA のLaravel でどうアーキテクチャを変化させたのか? 38

Slide 39

Slide 39 text

3-3. ドメインモデル図を用意 2024-03-29 | スタートアップでシードからシリーズA のLaravel でどうアーキテクチャを変化させたのか? 39

Slide 40

Slide 40 text

3-3. ドメインモデル図を用意 2024-03-29 | スタートアップでシードからシリーズA のLaravel でどうアーキテクチャを変化させたのか? 40

Slide 41

Slide 41 text

アーキテクチャを考える上でのまとめ 2024-03-29 | スタートアップでシードからシリーズA のLaravel でどうアーキテクチャを変化させたのか? 41

Slide 42

Slide 42 text

アーキテクチャを考える上でのまとめ 1. 事業が増えると情報整理が急務になる 2. コンウェイの法則から逃れられない 3. オンボーディングの体験を上げるための工夫が必要 2024-03-29 | スタートアップでシードからシリーズA のLaravel でどうアーキテクチャを変化させたのか? 42

Slide 43

Slide 43 text

Personal Open Code! 実装の詳細を実際に見ながらやアーキテクチャについて議論した い! @suguru_ohki にDM かメッセくださいませ! 一緒に話してより良いアーキテクチャになるように議論したいです! 2024-03-29 | スタートアップでシードからシリーズA のLaravel でどうアーキテクチャを変化させたのか? 43

Slide 44

Slide 44 text

ご清聴ありがとうございました! 2024-03-29 | スタートアップでシードからシリーズA のLaravel でどうアーキテクチャを変化させたのか? 44

Slide 45

Slide 45 text

2024-03-29 | スタートアップでシードからシリーズA のLaravel でどうアーキテクチャを変化させたのか? 45