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
510
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
370
心理的安全性を学び直し、 「いい組織とは何か?」を考えてみる
infiniteloop_inc
0
460
ゼロからつくる 2D物理シミュレーション ~物理現象をコードに落とし込む方法~
infiniteloop_inc
0
610
詫び石の裏側
infiniteloop_inc
0
510
[新卒向け研修資料] テスト文字列に「うんこ」と入れるな(2024年版)
infiniteloop_inc
7
29k
リファクタリングで実装が○○分短縮した話
infiniteloop_inc
0
170
ADRという考えを取り入れてみて
infiniteloop_inc
0
160
500万行のPHPプロジェクトにおけるログ出力の歩み
infiniteloop_inc
0
130
I ❤ Virtual Machines 仮想環境をより便利に使うツールたち
infiniteloop_inc
0
110
Other Decks in Programming
See All in Programming
ASP. NET CoreにおけるWebAPIの最新情報
tomokusaba
0
370
pylint custom ruleで始めるレビュー自動化
shogoujiie
0
110
Linux && Docker 研修/Linux && Docker training
forrep
24
4.5k
Multi Step Form, Decentralized Autonomous Organization
pumpkiinbell
1
730
第3回 Snowflake 中部ユーザ会- dbt × Snowflake ハンズオン
hoto17296
4
370
[JAWS-UG横浜 #79] re:Invent 2024 の DB アップデートは Multi-Region!
maroon1st
1
140
技術を根付かせる / How to make technology take root
kubode
1
250
お前もAI鬼にならないか?👹Bolt & Cursor & Supabase & Vercelで人間をやめるぞ、ジョジョー!👺
taishiyade
6
4k
苦しいTiDBへの移行を乗り越えて快適な運用を目指す
leveragestech
0
510
プログラミング言語学習のススメ / why-do-i-learn-programming-language
yashi8484
0
130
チームリードになって変わったこと
isaka1022
0
200
バックエンドのためのアプリ内課金入門 (サブスク編)
qnighy
8
1.8k
Featured
See All Featured
Improving Core Web Vitals using Speculation Rules API
sergeychernyshev
9
440
Done Done
chrislema
182
16k
How to train your dragon (web standard)
notwaldorf
91
5.8k
Designing for Performance
lara
604
68k
Java REST API Framework Comparison - PWX 2021
mraible
28
8.4k
The Straight Up "How To Draw Better" Workshop
denniskardys
232
140k
Cheating the UX When There Is Nothing More to Optimize - PixelPioneers
stephaniewalter
280
13k
Distributed Sagas: A Protocol for Coordinating Microservices
caitiem20
330
21k
Building Adaptive Systems
keathley
40
2.4k
The Myth of the Modular Monolith - Day 2 Keynote - Rails World 2024
eileencodes
21
2.5k
ピンチをチャンスに:未来をつくるプロダクトロードマップ #pmconf2020
aki_iinuma
114
50k
Making the Leap to Tech Lead
cromwellryan
133
9.1k
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/
ご清聴ありがとうございました