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

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

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

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