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
150
ゼミ内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
rails stats で紐解く ANDPAD のイマを支える技術たち
andpad
1
290
競技プログラミングへのお誘い@阪大BOOSTセミナー
kotamanegi
0
360
HTTP compression in PHP and Symfony apps
dunglas
2
1.7k
17年周年のWebアプリケーションにTanStack Queryを導入する / Implementing TanStack Query in a 17th Anniversary Web Application
saitolume
0
250
なまけものオバケたち -PHP 8.4 に入った新機能の紹介-
tanakahisateru
1
120
フロントエンドのディレクトリ構成どうしてる? Feature-Sliced Design 導入体験談
osakatechlab
8
4.1k
Асинхронность неизбежна: как мы проектировали сервис уведомлений
lamodatech
0
730
42 best practices for Symfony, a decade later
tucksaun
1
180
生成AIでGitHubソースコード取得して仕様書を作成
shukob
0
340
Beyond ORM
77web
5
540
SymfonyCon Vienna 2025: Twig, still relevant in 2025?
fabpot
3
1.2k
Mermaid x AST x 生成AI = コードとドキュメントの完全同期への道
shibuyamizuho
0
160
Featured
See All Featured
A Modern Web Designer's Workflow
chriscoyier
693
190k
Practical Tips for Bootstrapping Information Extraction Pipelines
honnibal
PRO
10
810
The Pragmatic Product Professional
lauravandoore
32
6.3k
Responsive Adventures: Dirty Tricks From The Dark Corners of Front-End
smashingmag
251
21k
Save Time (by Creating Custom Rails Generators)
garrettdimon
PRO
28
900
Stop Working from a Prison Cell
hatefulcrawdad
267
20k
4 Signs Your Business is Dying
shpigford
181
21k
Optimising Largest Contentful Paint
csswizardry
33
3k
Scaling GitHub
holman
458
140k
Let's Do A Bunch of Simple Stuff to Make Websites Faster
chriscoyier
507
140k
GraphQLの誤解/rethinking-graphql
sonatard
67
10k
Designing Dashboards & Data Visualisations in Web Apps
destraynor
229
52k
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パターン • この辺あたりから導入を目指していこう • 今度こそは陽気なギャングが来てくれると信じて…
最後に • 今年の夏は自作フレームワークの夏にしませんか?
ありがとうございました