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 php framework
Search
Haruki Tazoe
July 17, 2021
Programming
0
280
陽気なギャングが「行けたら行くぜ」って言ってたよ #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
41
フレームワークの内部構造を理解するためにフレームワークを作ってみることにした / phpcon-2021
jdkfx
2
1k
Svelte/Sapperで自作ブログをやってみる - Create a blog with Svelte/Sapper
jdkfx
0
140
hiro-it-35
jdkfx
0
590
PHPのオープンソースフレームワークLaravelについて
jdkfx
0
56
フロントにおけるLaravel Laravel.hiroshima
jdkfx
0
180
Other Decks in Programming
See All in Programming
Flutterアプリを GitHub Actions & Xcode Cloud で社内配布する / Distribute Flutter apps internally
takasfz
0
120
BuefyのMaintainerを引き継いだ件
kikuomax
0
320
decksh - a little language for decks
ajstarks
4
18k
Running Laravel Apps With FrankenPHP
dunglas
4
1.2k
document.write再考
brn
5
1.8k
sbt-assemblyにハマってDB接続できず時間が溶けた話
wakye5815
1
660
ログラスの継続的なプロンプト改善のためのLLMOpsの今 / LLMOps at loglass now
rkaga
PRO
1
330
Cloud RunとCloud PubSubでサーバレスなデータ基盤2024 with Terraform / Cloud Run and PubSub with Terraform
shinyorke
7
1.7k
軽率にVue 3で リアルタイム3Dアプリを作れる ライブラリを作ってみた/vue-with-3d-app
drumath2237
3
1.1k
PHP で読む楽しいコアダンプ
sji
0
210
Learning PHP and Static Analysis with PHP Parser
inouehi
1
220
プログラミングを楽しもう! / Enjoy Programming
chobishiba
1
680
Featured
See All Featured
Reflections from 52 weeks, 52 projects
jeffersonlam
343
19k
WebSockets: Embracing the real-time Web
robhawkes
59
6.9k
YesSQL, Process and Tooling at Scale
rocio
160
13k
Why Our Code Smells
bkeepers
PRO
330
56k
[RailsConf 2023 Opening Keynote] The Magic of Rails
eileencodes
8
8.2k
Infographics Made Easy
chrislema
237
17k
Building a Scalable Design System with Sketch
lauravandoore
455
32k
Designing the Hi-DPI Web
ddemaree
275
33k
XXLCSS - How to scale CSS and keep your sanity
sugarenia
240
1.2M
実際に使うSQLの書き方 徹底解説 / pgcon21j-tutorial
soudai
111
35k
The Psychology of Web Performance [Beyond Tellerrand 2023]
tammyeverts
4
1.4k
Building Adaptive Systems
keathley
29
1.8k
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パターン • この辺あたりから導入を目指していこう • 今度こそは陽気なギャングが来てくれると信じて…
最後に • 今年の夏は自作フレームワークの夏にしませんか?
ありがとうございました