Link
Embed
Share
Beginning
This slide
Copy link URL
Copy link URL
Copy iframe embed code
Copy iframe embed code
Copy javascript embed code
Copy javascript embed code
Share
Tweet
Share
Tweet
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