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
RFC駆動のPHP学習術.pdf
Search
Takayuki Fujisawa
September 25, 2020
Programming
3
410
RFC駆動のPHP学習術.pdf
Takayuki Fujisawa
September 25, 2020
Tweet
Share
More Decks by Takayuki Fujisawa
See All by Takayuki Fujisawa
RFC駆動のPHP学習術 Fukuoka.php edition
takayukifujisawa
1
400
PHPのEnum事情
takayukifujisawa
1
650
レガシーなアプリケーションにこそTypeScriptを採用するべきではないかと思ったのでちょっとまとめてみたよっていう話をするスライドです / Legacy code needs TypeScript
takayukifujisawa
1
350
History of JavaScript
takayukifujisawa
1
180
usb_boot_ubuntu
takayukifujisawa
0
230
なぜPHPにはEnumがないのか
takayukifujisawa
0
4.8k
Other Decks in Programming
See All in Programming
密集、ドキュメントのコロケーション with AWS Lambda
satoshi256kbyte
1
210
コードを読んで理解するko build
bells17
1
110
Kotlinの開発でも AIをいい感じに使いたい / Making the Most of AI in Kotlin Development
kohii00
5
1.3k
『テスト書いた方が開発が早いじゃん』を解き明かす #phpcon_nagoya
o0h
PRO
8
2.4k
Honoとフロントエンドの 型安全性について
yodaka
7
1.5k
Formの複雑さに立ち向かう
bmthd
1
930
Boos Performance and Developer Productivity with Jakarta EE 11
ivargrimstad
0
320
Introduction to kotlinx.rpc
arawn
0
760
Rails アプリ地図考 Flush Cut
makicamel
1
130
データの整合性を保つ非同期処理アーキテクチャパターン / Async Architecture Patterns
mokuo
54
19k
Djangoにおける複数ユーザー種別認証の設計アプローチ@DjangoCongress JP 2025
delhi09
PRO
4
470
DRFを少しずつ オニオンアーキテクチャに寄せていく DjangoCongress JP 2025
nealle
2
270
Featured
See All Featured
A Tale of Four Properties
chriscoyier
158
23k
Facilitating Awesome Meetings
lara
52
6.2k
Art, The Web, and Tiny UX
lynnandtonic
298
20k
How GitHub (no longer) Works
holman
314
140k
The Psychology of Web Performance [Beyond Tellerrand 2023]
tammyeverts
46
2.3k
A designer walks into a library…
pauljervisheath
205
24k
Large-scale JavaScript Application Architecture
addyosmani
511
110k
Cheating the UX When There Is Nothing More to Optimize - PixelPioneers
stephaniewalter
280
13k
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
30
4.6k
How to Create Impact in a Changing Tech Landscape [PerfNow 2023]
tammyeverts
49
2.3k
10 Git Anti Patterns You Should be Aware of
lemiorhan
PRO
656
59k
Into the Great Unknown - MozCon
thekraken
35
1.6k
Transcript
#phpltjam ©2020 RAKUS Co., Ltd. RFC駆動のPHP学習術 Takayuki Fujisawa
#phpltjam Takayuki Fujisawa 所属:株式会社ラクス Twitter: @miracle_fjsw 表のおしごと:品質管理やセキュリティ・技術仕様の標準化 裏のおしごと:社内のエンジニアカルチャー醸成(勉強会イベントの主催)
#phpltjam みなさん PHPの学習って どうやっていますか?
#phpltjam - 書籍(はじめてのPHP、パーフェクトPHP、実践 〇〇、オライリー本…) - 技術系のWeb記事
#phpltjam こういうことありますよね? • 知識が陳腐化・古くなる • 学習した内容が自分自身に定着しない・曖昧な理解
#phpltjam そんなみなさんに紹介したい学習法が
#phpltjam 「RFC駆動学習」
#phpltjam RFCとは • 「Request For Comments」 • https://wiki.php.net/rfc • PHPの次期バージョンに取り込まれる新機能や改善の提案
• PHPコア開発者のコミュニティの中でメーリングリストなどで 議論・投票が行われ、採択される
#phpltjam 例えばこんなやつ https://wiki.php.net/rfc/match_expression_v2 PHP8:match式の提案
#phpltjam RFC駆動学習とは
#phpltjam RFC駆動学習とは • RFCに記載されている提案内容を理解し、
#phpltjam RFC駆動学習とは • RFCに記載されている提案内容を理解し、 記載されている課題感・背景などから
#phpltjam RFC駆動学習とは • RFCに記載されている提案内容を理解し、 記載されている課題感・背景などから 言語仕様・PHP界隈の動向への理解を深める、 というオレオレ手法
#phpltjam RFCの基本構成 • 提案内容 • 現状のPHPが抱える課題 • 提案の実装例
#phpltjam RFCの基本構成 • 提案内容 • 現状のPHPが抱える課題 • 提案の実装例 • ただ読むだけだと
「こんな新機能が増えるのか、なるほど」で終了しちゃう
#phpltjam RFCの基本構成 • 提案内容 • 現状のPHPが抱える課題 • 提案の実装例 • ただ読むだけだと
「こんな新機能が増えるのか、なるほど」で終了 RFC駆動学習は、 提案の背景・課題・周辺事項を じっくり理解し、 気付き・発見・学びを獲得 することが目的
#phpltjam なぜ RFC?
#phpltjam なぜ RFC? • 採用されるRFCは、コミュニティの中で同意を得られたもの
#phpltjam なぜ RFC? • 採用されるRFCは、コミュニティの中で同意を得られたもの • = 多くの人が課題を感じているもの、ニーズがあるもの
#phpltjam なぜ RFC? • 採用されるRFCは、コミュニティの中で同意を得られたもの • = 多くの人が課題を感じているもの、ニーズがあるもの • = 活用される可能性が高い知識領域
#phpltjam なぜ RFC? • 採用されるRFCは、コミュニティの中で同意を得られたもの • = 多くの人が課題を感じているもの、ニーズがあるもの • = 活用される可能性が高い知識領域 •
= 優先して学ぶべき・理解しておくべき領域
#phpltjam なぜ RFC? • 採用されるRFCは、コミュニティの中で同意を得られたもの • = 多くの人が課題を感じているもの、ニーズがあるもの • = 活用される可能性が高い知識領域 •
= 優先して学ぶべき・理解しておくべき領域 • ∴ あてもなく学習するよりも、 生きた知識になる確率が高く、効率が良い
#phpltjam なぜ RFC? • 提案内容が一つのTopicsとして、過去と未来がまとまっている
#phpltjam なぜ RFC? • 提案内容が一つのTopicsとして、過去と未来がまとまっている • 現状把握(過去)しつつ、知識のアップデート(未来)ができる
#phpltjam そんなRFC駆動学習について 自身の実例を ダイジェストで紹介します
#phpltjam 例1:match式
#phpltjam 例1:match式 • swtich文によく似た新しい別の記法 ◦ https://wiki.php.net/rfc/match_expression_v2 • ズバリ過去と未来が書かれているボーナスRFC
#phpltjam 例1:match式
#phpltjam 例1:match式 switch文は緩い比較を行います。 これは非常に驚くべき結果をもたらす 可能性があります。
#phpltjam そうだったのか!
#phpltjam 例1:match式(再掲) • swtich文によく似た新しい別の記法 ◦ https://wiki.php.net/rfc/match_expression_v2 • ズバリ過去と未来が書かれているボーナスRFC
#phpltjam 例1:match式(再掲) • swtich文によく似た新しい別の記法 ◦ https://wiki.php.net/rfc/match_expression_v2 • ズバリ過去と未来が書かれているボーナスRFC • switch文の条件判定は「緩い比較」が行われているという課題を、理解
していなかった
#phpltjam 例1:match式(再掲) • swtich文によく似た新しい別の記法 ◦ https://wiki.php.net/rfc/match_expression_v2 • ズバリ過去と未来が書かれているボーナスRFC • switch文の条件判定は「緩い比較」が行われているという課題を、理解
していなかった • 不十分な理解に対する「そうだったのか!」という「発見」
#phpltjam 例1:match式(再掲) • swtich文によく似た新しい別の記法 ◦ https://wiki.php.net/rfc/match_expression_v2 • ズバリ過去と未来が書かれているボーナスRFC • switch文の条件判定は「緩い比較」が行われているという課題を、理解
していなかった • 不十分な理解に対する「そうだったのか!」という「発見」 ◦ 自分自身の抜け漏れを認識 ◦ 「発見」の感覚が鮮明に記憶に残る
#phpltjam 例2:JIT
#phpltjam 例2:JIT • Just-In-Time Compiler ◦ ネイティブコードにコンパイルした結果をキャッシュすることで処理 を高速化できる新機能 ◦ https://wiki.php.net/rfc/jit
• 能動的な学習を促す良RFC
#phpltjam 例2:JIT • Just-In-Time Compiler ◦ ネイティブコードにコンパイルした結果をキャッシュすることで処理 を高速化できる新機能 ◦ https://wiki.php.net/rfc/jit
• 能動的な学習を促す良RFC • 高速化できることは書かれているが、なぜ・何が高速化されるのかは明 記されていない
#phpltjam 疑問は調べるチャンス
#phpltjam 例2:JIT(調べた結果) • 通常の処理 ◦ ソースコード → OPcode(中間言語)に変換 → ZendVMがネイティブコードに変換(解釈)して実行
#phpltjam 例2:JIT(調べた結果) • 通常の処理 ◦ ソースコード → OPcode(中間言語)に変換 → ZendVMがネイティブコードに変換(解釈)して実行
• JIT ◦ ソースコード → OPCodeに変換 → ネイティブコードに変換してキャッシュ ◦ 次にリクエストが来た時、キャッシュされたネイティブコードを実行
#phpltjam 例2:JIT(調べた結果) • 通常の処理 ◦ ソースコード → OPcode(中間言語)に変換 → ZendVMがネイティブコードに変換(解釈)して実行
• JIT ◦ ソースコード → OPCodeに変換 → ネイティブコードに変換してキャッシュ ◦ 次にリクエストが来た時、キャッシュされたネイティブコードを実行 ▪ OPcodeを解釈する時間が短縮されるため速い
#phpltjam 例2:JIT(調べた結果) • JITで速くなる理由を理解する過程で再整理された他の知識
#phpltjam 例2:JIT(調べた結果) • JITで速くなる理由を理解する過程で再整理された他の知識 ◦ PHPのソースコードが実行されるまでのコンパイルの流れ
#phpltjam 例2:JIT(調べた結果) • JITで速くなる理由を理解する過程で再整理された他の知識 ◦ PHPのソースコードが実行されるまでのコンパイルの流れ ◦ OPcache … OPCodeをキャッシュして使いまわす仕組み。
JITはOPcacheの拡張版
#phpltjam 例2:JIT(調べた結果) • JITで速くなる理由を理解する過程で再整理された他の知識 ◦ PHPのソースコードが実行されるまでのコンパイルの流れ ◦ OPcache … OPCodeをキャッシュして使いまわす仕組み。
JITはOPcacheの拡張版 ◦ Preload … PHP7.4で入ったOPCacheを起動時に作る仕組み
#phpltjam 例2:JIT(調べた結果) • JITで速くなる理由を理解する過程で再整理された他の知識 ◦ PHPのソースコードが実行されるまでのコンパイルの流れ ◦ OPcache … OPCodeをキャッシュして使いまわす仕組み。
JITはOPcacheの拡張版 ◦ Preload … PHP7.4で入ったOPCacheを起動時に作る仕組み ◦ JIT使ってもWebアプリケーションは劇的に速くはならないという事 実 ▪ I/Oのボトルネックの方が大きい
#phpltjam 例2:JIT(再掲) • Just-In-Time Compiler ◦ ネイティブコードにコンパイルした結果をキャッシュすることで処理 を高速化できる新機能 ◦ https://wiki.php.net/rfc/jit
• 能動的な学習を促す良RFC • 高速化できることは書かれているが、なぜ・何が高速化されるのかは明 記されていない
#phpltjam 例2:JIT(再掲) • Just-In-Time Compiler ◦ ネイティブコードにコンパイルした結果をキャッシュすることで処理 を高速化できる新機能 ◦ https://wiki.php.net/rfc/jit
• 能動的な学習を促す良RFC • 高速化できることは書かれているが、なぜ・何が高速化されるのかは明 記されていない • 理解する行為を通したPHP高速化周辺の一連の知識の「学び」
#phpltjam 例3:Attributes
#phpltjam 例3:Attributes • これまでPHPDocに記述していた @before などのアノテーションを、 正式にPHPの言語仕様として記述できるようにするもの ◦ https://wiki.php.net/rfc/attributes_v2 •
自身の幅を広げてくれるナイスなRFC /** * @before ←これが */ public function setupSomeFixtures(){ } ↓ #[before] ←こうなる public function setupSomeFixtures(){ }
#phpltjam 例3:Attributes • RFCに記載されている課題 doc-commentsはただの文字列でしかない。 (ライブラリ開発者がアノテーションを実装するには) 追加で文 字列を解析する処理を書かなければならない。
#phpltjam PHPUnitのコードを見てみた
#phpltjam 例3:Attributes • RFCに記載されている課題 https://github.com/sebastianbergmann/phpunit/blob/master/src/Util/Annotation/DocBlock.php
#phpltjam 例3:Attributes • RFCに記載されている課題 _人人人人人人人人人_ > 正 規 表 現 <  ̄Y^Y^Y^Y^Y^Y^Y^Y ̄ https://github.com/sebastianbergmann/phpunit/blob/master/src/Util/Annotation/DocBlock.php
#phpltjam 例3:Attributes • おー…確かにゴリゴリ文字列解析してるなぁ…
#phpltjam 例3:Attributes • おー…確かにゴリゴリ文字列解析してるなぁ… • と同時に「意外と泥臭い仕組みで実現してるんだな」という親近感
#phpltjam 例3:Attributes • おー…確かにゴリゴリ文字列解析してるなぁ… • と同時に「意外と泥臭い仕組みで実現してるんだな」という親近感 • からの「あれ、これオレでも実装できるんじゃね?」という希望
#phpltjam 例3:Attributes • おー…確かにゴリゴリ文字列解析してるなぁ… • と同時に「意外と泥臭い仕組みで実現してるんだな」という親近感 • からの「あれ、これオレでも実装できるんじゃね?」という希望 • アノテーションを使って振る舞いを変えるというのは、一部のライブラリ開発者
だけが扱える特殊技能、という先入観がなくなり、自分が開発する際のパター ンの一つに加わった。
#phpltjam 例3:Attributes(再掲) • これまでPHPDocに記述していた @before などのアノテーションを、 正式にPHPの言語仕様として記述できるようにするもの ◦ https://wiki.php.net/rfc/attributes_v2 •
自身の幅を広げてくれるナイスなRFC
#phpltjam 例3:Attributes(再掲) • これまでPHPDocに記述していた @before などのアノテーションを、 正式にPHPの言語仕様として記述できるようにするもの ◦ https://wiki.php.net/rfc/attributes_v2 •
自身の幅を広げてくれるナイスなRFC • 学習の過程で、自分自身の引き出しが増えるという「気付き」
#phpltjam 以上、3つの事例で 「発見」「学び」「気付き」 を紹介
#phpltjam 以上、3つの事例で 「発見」「学び」「気付き」 を紹介 人によって学び・気付きの ポイントは異なると思います
#phpltjam RFC駆動学習により • 知識のアップデートが行われる • その過程で、自分自身の知識の抜け漏れが補完される • RFCはPHPerにとって共通課題であることが多く、学び効率が良い • 副次的な効果として、早期にPHPの変更点をキャッチアップできるので、PHP
バージョンアップする際、慌てないで済む
#phpltjam RFC駆動学習により • 知識のアップデートが行われる • その過程で、自分自身の知識の抜け漏れが補完される • RFCはPHPerにとって共通課題であることが多く、学び効率が良い • 副次的な効果として、早期にPHPの変更点をキャッチアップできるので、PHP
バージョンアップする際、慌てないで済む • 新機能なのでやってて楽しい、継続できる ◦ べんり!使ってみたい!というポジティブな感情が大事 ◦ 継続できれば学習のトリガは何でも良く、その一つがRFC駆動
#phpltjam どうやって始めたらいいでしょう? • PHP RFC Bot(@PHPRFCBot)をフォローする • いいねがそこそこついてるものを重点的にチェック(感覚で30くらい) • Google翻訳を駆使して読んだり、Qiita等の先人の記事を読んだり…
• RFCの読み方については、へーしゃの別のエンジニアが語った 資料があるので下記参照 ◦ RFCの歩き方:https://speakerdeck.com/ykanoh/how-to-read-php-rfc
#phpltjam RFCは学びの宝庫
#phpltjam RFC駆動学習を通じて 自身の抜け漏れを補完しつつ 知識のアップデートをしてみては?
#phpltjam ところで
#phpltjam 一人でやるのは大変ですよね!(断言)
#phpltjam 毎月勉強会をやっておりますのでLet’s JOIN! https://rakus.connpass.com/event/189017/
#phpltjam 毎月勉強会をやっておりますのでLet’s JOIN! https://rakus.connpass.com/event/189017/ おわり!