Slide 1

Slide 1 text

PHP の新しいバージョンは どのようにして生まれるか 五十嵐 進士 / sji / sj-i / @sji_ch   株式会社インフィニットループ

Slide 2

Slide 2 text

自己紹介 @sji_ch SNS 上のアイコンは GitHub が自動生成した奴

Slide 3

Slide 3 text

生まれも育ちも仙台

Slide 4

Slide 4 text

ふつうのサラリーマン 株式会社インフィニットループ仙台支社所属 スマホゲーのサーバサイドプログラマ 地元が仙台や札幌の人とかはぜひ一緒に働きま しょう

Slide 5

Slide 5 text

Agenda 新しいバージョンはなぜ生まれるのか 新しいバージョンはいつ生まれるのか 新しいバージョンはどこで作られているのか 新しいバージョンはどのように作られているのか 新しいバージョンは誰が作っているのか

Slide 6

Slide 6 text

前提: 言語バージョン == 処理系バージョン PHP はどちらかといえば実装 == 仕様の言語 先に言語仕様を厳密に記述した文書があってそのとおり実装、の順ではない RFC (後述)で各言語改定の内容を先に協議・決議はする かつては言語仕様の文書化を進める動きもあったが、今は非活発 php.net の公式処理系のバージョンが言語のバージョンでもある https://github.com/php/php-langspec/

Slide 7

Slide 7 text

新しいバージョンはなぜ生まれるのか

Slide 8

Slide 8 text

バグ修正・セキュリティ修正・環境への追従 言語も処理系も人が作っているもの バグは避けられないし見つかれば直さなければならない 依存するライブラリに問題が見つかる場合もある CPU や OS の新機能を使って高速化、などポジティブな環境追従も

Slide 9

Slide 9 text

言語改定 プログラマーは改善志向 普段使っている言語を更に便利にしたい 新たな言語機能が導入される 使ってみて問題を起こしやすい言語機能があれば改変・廃止される

Slide 10

Slide 10 text

言語改定がされないとどうなる? 言語改定に対応するのは面倒ではある しかしプログラミング言語はいくらでもある 使いづらい言語は徐々に使われなくなる 全然違う言語へ乗り換えるか、徐々に改善されていく言語へ付いていくか

Slide 11

Slide 11 text

新しいバージョンはいつ生まれるのか?

Slide 12

Slide 12 text

3 種類のリリース PHP のバージョンは x.y.z のように表記 例: 8.2.7 とか 8.1.20 とか x 、y 、z のどの部分が変わるかで 3 種類に分類 ポイントリリース マイナーリリース メジャーリリース

Slide 13

Slide 13 text

ポイントリリース x.y.z の z 部分が 1 増える 例: 8.2.7 なら 7 の部分 原則的に言語改定を含まない バグ修正やセキュリティ修正のみが行われる サポート中の各マイナーリリースについてほぼ毎月出る 各マイナーリリースで 34 〜 35 回が PHP 7 での実績

Slide 14

Slide 14 text

マイナーリリース x.y.z の y 部分が 1 増える 例: 8.2.7 なら 2 の部分 x.y.z の z 部分は 0 にリセット 機能追加のような言語改定を含む スクリプトについて後方互換性のない修正は原則的に入らない メジャーリリースでの削除に向けた機能の非推奨化は起きる 標準添付の C 拡張が PECL に移動される場合はある C 拡張向けの互換性が崩れる場合はある 年 1 回のペースでリリース(だいたい 11 月か 12 月) サポート期間は 3 年 2 年間バグ修正のポイントリリースが行われる 3 年目はセキュリティ修正のみでポイントリリースが行われる

Slide 15

Slide 15 text

メジャーリリース x.y.z の x 部分が 1 増える 例: 8.2.7 なら 8 の部分 x.y.z の y 部分と z 部分は 0 にリセット 機能追加のような言語改定を含む スクリプトについて後方互換性のない修正も入る マイナーリリースで非推奨化されてきた機能が一気になくなったりする リリース間隔に決まりはない PHP 8.0.0 は 2020 年 11 月 26 日にリリース PHP 7.0.0 は 2015 年 12 月 3 日にリリース

Slide 16

Slide 16 text

新しいバージョンはどこで生まれるのか

Slide 17

Slide 17 text

GitHub PHP は OSS 処理系のソースコードは GitHub の php/php-src で管理 issues で不具合報告を受付 PR で修正を受付 零細な修正はコミット権を持つコア開発者が直 接コミットしたりも

Slide 18

Slide 18 text

internals ML 言語改定には合意形成が必要 「こんな機能いいと思う!」で実装して PR するだけでは入らない 公式の議論の場としてどのような改定が必要かを議論する ML がある 議論への参加は自由(英語) 後述の RFC プロセスに従って改定が提案され、投票が行われる ML に参加していない人でもアーカイブサイトで議論の経緯が追える 公式のものだが見づらい 非公式で ML のアーカイブを見やすく整形して公開しているサイト https://news-web.php.net/group.php?group=php.internals https://externals.io/

Slide 19

Slide 19 text

Stack Overflow Chat | Room 11 Stack Overflow Chat の Room 11 が PHP のチャットルーム 一部のコア開発者がよく顔を出す 非公式なコミュニケーションチャンネルとして ML へ出す前のアイデアが議論されることも https://chat.stackoverflow.com/rooms/11/php

Slide 20

Slide 20 text

新しいバージョンは どのように作られているのか?

Slide 21

Slide 21 text

RFC プロセスの概要 RFC: Request For Comments 言語改定を提案し、議論し、決議するためのプロセス PHP 5.4 の開発途中頃にルールが固まった PHP には全ての方針を決定付けるような個人がいない、良く言えば民主的 バグ修正やセキュリティ修正はふつう RFC プロセスなしに GitHub 上のやり取りだけで完結

Slide 22

Slide 22 text

RFC プロセスの詳細 php.net の Wiki で RFC を書く internals ML でアナウンス 言語改定の提案には告知から最低 2 週間の議論が必要 ML で投票開始をアナウンス 最低でも 2 週間の投票期間が必要 2/3 以上の賛成で承認 投票権を持つのは一部の人々 リポジトリへのコミット権を持つコア開発者 internals での議論によく参加するコア開発者に認められた人

Slide 23

Slide 23 text

RFC プロセスを実際にやってみると PHP 8.2 向けで trait で定数を定義可能にする提案を出して受理された けっこうやることが多い! 提案内容をまとめて英語で文書化(言葉の壁…… !) ツッコミへ適宜に英語で対応(言葉の壁…… !) 過去の関連する議論を追って一通り対応(言葉の壁…… !) PHP の他の言語機能との整合性の検討 他言語の類似機能と比較して見落としがないか検討 提案の通りに動く実装を C で用意 https://wiki.php.net/rfc/constants_in_traits

Slide 24

Slide 24 text

新しいバージョンは誰が作っているのか?

Slide 25

Slide 25 text

OSS プロジェクトには多様な人々が参加 PHP は OSS プロジェクト 様々な背景を持つ人々が開発に参加 PHP や言語処理系の開発に余暇で関わりたい個人 PHP の言語としての改善から利益を得る会社の従業員 言語処理系の作られ方を学びたい学生

Slide 26

Slide 26 text

企業所属のコミッター PHP の開発は企業所属のコミッターが支えてきた面もある 日中の時間フルタイムで開発に関われるか、は大きい Zend by Perforce の Dmitry Stogov さん PHP 7 の高速化や PHP8 の JIT 導入などを成し遂げた 今も PHP 9 向けの新 JIT エンジンを作ってる かつて JetBrains で PHP の開発をしていた Nikita Popov さん

Slide 27

Slide 27 text

ネブラスカ問題 "xkcd: Dependency" 出典: https://xkcd.com/2347/ (CC BY-NC 2.5) 現代のシステム開発は至るところで OSS を利用 OSS は更に別の OSS に依存 重要なシステムが一個人に依存していたりする 個人には生活があり人生に色々なことが起きる 話が一企業への依存になっても基本は同じ

Slide 28

Slide 28 text

The PHP Foundation 2021 年 11 月に設立 寄付を集めて PHP のコア開発者を雇う団体 現在までに 100 万 USD を調達 日本からも多くの寄付が集まっている 現在は 6 人のフルタイム・パートタイム開発者 を雇っている 多くのバグ修正や機能開発が成し遂げられた PHP から利益を得ている人々で分担して PHP 自 体を支えていく

Slide 29

Slide 29 text

新しいバージョンの PHP は 俺たちの寄付から生まれる! 弊社技術ブログでも 2 回ほど取り上げたので、ぜひ読んでね インフィニットループは PHP の継続的な発展を目指す The PHP Foundation に寄付をしました 今年度も PHP Foundation に寄付をしました https://www.infiniteloop.co.jp/tech-blog/2021/11/php-foundation/ https://www.infiniteloop.co.jp/tech-blog/2023/02/php-foundation-donation/

Slide 30

Slide 30 text

ご清聴ありがとうございました