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
440
3
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
RFC駆動のPHP学習術.pdf
Takayuki Fujisawa
September 25, 2020
More Decks by Takayuki Fujisawa
See All by Takayuki Fujisawa
RFC駆動のPHP学習術 Fukuoka.php edition
takayukifujisawa
1
450
PHPのEnum事情
takayukifujisawa
1
770
レガシーなアプリケーションにこそTypeScriptを採用するべきではないかと思ったのでちょっとまとめてみたよっていう話をするスライドです / Legacy code needs TypeScript
takayukifujisawa
1
450
History of JavaScript
takayukifujisawa
1
240
usb_boot_ubuntu
takayukifujisawa
0
260
なぜPHPにはEnumがないのか
takayukifujisawa
0
5.2k
Other Decks in Programming
See All in Programming
信頼性について考えてみる(SRE NEXT 2026 miniLT)
hayama17
0
230
Claude Opus 4.6以後の受託開発エンジニアの変化(Claude Code開発ノウハウ大公開スペシャルbyクラスメソッド)
iidatakuma
1
920
地域 SRE コミュニティ最前線 - ホンマでっかSRE勉強会
tk3fftk
0
290
わからない話を追いかけたら、プログラミング言語を作る側にいた
ydah
2
310
5分で問診!Composer セキュリティ健康診断
codmoninc
0
770
Android CLI
fornewid
0
200
【やさしく解説 設計編・中級 #6】良いアーキテクチャとは ~ 一本の登り道の、行き先 ~
panda728
PRO
0
200
torikago - Ruby::Boxで照らすモジュラモノリスの実行境界
se4weed
1
300
What's New in Android 2026
veronikapj
0
240
壊れたパーサから始める関数型設計と構成的なパーサ #fp_matsuri
raiga0310
2
420
改善しないと、タスクが回らない。 “てんこ盛りポジション” を引き継いだ情シスの、入社3ヶ月の業務改善録
krm963
0
240
【SRE NEXT 2026 Lunch Session】一人目専任SREの立ち上げを加速する ― AIと進めたオンボーディングで2分を0.04秒にした話
pkshadeck
PRO
0
3.3k
Featured
See All Featured
Mobile First: as difficult as doing things right
swwweet
225
10k
First, design no harm
axbom
PRO
2
1.2k
The AI Search Optimization Roadmap by Aleyda Solis
aleyda
1
6k
So, you think you're a good person
axbom
PRO
2
2.1k
Building a Modern Day E-commerce SEO Strategy
aleyda
45
9.2k
Fireside Chat
paigeccino
42
4k
How To Speak Unicorn (iThemes Webinar)
marktimemedia
1
520
Thoughts on Productivity
jonyablonski
76
5.3k
Performance Is Good for Brains [We Love Speed 2024]
tammyeverts
12
1.8k
Producing Creativity
orderedlist
PRO
348
40k
The Power of CSS Pseudo Elements
geoffreycrofte
82
6.5k
Discover your Explorer Soul
emna__ayadi
2
1.2k
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/ おわり!