Slide 1

Slide 1 text

ドメイン駆動設計の考えを もとに競合優位性や アウトカムを得る 鈴木まー 第170回 PHP勉強会@東京

Slide 2

Slide 2 text

鈴木まー (suzuki_mar) CDNを使った プロレス団体の公式サイトやQRコードを利用したチ ケット取り置き機能などを開発しています AirTableのORM風の ライブラリーを開発しています (公式のPHPのライブラリーはなかったので) 今は無職で 来年1月から転職活動をします 今回の登壇などで興味を持っていただいたカ ジュアル面談をしてください @suzuki_mar

Slide 3

Slide 3 text

ドメイン駆動設計の重要な ことはプロダクトの アウトカム を理解してその 価値を高める @suzuki_mar

Slide 4

Slide 4 text

アウトカムとは 開発している プロダクトの存在価値 @suzuki_mar

Slide 5

Slide 5 text

アウトプットとは どう違うの? @suzuki_mar

Slide 6

Slide 6 text

アウトプット @suzuki_mar 開発した機能などの成果物

Slide 7

Slide 7 text

アウトプット アウトカム @suzuki_mar 開発した機能などの成果物 プロダクトや機能の利用による 目的達成や使い続ける理由

Slide 8

Slide 8 text

いくら機能を開発してもアウトカムについ て理解して開発をしなかったら プロダクトが成長しない プロダクト開発ではアウトカムを考えて見 つけていくのを繰り返していくのが重要 @suzuki_mar

Slide 9

Slide 9 text

実際にアウトカム とはどいうのか @suzuki_mar

Slide 10

Slide 10 text

@suzuki_mar Xのアウトカム ユーザーが他のユーザーとリアルタイムで 交流し、情報を共有し合うことによって 新しいインプットをえて、 そこからアウトプットをする 鈴木の視点からみたアウトカム

Slide 11

Slide 11 text

@suzuki_mar Spotifyのアウトカム 音楽を最適なレコメンドすることにより ユーザーの利用シーンに応じた必要なタイ ミングで理想の音楽を見つけられる 鈴木の視点からみたアウトカム

Slide 12

Slide 12 text

アウトカムに もとづいた開発方針 @suzuki_mar

Slide 13

Slide 13 text

ドメイン駆動設計の開発 する方針は 次の3つに分けられる @suzuki_mar

Slide 14

Slide 14 text

@suzuki_mar 中核の業務領域(コアサブドメイン) 補完的な業務領域(支援サブドメイン) 一般的な業務領域(汎用サブドメイン) 注意  本来はコンテキストマップを使って関係性を整理する ことが重要ですが、今回はその部分は割愛して説明します

Slide 15

Slide 15 text

補完的な業務領域(支援サブドメイン) プロダクトのアウトカムをうむことはないけど これらの機能がないとユーザーは アウトカムをえることができない Twitterの投稿機能 Soptifyの音楽再生機能 @suzuki_mar

Slide 16

Slide 16 text

補完的な業務領域(支援サブドメイン) 開発方針 アウトカムをうまないため 一度開発されたら変更されることはすくないため いかに楽をして開発をするのかを重視する コードの内部品質が低くてもよい 例えばPHPStanを適用しないなど @suzuki_mar

Slide 17

Slide 17 text

一般的な業務領域(汎用サブドメイン) プロダクトを使う上では必須で 複雑だけどすでにOSSとしてライブラリーが公開さ れていたりSaaSなどが提供されている ユーザー登録、認証認可 メールなどの各種通知機能 @suzuki_mar

Slide 18

Slide 18 text

一般的な業務領域(汎用サブドメイン) 開発方針 すでに機能があって当然なので競合差別化は できないただ、開発することは難しいので 外部のライブラリーやSaaSを使って 開発を楽にする @suzuki_mar

Slide 19

Slide 19 text

No content

Slide 20

Slide 20 text

oauth2のライブラリーを使って認証処理 を簡単に実装している

Slide 21

Slide 21 text

中核の業務領域(コアサブドメイン) 競合差別化にったり、ユーザーが プロダクトを使い続けてくれるための機能 プロダクト開発はこの領域をいかに よく開発してくれるかを理解しながら開発する できるだけ開発リソースを集中する @suzuki_mar

Slide 22

Slide 22 text

中核の業務領域(コアサブドメイン) @suzuki_mar 他のユーザーとリアルタイムで交流し、情 報を共有し合いインプットをしたり アウトプットをする 音楽を最適なレコメンドすることにより シーンにあった音楽を聞くことができる

Slide 23

Slide 23 text

中核の業務領域(コアサブドメイン) 開発方針 これにカテゴリーされている機能を 開発にすることによってアウトカムが生まれる アウトカムを生み出すために、継続的な機能追加を行 い、開発リソースを優先的に投入する必要がある @suzuki_mar

Slide 24

Slide 24 text

有用なテストコードを書いていくリファクタリングを頻繁に 繰り返して機能追加をおこないやすくする 設計原則やデザインパターンを適切に使用する PHPStanなどを使用しながら型をしっかりと書いていく PHPの新しい機能を使用してコードの品質をあげるものを使用していく @suzuki_mar どのようなことをするのか コードの内部品質を高めるために あらゆることをする

Slide 25

Slide 25 text

@suzuki_mar 特にコードの内部品質を高くしたほうがいいところ 変更容易性を高くする 中核な業務領域はプロダクトのアウトカムを最適な形で提供するため に変更しやすくする必要がある テスト容易性を高くする 変更する頻度が多いためリファクタリングをしていく必要がある  その 時に安全にリファクタリングをしていけるようにする

Slide 26

Slide 26 text

No content

Slide 27

Slide 27 text

Serviceクラスを使ってmain処理から 注文の処理の詳細を隠蔽している Cartのモデルクラスを使ってモデリングをしている

Slide 28

Slide 28 text

引用: ドメイン駆動設計を始めよう1.2.2.4  開発の基本方針 表 1-1 Sotifyにおける機能は鈴木が追記

Slide 29

Slide 29 text

興味を持った方に  今回あげたアウトカムの考え方や業務 領域の考え方などプロダクトを理解し ていく考え方 それを実装するための方法など 良いプロダクト開発をしていくために 重要な考え方を わかりやすく解説しています イベント駆動なども解説しています

Slide 30

Slide 30 text

ご清聴ありがとう ございました!!