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
ドメイン駆動設計の考えを もとに競合優位性や アウトカムを得る 鈴木まー 第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
ご清聴ありがとう ございました!!