Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
デザインパターンを出自から深く理解する / understanding design patt...
Search
Kazuki Higashiguchi
October 11, 2019
Technology
7
5.2k
デザインパターンを出自から深く理解する / understanding design pattern from the origin
PHPカンファレンス沖縄 2019 前夜祭 で発表したデザインパターンの出自から特性を理解しようという内容です
Kazuki Higashiguchi
October 11, 2019
Tweet
Share
More Decks by Kazuki Higashiguchi
See All by Kazuki Higashiguchi
Cell-Based Architecture Design in AWS
hgsgtk
1
52
インフラコストとセキュリティ課題解決のためのリアーキテクチャリング / srekaigi2025
hgsgtk
3
5.5k
Design of a Stateful system for Robust Deployment and Observability
hgsgtk
0
1.3k
A guide to joining operational work in your new DevOps team
hgsgtk
1
1.4k
HTTP Tunneling in Go
hgsgtk
0
1.4k
ブラウザ自動操作技術の深層へ、直接触れて学ぶ WebDriver と Chrome DevTools Protocol
hgsgtk
3
6.6k
HTTP Server on random available port in Go
hgsgtk
0
1k
Agile Testingを夢見たテスト自動化 〜ATDDへの挑戦から始まる 1年間の試行錯誤〜 / dreaming agile testing at basebank
hgsgtk
14
7.9k
Create Go WebDriver client from scratch
hgsgtk
1
2.2k
Other Decks in Technology
See All in Technology
OPENLOGI Company Profile
hr01
0
61k
Proxmox VE超入門 〜 無料で作れるご自宅仮想化プラットフォームブックマークする
devops_vtj
0
160
移行できそうでやりきれなかった 10年超えのシステムを葬るための戦略
ryu955
2
520
モンテカルロ木探索のパフォーマンスを予測する Kaggleコンペ解説 〜生成AIによる未知のゲーム生成〜
rist
4
1.1k
17年のQA経験が導いたスクラムマスターへの道 / 17 Years in QA to Scrum Master
toma_sm
0
420
20250328_RubyKaigiで出会い鯛_____RubyKaigiから始まったはじめてのOSSコントリビュート.pdf
mterada1228
0
160
ウェブアクセシビリティとは
lycorptech_jp
PRO
0
300
20250326_管理ツールの権限管理で改善したこと
sasata299
1
390
年末調整プロダクトの内部品質改善活動について
kaomi_wombat
0
210
ペアプログラミングにQAが加わった!職能を超えたモブプログラミングの事例と学び
tonionagauzzi
1
150
RAGの基礎から実践運用まで:AWS BedrockとLangfuseで実現する構築・監視・評価
sonoda_mj
0
440
ISUCONにPHPで挑み続けてできるようになっ(てき)たこと / phperkaigi2025
blue_goheimochi
0
140
Featured
See All Featured
Building Adaptive Systems
keathley
41
2.5k
The Language of Interfaces
destraynor
157
24k
A Philosophy of Restraint
colly
203
16k
Understanding Cognitive Biases in Performance Measurement
bluesmoon
28
1.6k
GraphQLの誤解/rethinking-graphql
sonatard
70
10k
Practical Orchestrator
shlominoach
187
10k
個人開発の失敗を避けるイケてる考え方 / tips for indie hackers
panda_program
102
18k
Principles of Awesome APIs and How to Build Them.
keavy
126
17k
Stop Working from a Prison Cell
hatefulcrawdad
268
20k
Raft: Consensus for Rubyists
vanstee
137
6.9k
Unsuck your backbone
ammeep
670
57k
The Web Performance Landscape in 2024 [PerfNow 2024]
tammyeverts
4
500
Transcript
© - BASE, Inc. デザインパターンを 出⾃から深く理解する PHPカンファレンス沖縄 2019 前夜祭 .
. - @hgsgtk
© - BASE, Inc. 持ち帰っていただくこと • 「デザインパターン」を普段の視点ではあまり考え ない、その出⾃を視点に⾒る • 影響の⼤きい「パタン‧ランゲージ」を抑えた上
で、「デザインパターン」を⾒てみる
© - BASE, Inc. var_dump($hgsgtk); : @hgsgtk Kazuki Higashiguchi BASE
BANK, Inc. / Dev Division / Tech Lead Software Developer
© - BASE, Inc. デザインパターン パタン‧ランゲージ パタン‧ランゲージとデザインパターン ⽬次
© - BASE, Inc. デザインパターン パタン‧ランゲージ パタン‧ランゲージとデザインパターン ⽬次
© - BASE, Inc. デザインパターンとは • オブジェクト指向ソフトウェアを設計する際の経験 を記録、カタログ化したもの • ソフトウェア設計において繰り返し現れる構造をパ
ターンとしてまとめる • “種々の状況における設計上の⼀般的な問題の解法 に適⽤できるよう、オブジェクトやクラス間の通信 を記述したもの”
© - BASE, Inc. 1994年 GoF (Gang of Four) 1992年
OOPSLAで、Erich Gamma、Richard Helm、Ralph E. Johnson、John Matthew Vlissides の4⼈組が顔合わせ 1994年10⽉、書籍『オブジェクト指向における再利 ⽤のためのデザインパターン』を発表
© - BASE, Inc. 1994年『オブジェクト指向における再利⽤のためのデザインパターン』 https://www.amazon.co.jp/dp/
© - BASE, Inc. デザインパターン間の関連 https://www.simonvandyk.co.za/writes/ / / /software-design-patterns-in-c-uml
© - BASE, Inc. Abstract Factory Factory Method Singleton Builder
Prototype ⽣成に関するパターン
© - BASE, Inc. Adapter Composite Facade Bridge Decorator Flyweight
Proxy 構造に関するパターン
© - BASE, Inc. Chain of Responsibility Interpreter Mediator Command
Iterator Memento 振る舞いに関するパターン
© - BASE, Inc. デザインパターンのテンプレート(GoF Form)⼤枠 • パターン名: 設計における⽤語の語彙を増やすため •
問題: 問題と⽂脈 • 解法: 設計の要素、解法および責任、協調関係 • 結果: 適⽤した結果やトレードオフ
© - BASE, Inc. パターン名と分類 別名 適⽤可能性 ⽬的 動機 構造
協調関係 実装 構成要素 結果 デザインパターンのテンプレート(GoF Form)詳細
© - BASE, Inc. サンプルコード 関連するパターン 使⽤例 デザインパターンのテンプレート(GoF Form)
© - BASE, Inc. 例: Composite pattern https://www.codeproject.com/Articles/ /Illustrated-GOF-Design-Patterns-in-C-Part-II-Struc
© - BASE, Inc. パタン‧ランゲージの影響 “我々の成果は、Alexanderのものといろいろな意味 で似ている。どちらも、既存のシステムを観察してそ の中にあるパターンを⾒つけることを基礎に置いてい る。” ErichGamma、RichardHelm、RalphJohnson、JohnVlissides著∕本位⽥真⼀、吉⽥和樹監訳『オブジェクト指向における再利
⽤のためのデザインパターン改訂版』ソフトバンククリエイティブ、1999、p.
© - BASE, Inc. 参考: アレグザンダーの建築理論とソフトウェア設計の関係性 https://speakerdeck.com/hgsgtk/where-did-the-swing-metaphor-come-from
© - BASE, Inc. デザインパターンまとめ • Gang of Four •
パターンに名前がつけられ、同じテンプレートで表 現される • 「パタン‧ランゲージ」のアイデアに影響を受け “似て”いる
© - BASE, Inc. デザインパターン パタン‧ランゲージ パタン‧ランゲージとデザインパターン ⽬次
© - BASE, Inc. 1977年『パタン‧ランゲージ―環境設計の⼿引』 https://www.amazon.co.jp/dp/
1936年ウィーン出⾝の都市 計画家‧建築家 建築‧都市計画の理論とし て、「パタン‧ランゲージ」 を提唱 © - BASE, Inc. クリストファー‧アレグザンダー
https://en.wikipedia.org/wiki/Christopher_Alexander
© - BASE, Inc. 建築において繰り返し現れる構造を再利⽤しやすい形 式にまとめたもの 利⽤者と設計者の共通⾔語(ランゲージ)として使う ことで、利⽤者が⾃分⾃⾝で建築の設計を⾏い、本当 に望んだ建築を実現できるようになることを⽬指した パタン‧ランゲージ
© - BASE, Inc. 『パタン‧ランゲージ』の3つの部 「町」:都市の⼤きな配置を考えるための⼤きなパ ターン 「建築」:敷地の空間にどのように建物を配置すべき かというパターン 「施⾏」:建物の構造‧材料、柱‧壁、床‧天井など
の⼀つ⼀つの構造を決めるためのパターン
© - BASE, Inc. 『パタン‧ランゲージ』パタン例 町: ⾃⽴地域‧町の分布‧フィンガー上の都市と⽥園 ..etc 建築: 複号建物‧⾒えない駐⾞場‧窓のある場所
..etc 施⼯: ⽣活空間にしたがう構造‧深い窓枠 ..etc
© - BASE, Inc. パタンの相互関係 • パタンには序列がある • 町→建築→施⼯は直列的なつながりで機能する •
各パタンは、ランゲージの上位にある特定のパタ ン、下位にある特定のパタンと結びつく C‧アレグザンダー著∕平⽥ 翰那訳『パタン‧ランゲージ―環境設計の⼿引』あるパタン‧ランゲージ
© - BASE, Inc. パタン名 上位パタンへのつながり 下位パタンへのつながり 写真 本⽂ パタン‧ランゲージのテンプレート
例: パタン 180 WIDOW PLACE パタン名: 「窓のある場所」 上位パタンへのつながり: 「⽞関 室」‧「禅窓」‧「どの
部屋も2⾯採光」 ..etc 下位パタンへのつながり: 「アルコー ブ」‧「低い窓台」 ..etc © - BASE, Inc. C‧アレグザンダー著∕平⽥ 翰那訳『パタン‧ランゲージ―環境設計の⼿引』あるパタン‧ランゲージ https://www.pinterest.jp/pin/
© - BASE, Inc. パタン‧ランゲージまとめ • 繰り返し現れる構造を再利⽤しやすい形式にまとめ た • パタンのテンプレート(形式)を定義している
• 町‧建築‧施⼯の⼤きく3つの分類 • パタンごとに相互関係を持ち、パタンを関係の順に 適⽤していくことで建築物を⽣成する
© - BASE, Inc. デザインパターン パタン‧ランゲージ パタン‧ランゲージとデザインパターン ⽬次
© - BASE, Inc. パタン‧ランゲージとデザインパターンの相違点 .建築物には数千年の歴史があり、利⽤できる古典も多い。ソフトウェアシステ ムの場合は歴史がずっと短く、古典と呼べるものはほとんどない。 .Alexanderはパターンを利⽤する優先順位を付けたが、我々は順位を付けてい ない。 .Alexanderのパターンは扱う問題を強調しているが、我々のデザインパターン
は解決⽅法についてより詳細に記述している。 .Alexanderは提案したパターンによって完全な建築物が⽣成できると主張して いるが、我々は提案したパターンによって完全なプログラムが⽣成できるとは 主張していない。 ErichGamma、RichardHelm、RalphJohnson、JohnVlissides著∕本位⽥真⼀、吉⽥和樹監訳『オブジェクト指向における再利 ⽤のためのデザインパターン改訂版』ソフトバンククリエイティブ、1999、p.
© - BASE, Inc. 相違点はどこから “建築とソフトウェアの根本的な性質の違いからくると⾔える でしょう。⼈が暮らす町、建物、部屋は、⼈が⼈の姿と機能 を持っている限り、たとえば⾝⻑や体重が⼀定の範囲に収ま るといった暗黙の条件を備えています。しかしソフトウェア は、物としての実体を持っていないがゆえに、その前提条件を
暗黙の内に規定することはできません。” 江渡 浩⼀郎. パターン、Wiki、XP 時を超えた創造の原則 (WEB+DB PRESS plus) 9章 デザインパターン
© - BASE, Inc. デザインパターンだけでソフトウェア設計ができるわけではない “本書に⽰したパターンはパターン⾔語を構成しては いない。構築されたソフトウェアシステムの多様性を 考えると、ステップバイステップにアプリケーション 設計指針を与えるような 完璧な
パターン集合を提供 することは困難である” ErichGamma、RichardHelm、RalphJohnson、JohnVlissides著∕本位⽥真⼀、吉⽥和樹監訳『オブジェクト指向における再利 ⽤のためのデザインパターン改訂版』ソフトバンククリエイティブ、1999、p.
© - BASE, Inc. “デザインパターンは、ソフトウェア のための広範なパターン⾔語の⼀部に 過ぎない” ErichGamma、RichardHelm、RalphJohnson、JohnVlissides著∕本位⽥真⼀、吉⽥和樹監訳『オブジェクト指向における再利 ⽤のためのデザインパターン改訂版』ソフトバンククリエイティブ、1999、p.
© - BASE, Inc. パタン‧ランゲージとの対応 「町」 ≈ アーキテクチャ ex. Layers,
MVC etc 「建築」 ≈ GoFのデザインパターン 「施⾏」 ≈ 各⾔語での実装パターン ex. Smalltalkベストプラクティスパターン 書籍 江渡 浩⼀郎. パターン、Wiki、XP 時を超えた創造の原則
© - BASE, Inc. “つまり⾔語には2つの機能がある。⼈間の過去の体験 を蓄積する機能。もう1つは、その蓄積された体験 (単語)を再利⽤(⽂法)して、無数の新しい概念 (⽂章)を作り出すという機能である。” C‧アレグザンダー著∕平⽥ 翰那訳『パタン‧ランゲージ―環境設計の⼿引』訳者あとがき
© - BASE, Inc. このトークでやったこと • デザインパターンと、その出⾃ともいえるパタン‧ ランゲージを抑えた • デザインパターンという概念の輪郭を、類似するも
のと⽐較して捉え直した • デザインパターンという “⾔語” を基本に次の概念 が⽣まれているとも⾔える
© - BASE, Inc. まとめ(パターン作成者視点) • 名前をつけて⾔語とすることによる、経験の蓄積と 次の概念への発展の期待 • パターンを同じテンプレートで記述することによる
わかりやすさ
© - BASE, Inc. まとめ(パターン利⽤者視点) • デザインパターンは完全なソフトウェアを作るもの ではないことは、発案者⾃⾝が⾔っていることに留 意 •
全てを解決できるわけではないが、これをひとつの “⾔語” として現状使えている。設計の “⾔語” とし て活⽤できる便利さがパターンにはある
© - BASE, Inc. <?php . . - @hgsgtk