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
Generative AI Use Cases JP (略称:GenU)奮闘記
hideg
1
290
Jakarta EE meets AI
ivargrimstad
0
140
AI時代におけるSRE、 あるいはエンジニアの生存戦略
pyama86
6
1.1k
Kaigi on Rails 2024 〜運営の裏側〜
krpk1900
1
200
Make Impossible States Impossibleを 意識してReactのPropsを設計しよう
ikumatadokoro
0
170
Duckdb-Wasmでローカルダッシュボードを作ってみた
nkforwork
0
120
シェーダーで魅せるMapLibreの動的ラスタータイル
satoshi7190
1
480
Nurturing OpenJDK distribution: Eclipse Temurin Success History and plan
ivargrimstad
0
890
ローコードSaaSのUXを向上させるためのTypeScript
taro28
1
610
cmp.Or に感動した
otakakot
2
140
ピラミッド、アイスクリームコーン、SMURF: 自動テストの最適バランスを求めて / Pyramid Ice-Cream-Cone and SMURF
twada
PRO
10
1.3k
C++でシェーダを書く
fadis
6
4.1k
Featured
See All Featured
Imperfection Machines: The Place of Print at Facebook
scottboms
265
13k
10 Git Anti Patterns You Should be Aware of
lemiorhan
654
59k
Music & Morning Musume
bryan
46
6.2k
Unsuck your backbone
ammeep
668
57k
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
27
4.3k
Embracing the Ebb and Flow
colly
84
4.5k
The Language of Interfaces
destraynor
154
24k
Building Flexible Design Systems
yeseniaperezcruz
327
38k
The Pragmatic Product Professional
lauravandoore
31
6.3k
CSS Pre-Processors: Stylus, Less & Sass
bermonpainter
356
29k
Mobile First: as difficult as doing things right
swwweet
222
8.9k
Building a Modern Day E-commerce SEO Strategy
aleyda
38
6.9k
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パターン • この辺あたりから導入を目指していこう • 今度こそは陽気なギャングが来てくれると信じて…
最後に • 今年の夏は自作フレームワークの夏にしませんか?
ありがとうございました