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
480
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
300
心理的安全性を学び直し、 「いい組織とは何か?」を考えてみる
infiniteloop_inc
0
390
ゼロからつくる 2D物理シミュレーション ~物理現象をコードに落とし込む方法~
infiniteloop_inc
0
500
詫び石の裏側
infiniteloop_inc
0
400
[新卒向け研修資料] テスト文字列に「うんこ」と入れるな(2024年版)
infiniteloop_inc
6
25k
リファクタリングで実装が○○分短縮した話
infiniteloop_inc
0
150
ADRという考えを取り入れてみて
infiniteloop_inc
0
140
500万行のPHPプロジェクトにおけるログ出力の歩み
infiniteloop_inc
0
120
I ❤ Virtual Machines 仮想環境をより便利に使うツールたち
infiniteloop_inc
0
95
Other Decks in Programming
See All in Programming
KMP와 kotlinx.rpc로 서버와 클라이언트 동기화
kwakeuijin
0
190
PSR-15 はあなたのための ものではない? - phpcon2024
myamagishi
0
180
数十万行のプロジェクトを Scala 2から3に完全移行した
xuwei_k
0
350
各クラウドサービスにおける.NETの対応と見解
ymd65536
0
180
暇に任せてProxmoxコンソール 作ってみました
karugamo
2
730
useSyncExternalStoreを使いまくる
ssssota
6
1.4k
毎日13時間もかかるバッチ処理をたった3日で60%短縮するためにやったこと
sho_ssk_
1
360
103 Early Hints
sugi_0000
1
260
創造的活動から切り拓く新たなキャリア 好きから始めてみる夜勤オペレーターからSREへの転身
yjszk
1
140
php-conference-japan-2024
tasuku43
0
360
Stackless и stackful? Корутины и асинхронность в Go
lamodatech
0
970
コンテナをたくさん詰め込んだシステムとランタイムの変化
makihiro
1
150
Featured
See All Featured
[RailsConf 2023] Rails as a piece of cake
palkan
53
5.1k
A Modern Web Designer's Workflow
chriscoyier
693
190k
Large-scale JavaScript Application Architecture
addyosmani
510
110k
A designer walks into a library…
pauljervisheath
205
24k
Rebuilding a faster, lazier Slack
samanthasiow
79
8.7k
Evolution of real-time – Irina Nazarova, EuRuKo, 2024
irinanazarova
6
450
Learning to Love Humans: Emotional Interface Design
aarron
274
40k
Testing 201, or: Great Expectations
jmmastey
41
7.1k
Performance Is Good for Brains [We Love Speed 2024]
tammyeverts
6
530
How GitHub (no longer) Works
holman
311
140k
Product Roadmaps are Hard
iamctodd
PRO
50
11k
StorybookのUI Testing Handbookを読んだ
zakiyama
27
5.4k
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/
ご清聴ありがとうございました