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
500
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
330
心理的安全性を学び直し、 「いい組織とは何か?」を考えてみる
infiniteloop_inc
0
420
ゼロからつくる 2D物理シミュレーション ~物理現象をコードに落とし込む方法~
infiniteloop_inc
0
550
詫び石の裏側
infiniteloop_inc
0
420
[新卒向け研修資料] テスト文字列に「うんこ」と入れるな(2024年版)
infiniteloop_inc
6
26k
リファクタリングで実装が○○分短縮した話
infiniteloop_inc
0
160
ADRという考えを取り入れてみて
infiniteloop_inc
0
150
500万行のPHPプロジェクトにおけるログ出力の歩み
infiniteloop_inc
0
120
I ❤ Virtual Machines 仮想環境をより便利に使うツールたち
infiniteloop_inc
0
100
Other Decks in Programming
See All in Programming
AppRouterを用いた大規模サービス開発におけるディレクトリ構成の変遷と問題点
eiganken
1
450
ASP.NET Core の OpenAPIサポート
h455h1
0
120
“あなた” の開発を支援する AI エージェント Bedrock Engineer / introducing-bedrock-engineer
gawa
4
220
ErdMap: Thinking about a map for Rails applications
makicamel
1
650
毎日13時間もかかるバッチ処理をたった3日で60%短縮するためにやったこと
sho_ssk_
1
550
いりゃあせ、PHPカンファレンス名古屋2025 / Welcome to PHP Conference Nagoya 2025
ttskch
1
180
良いユニットテストを書こう
mototakatsu
11
3.6k
PHPで作るWebSocketサーバー ~リアクティブなアプリケーションを知るために~ / WebSocket Server in PHP - To know reactive applications
seike460
PRO
2
770
テストコードのガイドライン 〜作成から運用まで〜
riku929hr
7
1.4k
Stackless и stackful? Корутины и асинхронность в Go
lamodatech
0
1.3k
週次リリースを実現するための グローバルアプリ開発
tera_ny
1
1.2k
サーバーゆる勉強会 DBMS の仕組み編
kj455
1
300
Featured
See All Featured
A Tale of Four Properties
chriscoyier
157
23k
Code Review Best Practice
trishagee
65
17k
Rails Girls Zürich Keynote
gr2m
94
13k
Building Adaptive Systems
keathley
38
2.4k
Designing Experiences People Love
moore
139
23k
Product Roadmaps are Hard
iamctodd
PRO
50
11k
[Rails World 2023 - Day 1 Closing Keynote] - The Magic of Rails
eileencodes
33
2k
jQuery: Nuts, Bolts and Bling
dougneiner
62
7.6k
"I'm Feeling Lucky" - Building Great Search Experiences for Today's Users (#IAC19)
danielanewman
226
22k
Helping Users Find Their Own Way: Creating Modern Search Experiences
danielanewman
29
2.4k
Typedesign – Prime Four
hannesfritz
40
2.5k
Fontdeck: Realign not Redesign
paulrobertlloyd
82
5.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/
ご清聴ありがとうございました