Slide 1

Slide 1 text

#phpltjam ©2020 RAKUS Co., Ltd. RFC駆動のPHP学習術 Takayuki Fujisawa

Slide 2

Slide 2 text

#phpltjam Takayuki Fujisawa 所属:株式会社ラクス Twitter: @miracle_fjsw 表のおしごと:品質管理やセキュリティ・技術仕様の標準化 裏のおしごと:社内のエンジニアカルチャー醸成(勉強会イベントの主催)

Slide 3

Slide 3 text

#phpltjam みなさん PHPの学習って どうやっていますか?

Slide 4

Slide 4 text

#phpltjam - 書籍(はじめてのPHP、パーフェクトPHP、実践 〇〇、オライリー本…) - 技術系のWeb記事

Slide 5

Slide 5 text

#phpltjam こういうことありますよね? ● 知識が陳腐化・古くなる ● 学習した内容が自分自身に定着しない・曖昧な理解

Slide 6

Slide 6 text

#phpltjam そんなみなさんに紹介したい学習法が

Slide 7

Slide 7 text

#phpltjam 「RFC駆動学習」

Slide 8

Slide 8 text

#phpltjam RFCとは ● 「Request For Comments」 ● https://wiki.php.net/rfc ● PHPの次期バージョンに取り込まれる新機能や改善の提案 ● PHPコア開発者のコミュニティの中でメーリングリストなどで 議論・投票が行われ、採択される

Slide 9

Slide 9 text

#phpltjam 例えばこんなやつ https://wiki.php.net/rfc/match_expression_v2 PHP8:match式の提案

Slide 10

Slide 10 text

#phpltjam RFC駆動学習とは

Slide 11

Slide 11 text

#phpltjam RFC駆動学習とは ● RFCに記載されている提案内容を理解し、

Slide 12

Slide 12 text

#phpltjam RFC駆動学習とは ● RFCに記載されている提案内容を理解し、 記載されている課題感・背景などから

Slide 13

Slide 13 text

#phpltjam RFC駆動学習とは ● RFCに記載されている提案内容を理解し、 記載されている課題感・背景などから 言語仕様・PHP界隈の動向への理解を深める、 というオレオレ手法

Slide 14

Slide 14 text

#phpltjam RFCの基本構成 ● 提案内容 ● 現状のPHPが抱える課題 ● 提案の実装例

Slide 15

Slide 15 text

#phpltjam RFCの基本構成 ● 提案内容 ● 現状のPHPが抱える課題 ● 提案の実装例 ● ただ読むだけだと 「こんな新機能が増えるのか、なるほど」で終了しちゃう

Slide 16

Slide 16 text

#phpltjam RFCの基本構成 ● 提案内容 ● 現状のPHPが抱える課題 ● 提案の実装例 ● ただ読むだけだと 「こんな新機能が増えるのか、なるほど」で終了 RFC駆動学習は、  提案の背景・課題・周辺事項を  じっくり理解し、  気付き・発見・学びを獲得 することが目的

Slide 17

Slide 17 text

#phpltjam なぜ RFC?

Slide 18

Slide 18 text

#phpltjam なぜ RFC? ● 採用されるRFCは、コミュニティの中で同意を得られたもの

Slide 19

Slide 19 text

#phpltjam なぜ RFC? ● 採用されるRFCは、コミュニティの中で同意を得られたもの ● = 多くの人が課題を感じているもの、ニーズがあるもの

Slide 20

Slide 20 text

#phpltjam なぜ RFC? ● 採用されるRFCは、コミュニティの中で同意を得られたもの ● = 多くの人が課題を感じているもの、ニーズがあるもの ● = 活用される可能性が高い知識領域

Slide 21

Slide 21 text

#phpltjam なぜ RFC? ● 採用されるRFCは、コミュニティの中で同意を得られたもの ● = 多くの人が課題を感じているもの、ニーズがあるもの ● = 活用される可能性が高い知識領域 ● = 優先して学ぶべき・理解しておくべき領域

Slide 22

Slide 22 text

#phpltjam なぜ RFC? ● 採用されるRFCは、コミュニティの中で同意を得られたもの ● = 多くの人が課題を感じているもの、ニーズがあるもの ● = 活用される可能性が高い知識領域 ● = 優先して学ぶべき・理解しておくべき領域 ● ∴ あてもなく学習するよりも、   生きた知識になる確率が高く、効率が良い

Slide 23

Slide 23 text

#phpltjam なぜ RFC? ● 提案内容が一つのTopicsとして、過去と未来がまとまっている

Slide 24

Slide 24 text

#phpltjam なぜ RFC? ● 提案内容が一つのTopicsとして、過去と未来がまとまっている ● 現状把握(過去)しつつ、知識のアップデート(未来)ができる

Slide 25

Slide 25 text

#phpltjam そんなRFC駆動学習について 自身の実例を ダイジェストで紹介します

Slide 26

Slide 26 text

#phpltjam 例1:match式

Slide 27

Slide 27 text

#phpltjam 例1:match式 ● swtich文によく似た新しい別の記法 ○ https://wiki.php.net/rfc/match_expression_v2 ● ズバリ過去と未来が書かれているボーナスRFC

Slide 28

Slide 28 text

#phpltjam 例1:match式

Slide 29

Slide 29 text

#phpltjam 例1:match式 switch文は緩い比較を行います。 これは非常に驚くべき結果をもたらす 可能性があります。

Slide 30

Slide 30 text

#phpltjam そうだったのか!

Slide 31

Slide 31 text

#phpltjam 例1:match式(再掲) ● swtich文によく似た新しい別の記法 ○ https://wiki.php.net/rfc/match_expression_v2 ● ズバリ過去と未来が書かれているボーナスRFC

Slide 32

Slide 32 text

#phpltjam 例1:match式(再掲) ● swtich文によく似た新しい別の記法 ○ https://wiki.php.net/rfc/match_expression_v2 ● ズバリ過去と未来が書かれているボーナスRFC ● switch文の条件判定は「緩い比較」が行われているという課題を、理解 していなかった

Slide 33

Slide 33 text

#phpltjam 例1:match式(再掲) ● swtich文によく似た新しい別の記法 ○ https://wiki.php.net/rfc/match_expression_v2 ● ズバリ過去と未来が書かれているボーナスRFC ● switch文の条件判定は「緩い比較」が行われているという課題を、理解 していなかった ● 不十分な理解に対する「そうだったのか!」という「発見」

Slide 34

Slide 34 text

#phpltjam 例1:match式(再掲) ● swtich文によく似た新しい別の記法 ○ https://wiki.php.net/rfc/match_expression_v2 ● ズバリ過去と未来が書かれているボーナスRFC ● switch文の条件判定は「緩い比較」が行われているという課題を、理解 していなかった ● 不十分な理解に対する「そうだったのか!」という「発見」 ○ 自分自身の抜け漏れを認識 ○ 「発見」の感覚が鮮明に記憶に残る

Slide 35

Slide 35 text

#phpltjam 例2:JIT

Slide 36

Slide 36 text

#phpltjam 例2:JIT ● Just-In-Time Compiler ○ ネイティブコードにコンパイルした結果をキャッシュすることで処理 を高速化できる新機能 ○ https://wiki.php.net/rfc/jit ● 能動的な学習を促す良RFC

Slide 37

Slide 37 text

#phpltjam 例2:JIT ● Just-In-Time Compiler ○ ネイティブコードにコンパイルした結果をキャッシュすることで処理 を高速化できる新機能 ○ https://wiki.php.net/rfc/jit ● 能動的な学習を促す良RFC ● 高速化できることは書かれているが、なぜ・何が高速化されるのかは明 記されていない

Slide 38

Slide 38 text

#phpltjam 疑問は調べるチャンス

Slide 39

Slide 39 text

#phpltjam 例2:JIT(調べた結果) ● 通常の処理 ○ ソースコード → OPcode(中間言語)に変換 → ZendVMがネイティブコードに変換(解釈)して実行

Slide 40

Slide 40 text

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

Slide 41

Slide 41 text

#phpltjam 例2:JIT(調べた結果) ● 通常の処理 ○ ソースコード → OPcode(中間言語)に変換 → ZendVMがネイティブコードに変換(解釈)して実行 ● JIT ○ ソースコード → OPCodeに変換 → ネイティブコードに変換してキャッシュ ○ 次にリクエストが来た時、キャッシュされたネイティブコードを実行 ■ OPcodeを解釈する時間が短縮されるため速い

Slide 42

Slide 42 text

#phpltjam 例2:JIT(調べた結果) ● JITで速くなる理由を理解する過程で再整理された他の知識

Slide 43

Slide 43 text

#phpltjam 例2:JIT(調べた結果) ● JITで速くなる理由を理解する過程で再整理された他の知識 ○ PHPのソースコードが実行されるまでのコンパイルの流れ

Slide 44

Slide 44 text

#phpltjam 例2:JIT(調べた結果) ● JITで速くなる理由を理解する過程で再整理された他の知識 ○ PHPのソースコードが実行されるまでのコンパイルの流れ ○ OPcache … OPCodeをキャッシュして使いまわす仕組み。      JITはOPcacheの拡張版

Slide 45

Slide 45 text

#phpltjam 例2:JIT(調べた結果) ● JITで速くなる理由を理解する過程で再整理された他の知識 ○ PHPのソースコードが実行されるまでのコンパイルの流れ ○ OPcache … OPCodeをキャッシュして使いまわす仕組み。      JITはOPcacheの拡張版 ○ Preload … PHP7.4で入ったOPCacheを起動時に作る仕組み

Slide 46

Slide 46 text

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

Slide 47

Slide 47 text

#phpltjam 例2:JIT(再掲) ● Just-In-Time Compiler ○ ネイティブコードにコンパイルした結果をキャッシュすることで処理 を高速化できる新機能 ○ https://wiki.php.net/rfc/jit ● 能動的な学習を促す良RFC ● 高速化できることは書かれているが、なぜ・何が高速化されるのかは明 記されていない

Slide 48

Slide 48 text

#phpltjam 例2:JIT(再掲) ● Just-In-Time Compiler ○ ネイティブコードにコンパイルした結果をキャッシュすることで処理 を高速化できる新機能 ○ https://wiki.php.net/rfc/jit ● 能動的な学習を促す良RFC ● 高速化できることは書かれているが、なぜ・何が高速化されるのかは明 記されていない ● 理解する行為を通したPHP高速化周辺の一連の知識の「学び」

Slide 49

Slide 49 text

#phpltjam 例3:Attributes

Slide 50

Slide 50 text

#phpltjam 例3:Attributes ● これまでPHPDocに記述していた @before などのアノテーションを、 正式にPHPの言語仕様として記述できるようにするもの ○ https://wiki.php.net/rfc/attributes_v2 ● 自身の幅を広げてくれるナイスなRFC /** * @before ←これが */ public function setupSomeFixtures(){ } ↓ #[before]  ←こうなる public function setupSomeFixtures(){ }

Slide 51

Slide 51 text

#phpltjam 例3:Attributes ● RFCに記載されている課題 doc-commentsはただの文字列でしかない。 (ライブラリ開発者がアノテーションを実装するには) 追加で文 字列を解析する処理を書かなければならない。

Slide 52

Slide 52 text

#phpltjam PHPUnitのコードを見てみた

Slide 53

Slide 53 text

#phpltjam 例3:Attributes ● RFCに記載されている課題 https://github.com/sebastianbergmann/phpunit/blob/master/src/Util/Annotation/DocBlock.php

Slide 54

Slide 54 text

#phpltjam 例3:Attributes ● RFCに記載されている課題 _人人人人人人人人人_ > 正 規 表 現 <  ̄Y^Y^Y^Y^Y^Y^Y^Y ̄ https://github.com/sebastianbergmann/phpunit/blob/master/src/Util/Annotation/DocBlock.php

Slide 55

Slide 55 text

#phpltjam 例3:Attributes ● おー…確かにゴリゴリ文字列解析してるなぁ…

Slide 56

Slide 56 text

#phpltjam 例3:Attributes ● おー…確かにゴリゴリ文字列解析してるなぁ… ● と同時に「意外と泥臭い仕組みで実現してるんだな」という親近感

Slide 57

Slide 57 text

#phpltjam 例3:Attributes ● おー…確かにゴリゴリ文字列解析してるなぁ… ● と同時に「意外と泥臭い仕組みで実現してるんだな」という親近感 ● からの「あれ、これオレでも実装できるんじゃね?」という希望

Slide 58

Slide 58 text

#phpltjam 例3:Attributes ● おー…確かにゴリゴリ文字列解析してるなぁ… ● と同時に「意外と泥臭い仕組みで実現してるんだな」という親近感 ● からの「あれ、これオレでも実装できるんじゃね?」という希望 ● アノテーションを使って振る舞いを変えるというのは、一部のライブラリ開発者 だけが扱える特殊技能、という先入観がなくなり、自分が開発する際のパター ンの一つに加わった。

Slide 59

Slide 59 text

#phpltjam 例3:Attributes(再掲) ● これまでPHPDocに記述していた @before などのアノテーションを、 正式にPHPの言語仕様として記述できるようにするもの ○ https://wiki.php.net/rfc/attributes_v2 ● 自身の幅を広げてくれるナイスなRFC

Slide 60

Slide 60 text

#phpltjam 例3:Attributes(再掲) ● これまでPHPDocに記述していた @before などのアノテーションを、 正式にPHPの言語仕様として記述できるようにするもの ○ https://wiki.php.net/rfc/attributes_v2 ● 自身の幅を広げてくれるナイスなRFC ● 学習の過程で、自分自身の引き出しが増えるという「気付き」

Slide 61

Slide 61 text

#phpltjam 以上、3つの事例で 「発見」「学び」「気付き」 を紹介

Slide 62

Slide 62 text

#phpltjam 以上、3つの事例で 「発見」「学び」「気付き」 を紹介 人によって学び・気付きの ポイントは異なると思います

Slide 63

Slide 63 text

#phpltjam RFC駆動学習により ● 知識のアップデートが行われる ● その過程で、自分自身の知識の抜け漏れが補完される ● RFCはPHPerにとって共通課題であることが多く、学び効率が良い ● 副次的な効果として、早期にPHPの変更点をキャッチアップできるので、PHP バージョンアップする際、慌てないで済む

Slide 64

Slide 64 text

#phpltjam RFC駆動学習により ● 知識のアップデートが行われる ● その過程で、自分自身の知識の抜け漏れが補完される ● RFCはPHPerにとって共通課題であることが多く、学び効率が良い ● 副次的な効果として、早期にPHPの変更点をキャッチアップできるので、PHP バージョンアップする際、慌てないで済む ● 新機能なのでやってて楽しい、継続できる ○ べんり!使ってみたい!というポジティブな感情が大事 ○ 継続できれば学習のトリガは何でも良く、その一つがRFC駆動

Slide 65

Slide 65 text

#phpltjam どうやって始めたらいいでしょう? ● PHP RFC Bot(@PHPRFCBot)をフォローする ● いいねがそこそこついてるものを重点的にチェック(感覚で30くらい) ● Google翻訳を駆使して読んだり、Qiita等の先人の記事を読んだり… ● RFCの読み方については、へーしゃの別のエンジニアが語った 資料があるので下記参照 ○ RFCの歩き方:https://speakerdeck.com/ykanoh/how-to-read-php-rfc

Slide 66

Slide 66 text

#phpltjam RFCは学びの宝庫

Slide 67

Slide 67 text

#phpltjam RFC駆動学習を通じて 自身の抜け漏れを補完しつつ 知識のアップデートをしてみては?

Slide 68

Slide 68 text

#phpltjam ところで

Slide 69

Slide 69 text

#phpltjam 一人でやるのは大変ですよね!(断言)

Slide 70

Slide 70 text

#phpltjam 毎月勉強会をやっておりますのでLet’s JOIN! https://rakus.connpass.com/event/189017/

Slide 71

Slide 71 text

#phpltjam 毎月勉強会をやっておりますのでLet’s JOIN! https://rakus.connpass.com/event/189017/ おわり!