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
陽気なギャングが「行けたら行くぜ」って言ってたよ #23grads / Building a ...
Search
Haruki Tazoe
July 17, 2021
Programming
0
320
陽気なギャングが「行けたら行くぜ」って言ってたよ #23grads / Building a php framework
Haruki Tazoe
July 17, 2021
Tweet
Share
More Decks by Haruki Tazoe
See All by Haruki Tazoe
ゼミ内LT「Web API: The Good Parts」 を読みました - I read "Web API: The Good Parts".
jdkfx
0
47
フレームワークの内部構造を理解するためにフレームワークを作ってみることにした / phpcon-2021
jdkfx
2
1.1k
Svelte/Sapperで自作ブログをやってみる - Create a blog with Svelte/Sapper
jdkfx
0
170
hiro-it-35
jdkfx
0
640
PHPのオープンソースフレームワークLaravelについて
jdkfx
0
78
フロントにおけるLaravel Laravel.hiroshima
jdkfx
0
190
Other Decks in Programming
See All in Programming
Hotwire or React? ~アフタートーク・本編に含めなかった話~ / Hotwire or React? after talk
harunatsujita
1
120
3 Effective Rules for Using Signals in Angular
manfredsteyer
PRO
1
100
色々なIaCツールを実際に触って比較してみる
iriikeita
0
330
Less waste, more joy, and a lot more green: How Quarkus makes Java better
hollycummins
0
100
Jakarta EE meets AI
ivargrimstad
0
620
cmp.Or に感動した
otakakot
3
200
watsonx.ai Dojo #4 生成AIを使ったアプリ開発、応用編
oniak3ibm
PRO
1
150
ペアーズにおけるAmazon Bedrockを⽤いた障害対応⽀援 ⽣成AIツールの導⼊事例 @ 20241115配信AWSウェビナー登壇
fukubaka0825
6
2k
Amazon Bedrock Agentsを用いてアプリ開発してみた!
har1101
0
340
Ethereum_.pdf
nekomatu
0
470
初めてDefinitelyTypedにPRを出した話
syumai
0
420
どうして僕の作ったクラスが手続き型と言われなきゃいけないんですか
akikogoto
1
120
Featured
See All Featured
CoffeeScript is Beautiful & I Never Want to Write Plain JavaScript Again
sstephenson
159
15k
The Power of CSS Pseudo Elements
geoffreycrofte
73
5.3k
Happy Clients
brianwarren
98
6.7k
Practical Orchestrator
shlominoach
186
10k
Docker and Python
trallard
40
3.1k
Large-scale JavaScript Application Architecture
addyosmani
510
110k
Raft: Consensus for Rubyists
vanstee
136
6.6k
Why You Should Never Use an ORM
jnunemaker
PRO
54
9.1k
StorybookのUI Testing Handbookを読んだ
zakiyama
27
5.3k
Teambox: Starting and Learning
jrom
133
8.8k
Site-Speed That Sticks
csswizardry
0
28
Optimizing for Happiness
mojombo
376
70k
Transcript
陽気なギャングが 「行けたら行くぜ」って 言ってたよ 田添春樹 @jdkfx
田添春樹 広島工業大学・情報学部 趣味: プログラミング,ツーリング,レース観戦, 読書,映画鑑賞,音楽鑑賞など… @jdkfx jdkfx
None
最近の活動 • 物理CPUの構築
最近の活動 • 自作フレームワークの作成 https://github.com/jdkfx/phrame 今日の話題
質問
Q.フレームワークはお好きですか?
A.はい,大好きです.
Q.フレームワークの 内部構造理解してますか?
A.いや,ちょっと…汗
アジェンダ • 自作フレームワークを作ってみる • Model,View,Controllerについて理解を深めてみる • GoFのデザインパターンを使って,よりよいフレームワークへ • 今後の展望
アジェンダ • 自作フレームワークを作ってみる • Model,View,Controllerについて理解を深めてみる • GoFのデザインパターンを使って,よりよいフレームワークへ • 今後の展望
自作フレームワークを作ってみる
動機 • フレームワークの内部構造への理解 • オブジェクト指向への理解 • 自身の”phper力”を鍛えるため • フレームワークを作っている人への憧れ •
なんかカッコいいから
作る前の僕 • Laravelのアプリケーションコードはよく書いていた • phpでのフルスクラッチ開発経験は特になし • オブジェクト指向,まあまあワカル
何から始めようか問題 • フレームワークが提供する機能はとにかく多い • Laravelを例にすると… Eloquent ORM,Façade,DI,サービスコンテナ…
何から始めようか問題 • やることは多いけれど, それが最終形態であって最初のコミットはみんな”phpinfo();” • とにかく簡単なことから手を動かしていきます
https://speakerdeck.com/uzulla/gui-tutekita-ping-cheng-zui-hou-falseoreorehuremuwakufalsezuo-rifang
None
• .htaccessとdocker-compose.ymlでドキュメントルートの設定 index.phpで終わらせない
GETとindex.php • この時点では,index.phpが後述のコントローラーの役割担当
GETとindex.php index.phpの抜粋 Blog.php https://github.com/jdkfx/phrame/commit/e6 5dbcdcc75a23cc24c5858c6a342727a59c95c1
アジェンダ • 自作フレームワークを作ってみる • Model,View,Controllerについて理解を深めてみる • GoFのデザインパターンを使って,よりよいフレームワークへ • 今後の展望
Model,View,Controllerについて 理解を深めてみる
Modelとは • 選び抜かれてシンプルにされ,意図的に組み立てられた知識の 表現形式 • 個人の持つメンタルモデルが概念モデルを経て, ドメインモデルへと変換されたもの • ドメインモデルとはドメイン(目的)を 情報処理システム(手段)によってモデル化したもの
https://speakerdeck.com/tenjuu99/what-mvc-is
https://speakerdeck.com/tenjuu99/what-mvc-is
Modelとは • 具体的な処理 • アプリケーションのドメインに関する部分の担当 • 送信されたデータの保存や更新,削除などの処理を行う
View,Controllerとは • Viewの具体的な処理 • 表示部分やフォームなどの入出力を担当 • Modelに保存されているデータを表示 • Controllerの具体的な処理 •
ModelとViewの間で仲介役のような役割を行う • Modelにリクエストされたデータを受け渡し, レスポンスされたデータをViewに受け渡す
https://speakerdeck.com/tenjuu99/what-mvc-is
https://folk.universitetetioslo.no/trygver/themes/mvc/mvc-index.html
https://speakerdeck.com/tenjuu99/what-mvc-is
フレームワークのリファクタリング
index.php
Router
Model
Controller
https://jdkfx.com/blog/building-a-php-framework
アジェンダ • 自作フレームワークを作ってみる • Model,View,Controllerについて理解を深めてみる • GoFのデザインパターンを使って,よりよいフレームワークへ • 今後の展望
GoFのデザインパターンを使って よりよいフレームワークへ
GoFのデザインパターン • 開発者による「経験」や「内的な蓄積」としてのパターン • Erich Gamma, Richard Helm, Ralph Johnson,
John Vlissides のthe Gang of Fourによって整理されたもの • タイトルの陽気なギャングはこのことなんですね…(小声) Java言語で学ぶデザインパターン入門
フレームワークに使用される デザインパターン • Laravelを例にすると… • Eloquent ORM – Active Recordパターン
• Façade – Proxyパターン • サービスコンテナ – Dependency Injectionパターン (スライド16枚目から再掲)
自作フレームワークへの導入 • 自作フレームワークへデザインパターンを導入をしてみる つもりでしたが…
自作フレームワークへの導入 • 実装量が少なくて,デザインパターンを導入するメリットが 見つからないため,今回は諦めました • 陽気なギャングは来てくれませんでした
アジェンダ • 自作フレームワークを作ってみる • Model,View,Controllerについて理解を深めてみる • GoFのデザインパターンを使って,よりよいフレームワークへ • 今後の展望
今後の展望
フレームワークの充実 • DI”風”コンテナ • テンプレートエンジン • CSRF Tokenなどのセキュリティ • Sessionの活用
• 高度な検索などのDB操作を行う処理
デザインパターンの導入 • Façadeパターン • Proxyパターン • この辺あたりから導入を目指していこう • 今度こそは陽気なギャングが来てくれると信じて…
最後に • 今年の夏は自作フレームワークの夏にしませんか?
ありがとうございました