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
ドキュメント翻訳で学ぶ新しい言語仕様・機能
jdkfx
1
160
ゼミ内LT「Web API: The Good Parts」 を読みました - I read "Web API: The Good Parts".
jdkfx
0
49
フレームワークの内部構造を理解するためにフレームワークを作ってみることにした / 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
81
フロントにおけるLaravel Laravel.hiroshima
jdkfx
0
200
Other Decks in Programming
See All in Programming
アクターシステムに頼らずEvent Sourcingする方法について
j5ik2o
4
290
なまけものオバケたち -PHP 8.4 に入った新機能の紹介-
tanakahisateru
1
120
どうして手を動かすよりもチーム内のコードレビューを優先するべきなのか
okashoi
3
160
Stackless и stackful? Корутины и асинхронность в Go
lamodatech
0
830
暇に任せてProxmoxコンソール 作ってみました
karugamo
2
720
Security_for_introducing_eBPF
kentatada
0
110
たのしいparse.y
ydah
3
120
これが俺の”自分戦略” プロセスを楽しんでいこう! - Developers CAREER Boost 2024
niftycorp
PRO
0
190
責務を分離するための例外設計 - PHPカンファレンス 2024
kajitack
6
1.4k
return文におけるstd::moveについて
onihusube
1
1.2k
Итераторы в Go 1.23: зачем они нужны, как использовать, и насколько они быстрые?
lamodatech
0
840
fs2-io を試してたらバグを見つけて直した話
chencmd
0
240
Featured
See All Featured
[Rails World 2023 - Day 1 Closing Keynote] - The Magic of Rails
eileencodes
33
2k
Scaling GitHub
holman
458
140k
Build your cross-platform service in a week with App Engine
jlugia
229
18k
Helping Users Find Their Own Way: Creating Modern Search Experiences
danielanewman
29
2.3k
RailsConf & Balkan Ruby 2019: The Past, Present, and Future of Rails at GitHub
eileencodes
132
33k
Visualization
eitanlees
146
15k
Rebuilding a faster, lazier Slack
samanthasiow
79
8.7k
GitHub's CSS Performance
jonrohan
1030
460k
Put a Button on it: Removing Barriers to Going Fast.
kastner
59
3.6k
Typedesign – Prime Four
hannesfritz
40
2.4k
Being A Developer After 40
akosma
87
590k
The Straight Up "How To Draw Better" Workshop
denniskardys
232
140k
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パターン • この辺あたりから導入を目指していこう • 今度こそは陽気なギャングが来てくれると信じて…
最後に • 今年の夏は自作フレームワークの夏にしませんか?
ありがとうございました