Upgrade to Pro — share decks privately, control downloads, hide ads and more …

RFC駆動のPHP学習術 Fukuoka.php edition

Sponsored · Your Podcast. Everywhere. Effortlessly. Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.

RFC駆動のPHP学習術 Fukuoka.php edition

Avatar for Takayuki Fujisawa

Takayuki Fujisawa

October 14, 2020
Tweet

More Decks by Takayuki Fujisawa

Other Decks in Programming

Transcript

  1. #fukuokaphp RFCとは • 「Request For Comments」 • https://wiki.php.net/rfc • PHPの次期バージョンに取り込まれる新機能や改善の提案

    • PHPコア開発者のコミュニティの中でメーリングリストなどで 議論・投票が行われ、採択される
  2. #fukuokaphp RFCの基本構成 • 提案内容 • 現状のPHPが抱える課題 • 提案の実装例 • ただ読むだけだと

    「こんな新機能が増えるのか、なるほど」で終了 RFC駆動学習は、  提案の背景・課題・周辺事項を  じっくり理解し、  気付き・発見・学びを獲得 することが目的
  3. #fukuokaphp なぜ RFC? • 採用されるRFCは、コミュニティの中で同意を得られたもの • = 多くの人が課題を感じているもの、ニーズがあるもの • = 活用される可能性が高い知識領域 •

    = 優先して学ぶべき・理解しておくべき領域 • ∴ あてもなく学習するよりも、   生きた知識になる確率が高く、効率が良い
  4. #fukuokaphp 例2:JIT(調べた結果) • 通常の処理 ◦ ソースコード → OPcode(中間言語)に変換 → ZendVMがネイティブコードに変換(解釈)して実行

    • JIT ◦ ソースコード → OPCodeに変換 → ネイティブコードに変換してキャッシュ ◦ 次にリクエストが来た時、キャッシュされたネイティブコードを実行
  5. #fukuokaphp 例2:JIT(調べた結果) • 通常の処理 ◦ ソースコード → OPcode(中間言語)に変換 → ZendVMがネイティブコードに変換(解釈)して実行

    • JIT ◦ ソースコード → OPCodeに変換 → ネイティブコードに変換してキャッシュ ◦ 次にリクエストが来た時、キャッシュされたネイティブコードを実行 ▪ OPcodeを解釈する時間が短縮されるため速い
  6. #fukuokaphp 例2:JIT(調べた結果) • JITで速くなる理由を理解する過程で再整理された他の知識 ◦ PHPのソースコードが実行されるまでのコンパイルの流れ ◦ OPcache … OPCodeをキャッシュして使いまわす仕組み。

         JITはOPcacheの拡張版 ◦ Preload … PHP7.4で入ったOPCacheを起動時に作る仕組み ◦ JIT使ってもWebアプリケーションは劇的に速くはならないという事 実 ▪ I/Oのボトルネックの方が大きい
  7. #fukuokaphp 例2:JIT(調べた結果) • JITで速くなる理由を理解する過程で再整理された他の知識 ◦ PHPのソースコードが実行されるまでのコンパイルの流れ ◦ OPcache … OPCodeをキャッシュして使いまわす仕組み。

         JITはOPcacheの拡張版 ◦ Preload … PHP7.4で入ったOPCacheを起動時に作る仕組み ◦ JIT使ってもWebアプリケーションは劇的に速くはならないという事 実 ▪ I/Oのボトルネックの方が大きい 注:OPCache から JITの話。 素のPHPからOPcacheの導入は、一定効 果あると思います。
  8. #fukuokaphp 例2:JIT(再掲) • Just-In-Time Compiler ◦ ネイティブコードにコンパイルした結果をキャッシュすることで処理 を高速化できる新機能 ◦ https://wiki.php.net/rfc/jit

    • 高速化できることは書かれているが、なぜ・何が高速化されるのかは明 記されていない • 理解する行為を通したPHP高速化周辺の一連の知識の 「学び」のトリガー
  9. #fukuokaphp 例3:Rename T_PAAMAYIM_NEKUDOTAYIM to T_DOUBLE_COLON • 構文エラーに出力されるトークンが混乱を招くのでやめたい ◦ https://wiki.php.net/rfc/rename-double-colon-token •

    PHPコア内部で使用されているこのトークンは初見殺し 「T_DOUBLE_COLON」に変更すべき、という提案 • この提案そのものは否決された
  10. #fukuokaphp 例3:Rename T_PAAMAYIM_NEKUDOTAYIM to T_DOUBLE_COLON • 構文エラーに出力されるトークンが混乱を招くのでやめたい ◦ https://wiki.php.net/rfc/rename-double-colon-token •

    PHPコア内部で使用されているこのトークンは初見殺し 「T_DOUBLE_COLON」に変更すべき、という提案 • この提案そのものは否決された
  11. #fukuokaphp 例3:Rename T_PAAMAYIM_NEKUDOTAYIM to T_DOUBLE_COLON • 構文エラーに出力されるトークンが混乱を招くのでやめたい ◦ https://wiki.php.net/rfc/rename-double-colon-token •

    PHPコア内部で使用されているこのトークンは初見殺し 「T_DOUBLE_COLON」に変更すべき、という提案 • この提案そのものは否決された • 「問題の本質」にフォーカスすることの重要性を再認識する というPHPの枠を超えた「気付き」
  12. #fukuokaphp 例4:Saner string to number comparisons(再掲) • 文字列と数値を緩い比較(==)した時の不思議な振る舞いの是正 ◦ https://wiki.php.net/rfc/string_to_number_comparison

    • こちらのRFCはswitch文だけでなくin_array()の課題にも気付かせてく れる一粒で二度おいしい良コスパRFC • ちなみにin_array()は第三引数をtrueにしましょう
  13. #fukuokaphp 例5:Attributes • これまでPHPDocに記述していた @before などのアノテーションを、 正式にPHPの言語仕様として記述できるようにするもの ◦ https://wiki.php.net/rfc/attributes_v2 •

    自身の幅を広げてくれるナイスなRFC /** * @before ←これが */ public function setupSomeFixtures(){ } ↓ #[before]  ←こうなる public function setupSomeFixtures(){ }
  14. #fukuokaphp 例6:Weak Reference(v7.4) • PHPで「弱参照」が使えるようになる ◦ https://wiki.php.net/rfc/weakrefs • 元々PECL拡張としては存在していたものがコアの機能として再提案 •

    PHPのメモリ管理・GCまわりに詳しくなった • (ちなみに)PHPのGCサイクルは、どれだけメモリ使用しているかに依らず、オ ブジェクトが10,000個作られた時 • JIT同様、RFCをトリガに一連の学びの機会を与えてくれた
  15. #fukuokaphp RFC駆動学習により • 知識のアップデートが行われる • その過程で、自分自身の知識の抜け漏れが補完される • RFCはPHPerにとって共通課題であることが多く、学び効率が良い • 副次的な効果として、早期にPHPの変更点をキャッチアップできるので、PHP

    バージョンアップする際、慌てないで済む • 新機能なのでやってて楽しい、継続できる ◦ べんり!使ってみたい!というポジティブな感情が大事 ◦ 継続できれば学習のトリガは何でも良く、その一つがRFC駆動
  16. #fukuokaphp どうやって始めたらいいでしょう? • PHP RFC Bot(@PHPRFCBot)をフォローする • いいねがそこそこついてるものを重点的にチェック(感覚で30くらい) • Google翻訳を駆使して読んだり、Qiita等の先人の記事を読んだり…

    • #externals(https://externals.io/)を覗いてみるのもヨシ • RFCの読み方については、へーしゃの別のエンジニアが語った 資料があるので下記参照 ◦ RFCの歩き方:https://speakerdeck.com/ykanoh/how-to-read-php-rfc