SlideShare a Scribd company logo
Laravelでクリーンアーキテクチャ
まつあき
お品書き
• 自己紹介
• クリーンアーキテクチャ?
• サービスの紹介
• 改善案
• クリーンアーキテクチャにしていこう
Laravel 聞いたことある人~?
でしたら、省きますね
クリーンなシステムの設計って?
ソフトウェア開発は経験則?
• ハードウェアは、ムーアの法則の様に指数関数的に性能が向上す
るが
• ソフトウェアは、劇的な変化はなく、多くの成功事例から類推される
型(アーキテクチャ)として作り上げればいいのでは?
SOLID
SOLIDとは
• 単一責任の原則(個々の機能とモジュールは独立)
• オープンクローズドの原則(機能変更はコードの追加によって実装)
• リスコフの置換原則(個々のモジュールは交換可能)
• インターフェイス分離の原則(UIとロジックは分離)
• 依存関係逆転の原則(上位の実装は下位のクラスに依存)
SOLIDとは
• 単一責任の原則(個々の機能とモジュールは独立)
• オープンクローズドの原則(機能変更はコードの追加によって実装)
• リスコフの置換原則(個々のモジュールは交換可能)
• インターフェイス分離の原則(UIとロジックは分離)
• 依存関係逆転の原則(上位の実装は下位のクラスに依存)
どこの実装で上位下位の境界線を引くのか
→ アーキテクチャの決定
クリーンアーキテクチャ
クリーンアーキテクチャ概略(コーン型)
クリーンアーキテクチャ概略
1層目
コアとなるビジネスロジック
文字コード、時刻
2層目
ユースケース ビジネスロジック
掲示板モデル、バリデーションルール
3層目
UIとデータの橋渡し役
ビュー、コントローラー、その他出力
4層目
外部の詳細
フレームワークも含まれる
Laravel MVC(掲示板機能)
Boardモデル
Board View Board Controller
Board Table
モデルコントローラービュー
参照・リクエスト
値の返却
Laravel
レンダー
User
LaravelのMVCモデルから
クリーンアーキテクチャへ移行
設計をし直す
Laravel MVC(掲示板機能)
Boardモデル
Board View Board Controller
Board Table
モデルコントローラービュー
参照・リクエスト
値の返却
Laravel
レンダー
User
境界線を引く
Laravel MVC(掲示板機能)
Boardモデル
Board View Board Controller
Board Table
モデルコントローラービュー
参照・リクエスト
値の返却
Laravel
レンダー
User
境界線を引く
Boardモデル
Board View Board Controller
Board Table
参照・リクエスト
値の返却
User
レンダー
あれ
4層目から直接2層目に参照している
もっていく関係性
Boardモデル
Board View Board Controller
Board Table
参照・リクエスト
値の返却
User
レンダー
ユースケース、抽象クラスを追加
Presenter
Board
Controller
Board
Table
Use Case
Interactor
View
Model
Input
Boundary
< I >
Output
Boundary
< I >
Output Data
< DS >
Input Data
< DS >
Data Access
Data Access
Interface
Entities
View
< I >
< DS >
依存
汎化
えぇっ・・・
例のあの図
色付け
Presenter
Board
Controller
Board
Table
Use Case
Interactor
View
Model
Input
Boundary
< I >
Output
Boundary
< I >
Output Data
< DS >
Input Data
< DS >
Data Access
Data Access
Interface
Entities
View
< I >
< DS >
MVCモデルからの新規実装箇所
Presenter
Board
Controller
Board
Table
Use Case
Interactor
View
Model
Input
Boundary
< I >
Output
Boundary
< I >
Output Data
< DS >
Input Data
< DS >
Data Access
Data Access
Interface
Entities
View
< I >
< DS >
Presenter
Board
Controller
Board
Table
Use Case
Interactor
View
Model
Input
Boundary
< I >
Output
Boundary
< I >
Output Data
< DS >
Input Data
< DS >
Data Access
Data Access
Interface
Entities
View
< I >
< DS >
GRUD実装
OutputDataへの出力
何がいいのか
クリーンアーキテクチャ
メリット
 レイヤーごとでテストができる
 フレームワークとの分離
デメリット
× 実装が煩雑になる
× フレームワークの便利な所に乗れない所がある(DIコンテナ、
Eloquent、ヘルパ等)
アーキテクチャを考えると
20
25
30
1 2 3
作業時間(分)
繰り返し回数
小規模プログラムの受け入れ
テスト完了までの制作時間
TDD 自由
同書のJ.Gorman の
実施結果より
リリースまでを考えた際には、
アーキテクチャを定められている
方が作業時間は結果的に少なく
なる。
(学習時間というコストを
前払いする必要があるが)
ありがとうございました
Presenter
Board
Controller
Board
Table
Use Case
Interactor
View
Model
Input
Boundary
< I >
Output
Boundary
< I >
Output Data
< DS >
Input Data
< DS >
Data Access
Data Access
Interface
Entities
View
< I >
< DS >
Board View
Board
Controller
Board
Table
Use Case
Interactor
View
Model
Input
Boundary
< I >
Output
Boundary
< I >
Output Data
< DS >
Input Data
< DS >
Data Access
Data Access
Interface
Entities
View

More Related Content

Similar to Clean architecture and Laravel

システム管理者向け、クラウドサービス「Oracle Management Cloud」で提供する3つの機能とは?~アプリケーション・パフォーマンス分析、ロ...
システム管理者向け、クラウドサービス「Oracle Management Cloud」で提供する3つの機能とは?~アプリケーション・パフォーマンス分析、ロ...システム管理者向け、クラウドサービス「Oracle Management Cloud」で提供する3つの機能とは?~アプリケーション・パフォーマンス分析、ロ...
システム管理者向け、クラウドサービス「Oracle Management Cloud」で提供する3つの機能とは?~アプリケーション・パフォーマンス分析、ロ...
オラクルエンジニア通信
 
日本で DevOps を ロケットスタートする方法
日本で DevOps を  ロケットスタートする方法日本で DevOps を  ロケットスタートする方法
日本で DevOps を ロケットスタートする方法
Puppet
 
テスト勉強会よしおか100311 1
テスト勉強会よしおか100311 1テスト勉強会よしおか100311 1
テスト勉強会よしおか100311 1
Hiro Yoshioka
 
マイクロサービスに至る歴史とこれから - XP祭り2021
マイクロサービスに至る歴史とこれから - XP祭り2021マイクロサービスに至る歴史とこれから - XP祭り2021
マイクロサービスに至る歴史とこれから - XP祭り2021
Yusuke Suzuki
 
クラウドが実現するソフト開発・運用の変革と自動化
クラウドが実現するソフト開発・運用の変革と自動化クラウドが実現するソフト開発・運用の変革と自動化
クラウドが実現するソフト開発・運用の変革と自動化Etsuji Nakai
 
ノンコーディングでサーバーレス体験。Azure Logic Apps のすゝめ
ノンコーディングでサーバーレス体験。Azure Logic Apps のすゝめノンコーディングでサーバーレス体験。Azure Logic Apps のすゝめ
ノンコーディングでサーバーレス体験。Azure Logic Apps のすゝめ
典子 松本
 
サービスをより“Stable”にする“ReactiveSystem”というアプローチ
サービスをより“Stable”にする“ReactiveSystem”というアプローチサービスをより“Stable”にする“ReactiveSystem”というアプローチ
サービスをより“Stable”にする“ReactiveSystem”というアプローチ
Rakuten Group, Inc.
 
OSC2018 hiroshima session slide by OSSC
OSC2018 hiroshima session slide by OSSCOSC2018 hiroshima session slide by OSSC
OSC2018 hiroshima session slide by OSSC
Daisuke Nishino
 
10年前から始まったマイクロソフトのDevOps~今とこれから~
10年前から始まったマイクロソフトのDevOps~今とこれから~10年前から始まったマイクロソフトのDevOps~今とこれから~
10年前から始まったマイクロソフトのDevOps~今とこれから~
智治 長沢
 
設計/アーキテクチャ設計 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第19回】
設計/アーキテクチャ設計 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第19回】設計/アーキテクチャ設計 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第19回】
設計/アーキテクチャ設計 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第19回】
Tomoharu ASAMI
 
2015-09-01 クラウド時代の運用エンジニアは何が変わるのか
2015-09-01 クラウド時代の運用エンジニアは何が変わるのか2015-09-01 クラウド時代の運用エンジニアは何が変わるのか
2015-09-01 クラウド時代の運用エンジニアは何が変わるのか
Operation Lab, LLC.
 
Dockerとdev ops
Dockerとdev opsDockerとdev ops
Dockerとdev ops
Hiroshi Maekawa
 
本格的にコンテナを利用するために ~ Azureでのコンテナ利用パターン
本格的にコンテナを利用するために ~ Azureでのコンテナ利用パターン本格的にコンテナを利用するために ~ Azureでのコンテナ利用パターン
本格的にコンテナを利用するために ~ Azureでのコンテナ利用パターン
雄哉 吉田
 
CleanArchitecture 第4部 「コンポーネントの原則」
CleanArchitecture 第4部 「コンポーネントの原則」CleanArchitecture 第4部 「コンポーネントの原則」
CleanArchitecture 第4部 「コンポーネントの原則」
鈴木 セシル
 
オープンソース・データベースの最新事情
オープンソース・データベースの最新事情オープンソース・データベースの最新事情
オープンソース・データベースの最新事情
Meiji Kimura
 
JVRC Tutorial
JVRC TutorialJVRC Tutorial
JVRC Tutorial
Yosuke Matsusaka
 
Kaleidox
KaleidoxKaleidox
Kaleidox
Tomoharu ASAMI
 
2015-05-23 クラウドの運用になって インフラエンジニアは何が変わるのか?
2015-05-23 クラウドの運用になって インフラエンジニアは何が変わるのか?2015-05-23 クラウドの運用になって インフラエンジニアは何が変わるのか?
2015-05-23 クラウドの運用になって インフラエンジニアは何が変わるのか?
Operation Lab, LLC.
 
Php勉強会スライド
Php勉強会スライドPhp勉強会スライド
Php勉強会スライド
suzumurashingo
 
大規模ソフトウェア開発とテストの経験について
大規模ソフトウェア開発とテストの経験について大規模ソフトウェア開発とテストの経験について
大規模ソフトウェア開発とテストの経験について
Rakuten Group, Inc.
 

Similar to Clean architecture and Laravel (20)

システム管理者向け、クラウドサービス「Oracle Management Cloud」で提供する3つの機能とは?~アプリケーション・パフォーマンス分析、ロ...
システム管理者向け、クラウドサービス「Oracle Management Cloud」で提供する3つの機能とは?~アプリケーション・パフォーマンス分析、ロ...システム管理者向け、クラウドサービス「Oracle Management Cloud」で提供する3つの機能とは?~アプリケーション・パフォーマンス分析、ロ...
システム管理者向け、クラウドサービス「Oracle Management Cloud」で提供する3つの機能とは?~アプリケーション・パフォーマンス分析、ロ...
 
日本で DevOps を ロケットスタートする方法
日本で DevOps を  ロケットスタートする方法日本で DevOps を  ロケットスタートする方法
日本で DevOps を ロケットスタートする方法
 
テスト勉強会よしおか100311 1
テスト勉強会よしおか100311 1テスト勉強会よしおか100311 1
テスト勉強会よしおか100311 1
 
マイクロサービスに至る歴史とこれから - XP祭り2021
マイクロサービスに至る歴史とこれから - XP祭り2021マイクロサービスに至る歴史とこれから - XP祭り2021
マイクロサービスに至る歴史とこれから - XP祭り2021
 
クラウドが実現するソフト開発・運用の変革と自動化
クラウドが実現するソフト開発・運用の変革と自動化クラウドが実現するソフト開発・運用の変革と自動化
クラウドが実現するソフト開発・運用の変革と自動化
 
ノンコーディングでサーバーレス体験。Azure Logic Apps のすゝめ
ノンコーディングでサーバーレス体験。Azure Logic Apps のすゝめノンコーディングでサーバーレス体験。Azure Logic Apps のすゝめ
ノンコーディングでサーバーレス体験。Azure Logic Apps のすゝめ
 
サービスをより“Stable”にする“ReactiveSystem”というアプローチ
サービスをより“Stable”にする“ReactiveSystem”というアプローチサービスをより“Stable”にする“ReactiveSystem”というアプローチ
サービスをより“Stable”にする“ReactiveSystem”というアプローチ
 
OSC2018 hiroshima session slide by OSSC
OSC2018 hiroshima session slide by OSSCOSC2018 hiroshima session slide by OSSC
OSC2018 hiroshima session slide by OSSC
 
10年前から始まったマイクロソフトのDevOps~今とこれから~
10年前から始まったマイクロソフトのDevOps~今とこれから~10年前から始まったマイクロソフトのDevOps~今とこれから~
10年前から始まったマイクロソフトのDevOps~今とこれから~
 
設計/アーキテクチャ設計 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第19回】
設計/アーキテクチャ設計 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第19回】設計/アーキテクチャ設計 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第19回】
設計/アーキテクチャ設計 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第19回】
 
2015-09-01 クラウド時代の運用エンジニアは何が変わるのか
2015-09-01 クラウド時代の運用エンジニアは何が変わるのか2015-09-01 クラウド時代の運用エンジニアは何が変わるのか
2015-09-01 クラウド時代の運用エンジニアは何が変わるのか
 
Dockerとdev ops
Dockerとdev opsDockerとdev ops
Dockerとdev ops
 
本格的にコンテナを利用するために ~ Azureでのコンテナ利用パターン
本格的にコンテナを利用するために ~ Azureでのコンテナ利用パターン本格的にコンテナを利用するために ~ Azureでのコンテナ利用パターン
本格的にコンテナを利用するために ~ Azureでのコンテナ利用パターン
 
CleanArchitecture 第4部 「コンポーネントの原則」
CleanArchitecture 第4部 「コンポーネントの原則」CleanArchitecture 第4部 「コンポーネントの原則」
CleanArchitecture 第4部 「コンポーネントの原則」
 
オープンソース・データベースの最新事情
オープンソース・データベースの最新事情オープンソース・データベースの最新事情
オープンソース・データベースの最新事情
 
JVRC Tutorial
JVRC TutorialJVRC Tutorial
JVRC Tutorial
 
Kaleidox
KaleidoxKaleidox
Kaleidox
 
2015-05-23 クラウドの運用になって インフラエンジニアは何が変わるのか?
2015-05-23 クラウドの運用になって インフラエンジニアは何が変わるのか?2015-05-23 クラウドの運用になって インフラエンジニアは何が変わるのか?
2015-05-23 クラウドの運用になって インフラエンジニアは何が変わるのか?
 
Php勉強会スライド
Php勉強会スライドPhp勉強会スライド
Php勉強会スライド
 
大規模ソフトウェア開発とテストの経験について
大規模ソフトウェア開発とテストの経験について大規模ソフトウェア開発とテストの経験について
大規模ソフトウェア開発とテストの経験について
 

Recently uploaded

アジャイルの30年(Tree Decades of Agileというブログ記事に関する要約)
アジャイルの30年(Tree Decades of Agileというブログ記事に関する要約)アジャイルの30年(Tree Decades of Agileというブログ記事に関する要約)
アジャイルの30年(Tree Decades of Agileというブログ記事に関する要約)
You&I
 
Solanaで始めるRustプログラミング - Superteam Japan Developer Event
Solanaで始めるRustプログラミング - Superteam Japan Developer EventSolanaで始めるRustプログラミング - Superteam Japan Developer Event
Solanaで始めるRustプログラミング - Superteam Japan Developer Event
K Kinzal
 
NIST Cybersecurity Framework 2.0の変更点整理をしよう
NIST Cybersecurity Framework 2.0の変更点整理をしようNIST Cybersecurity Framework 2.0の変更点整理をしよう
NIST Cybersecurity Framework 2.0の変更点整理をしよう
You&I
 
クラウドネイティブにおけるセキュアなソフトウェア・サプライ・チェーンの考え方とベストプラクティス.pdf
クラウドネイティブにおけるセキュアなソフトウェア・サプライ・チェーンの考え方とベストプラクティス.pdfクラウドネイティブにおけるセキュアなソフトウェア・サプライ・チェーンの考え方とベストプラクティス.pdf
クラウドネイティブにおけるセキュアなソフトウェア・サプライ・チェーンの考え方とベストプラクティス.pdf
TatsuyaHanayama
 
CO2排出量見える化・削減・報告クラウド「アスエネ」サービス紹介_Saleshub.pdf
CO2排出量見える化・削減・報告クラウド「アスエネ」サービス紹介_Saleshub.pdfCO2排出量見える化・削減・報告クラウド「アスエネ」サービス紹介_Saleshub.pdf
CO2排出量見える化・削減・報告クラウド「アスエネ」サービス紹介_Saleshub.pdf
yamamotominami
 
シグネチャで始めるRustプログラミング - Superteam Japan Developer Event
シグネチャで始めるRustプログラミング - Superteam Japan Developer Eventシグネチャで始めるRustプログラミング - Superteam Japan Developer Event
シグネチャで始めるRustプログラミング - Superteam Japan Developer Event
K Kinzal
 

Recently uploaded (6)

アジャイルの30年(Tree Decades of Agileというブログ記事に関する要約)
アジャイルの30年(Tree Decades of Agileというブログ記事に関する要約)アジャイルの30年(Tree Decades of Agileというブログ記事に関する要約)
アジャイルの30年(Tree Decades of Agileというブログ記事に関する要約)
 
Solanaで始めるRustプログラミング - Superteam Japan Developer Event
Solanaで始めるRustプログラミング - Superteam Japan Developer EventSolanaで始めるRustプログラミング - Superteam Japan Developer Event
Solanaで始めるRustプログラミング - Superteam Japan Developer Event
 
NIST Cybersecurity Framework 2.0の変更点整理をしよう
NIST Cybersecurity Framework 2.0の変更点整理をしようNIST Cybersecurity Framework 2.0の変更点整理をしよう
NIST Cybersecurity Framework 2.0の変更点整理をしよう
 
クラウドネイティブにおけるセキュアなソフトウェア・サプライ・チェーンの考え方とベストプラクティス.pdf
クラウドネイティブにおけるセキュアなソフトウェア・サプライ・チェーンの考え方とベストプラクティス.pdfクラウドネイティブにおけるセキュアなソフトウェア・サプライ・チェーンの考え方とベストプラクティス.pdf
クラウドネイティブにおけるセキュアなソフトウェア・サプライ・チェーンの考え方とベストプラクティス.pdf
 
CO2排出量見える化・削減・報告クラウド「アスエネ」サービス紹介_Saleshub.pdf
CO2排出量見える化・削減・報告クラウド「アスエネ」サービス紹介_Saleshub.pdfCO2排出量見える化・削減・報告クラウド「アスエネ」サービス紹介_Saleshub.pdf
CO2排出量見える化・削減・報告クラウド「アスエネ」サービス紹介_Saleshub.pdf
 
シグネチャで始めるRustプログラミング - Superteam Japan Developer Event
シグネチャで始めるRustプログラミング - Superteam Japan Developer Eventシグネチャで始めるRustプログラミング - Superteam Japan Developer Event
シグネチャで始めるRustプログラミング - Superteam Japan Developer Event
 

Clean architecture and Laravel