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
PHP の新しいバージョンはどのようにして⽣まれるか
Search
Infiniteloop
August 03, 2023
Programming
2
470
PHP の新しいバージョンはどのようにして⽣まれるか
【PHP Tech Talk】PHPの今を語る!4社合同勉強会 発表資料
https://colopl.connpass.com/event/286658/
Infiniteloop
August 03, 2023
Tweet
Share
More Decks by Infiniteloop
See All by Infiniteloop
俺の PHP プロファイラの話 PHP スクリプトで PHP 処理系のメモリをのぞき込む
infiniteloop_inc
0
270
心理的安全性を学び直し、 「いい組織とは何か?」を考えてみる
infiniteloop_inc
0
340
ゼロからつくる 2D物理シミュレーション ~物理現象をコードに落とし込む方法~
infiniteloop_inc
0
410
詫び石の裏側
infiniteloop_inc
0
370
[新卒向け研修資料] テスト文字列に「うんこ」と入れるな(2024年版)
infiniteloop_inc
6
25k
リファクタリングで実装が○○分短縮した話
infiniteloop_inc
0
140
ADRという考えを取り入れてみて
infiniteloop_inc
0
130
500万行のPHPプロジェクトにおけるログ出力の歩み
infiniteloop_inc
0
110
I ❤ Virtual Machines 仮想環境をより便利に使うツールたち
infiniteloop_inc
0
83
Other Decks in Programming
See All in Programming
LLM生成文章の精度評価自動化とプロンプトチューニングの効率化について
layerx
PRO
2
190
シェーダーで魅せるMapLibreの動的ラスタータイル
satoshi7190
1
480
ローコードSaaSのUXを向上させるためのTypeScript
taro28
1
630
PHP でアセンブリ言語のように書く技術
memory1994
PRO
1
170
よくできたテンプレート言語として TypeScript + JSX を利用する試み / Using TypeScript + JSX outside of Web Frontend #TSKaigiKansai
izumin5210
6
1.7k
エンジニアとして関わる要件と仕様(公開用)
murabayashi
0
300
AWS Lambdaから始まった Serverlessの「熱」とキャリアパス / It started with AWS Lambda Serverless “fever” and career path
seike460
PRO
1
260
タクシーアプリ『GO』のリアルタイムデータ分析基盤における機械学習サービスの活用
mot_techtalk
4
1.5k
Enabling DevOps and Team Topologies Through Architecture: Architecting for Fast Flow
cer
PRO
0
340
subpath importsで始めるモック生活
10tera
0
310
ふかぼれ!CSSセレクターモジュール / Fukabore! CSS Selectors Module
petamoriken
0
150
카카오페이는 어떻게 수천만 결제를 처리할까? 우아한 결제 분산락 노하우
kakao
PRO
0
110
Featured
See All Featured
The Cost Of JavaScript in 2023
addyosmani
45
6.8k
[Rails World 2023 - Day 1 Closing Keynote] - The Magic of Rails
eileencodes
33
1.9k
Making Projects Easy
brettharned
115
5.9k
Fantastic passwords and where to find them - at NoRuKo
philnash
50
2.9k
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
31
2.7k
Building a Scalable Design System with Sketch
lauravandoore
459
33k
A Modern Web Designer's Workflow
chriscoyier
693
190k
BBQ
matthewcrist
85
9.3k
How to Ace a Technical Interview
jacobian
276
23k
ピンチをチャンスに:未来をつくるプロダクトロードマップ #pmconf2020
aki_iinuma
109
49k
Site-Speed That Sticks
csswizardry
0
28
The Pragmatic Product Professional
lauravandoore
31
6.3k
Transcript
PHP の新しいバージョンは どのようにして生まれるか 五十嵐 進士 / sji / sj-i /
@sji_ch 株式会社インフィニットループ
自己紹介 @sji_ch SNS 上のアイコンは GitHub が自動生成した奴
生まれも育ちも仙台
ふつうのサラリーマン 株式会社インフィニットループ仙台支社所属 スマホゲーのサーバサイドプログラマ 地元が仙台や札幌の人とかはぜひ一緒に働きま しょう
Agenda 新しいバージョンはなぜ生まれるのか 新しいバージョンはいつ生まれるのか 新しいバージョンはどこで作られているのか 新しいバージョンはどのように作られているのか 新しいバージョンは誰が作っているのか
前提: 言語バージョン == 処理系バージョン PHP はどちらかといえば実装 == 仕様の言語 先に言語仕様を厳密に記述した文書があってそのとおり実装、の順ではない RFC
(後述)で各言語改定の内容を先に協議・決議はする かつては言語仕様の文書化を進める動きもあったが、今は非活発 php.net の公式処理系のバージョンが言語のバージョンでもある https://github.com/php/php-langspec/
新しいバージョンはなぜ生まれるのか
バグ修正・セキュリティ修正・環境への追従 言語も処理系も人が作っているもの バグは避けられないし見つかれば直さなければならない 依存するライブラリに問題が見つかる場合もある CPU や OS の新機能を使って高速化、などポジティブな環境追従も
言語改定 プログラマーは改善志向 普段使っている言語を更に便利にしたい 新たな言語機能が導入される 使ってみて問題を起こしやすい言語機能があれば改変・廃止される
言語改定がされないとどうなる? 言語改定に対応するのは面倒ではある しかしプログラミング言語はいくらでもある 使いづらい言語は徐々に使われなくなる 全然違う言語へ乗り換えるか、徐々に改善されていく言語へ付いていくか
新しいバージョンはいつ生まれるのか?
3 種類のリリース PHP のバージョンは x.y.z のように表記 例: 8.2.7 とか 8.1.20
とか x 、y 、z のどの部分が変わるかで 3 種類に分類 ポイントリリース マイナーリリース メジャーリリース
ポイントリリース x.y.z の z 部分が 1 増える 例: 8.2.7 なら
7 の部分 原則的に言語改定を含まない バグ修正やセキュリティ修正のみが行われる サポート中の各マイナーリリースについてほぼ毎月出る 各マイナーリリースで 34 〜 35 回が PHP 7 での実績
マイナーリリース x.y.z の y 部分が 1 増える 例: 8.2.7 なら
2 の部分 x.y.z の z 部分は 0 にリセット 機能追加のような言語改定を含む スクリプトについて後方互換性のない修正は原則的に入らない メジャーリリースでの削除に向けた機能の非推奨化は起きる 標準添付の C 拡張が PECL に移動される場合はある C 拡張向けの互換性が崩れる場合はある 年 1 回のペースでリリース(だいたい 11 月か 12 月) サポート期間は 3 年 2 年間バグ修正のポイントリリースが行われる 3 年目はセキュリティ修正のみでポイントリリースが行われる
メジャーリリース 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 日にリリース
新しいバージョンはどこで生まれるのか
GitHub PHP は OSS 処理系のソースコードは GitHub の php/php-src で管理 issues
で不具合報告を受付 PR で修正を受付 零細な修正はコミット権を持つコア開発者が直 接コミットしたりも
internals ML 言語改定には合意形成が必要 「こんな機能いいと思う!」で実装して PR するだけでは入らない 公式の議論の場としてどのような改定が必要かを議論する ML がある 議論への参加は自由(英語)
後述の RFC プロセスに従って改定が提案され、投票が行われる ML に参加していない人でもアーカイブサイトで議論の経緯が追える 公式のものだが見づらい 非公式で ML のアーカイブを見やすく整形して公開しているサイト https://news-web.php.net/group.php?group=php.internals https://externals.io/
Stack Overflow Chat | Room 11 Stack Overflow Chat の
Room 11 が PHP のチャットルーム 一部のコア開発者がよく顔を出す 非公式なコミュニケーションチャンネルとして ML へ出す前のアイデアが議論されることも https://chat.stackoverflow.com/rooms/11/php
新しいバージョンは どのように作られているのか?
RFC プロセスの概要 RFC: Request For Comments 言語改定を提案し、議論し、決議するためのプロセス PHP 5.4 の開発途中頃にルールが固まった
PHP には全ての方針を決定付けるような個人がいない、良く言えば民主的 バグ修正やセキュリティ修正はふつう RFC プロセスなしに GitHub 上のやり取りだけで完結
RFC プロセスの詳細 php.net の Wiki で RFC を書く internals ML
でアナウンス 言語改定の提案には告知から最低 2 週間の議論が必要 ML で投票開始をアナウンス 最低でも 2 週間の投票期間が必要 2/3 以上の賛成で承認 投票権を持つのは一部の人々 リポジトリへのコミット権を持つコア開発者 internals での議論によく参加するコア開発者に認められた人
RFC プロセスを実際にやってみると PHP 8.2 向けで trait で定数を定義可能にする提案を出して受理された けっこうやることが多い! 提案内容をまとめて英語で文書化(言葉の壁…… !)
ツッコミへ適宜に英語で対応(言葉の壁…… !) 過去の関連する議論を追って一通り対応(言葉の壁…… !) PHP の他の言語機能との整合性の検討 他言語の類似機能と比較して見落としがないか検討 提案の通りに動く実装を C で用意 https://wiki.php.net/rfc/constants_in_traits
新しいバージョンは誰が作っているのか?
OSS プロジェクトには多様な人々が参加 PHP は OSS プロジェクト 様々な背景を持つ人々が開発に参加 PHP や言語処理系の開発に余暇で関わりたい個人 PHP
の言語としての改善から利益を得る会社の従業員 言語処理系の作られ方を学びたい学生
企業所属のコミッター PHP の開発は企業所属のコミッターが支えてきた面もある 日中の時間フルタイムで開発に関われるか、は大きい Zend by Perforce の Dmitry Stogov
さん PHP 7 の高速化や PHP8 の JIT 導入などを成し遂げた 今も PHP 9 向けの新 JIT エンジンを作ってる かつて JetBrains で PHP の開発をしていた Nikita Popov さん
ネブラスカ問題 "xkcd: Dependency" 出典: https://xkcd.com/2347/ (CC BY-NC 2.5) 現代のシステム開発は至るところで OSS
を利用 OSS は更に別の OSS に依存 重要なシステムが一個人に依存していたりする 個人には生活があり人生に色々なことが起きる 話が一企業への依存になっても基本は同じ
The PHP Foundation 2021 年 11 月に設立 寄付を集めて PHP のコア開発者を雇う団体
現在までに 100 万 USD を調達 日本からも多くの寄付が集まっている 現在は 6 人のフルタイム・パートタイム開発者 を雇っている 多くのバグ修正や機能開発が成し遂げられた PHP から利益を得ている人々で分担して PHP 自 体を支えていく
新しいバージョンの 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/
ご清聴ありがとうございました