こんにちは、仙台支社のいがらしです。インフィニットループは前回、前々回に引き続き、今年も会社として、The PHP Foundation に寄付をしました。
TL;DR
この記事では以下について述べています。
- The PHP Foundation は PHP そのものの開発を支援する団体で、多くの成果をあげてきました
- 言語の継続性と更なる発展には私たちに限らず、多くの企業からの支援が必要です
- PHP の存続と発展のため、みなさんの会社でもぜひ寄付を検討してみてください
勝率を上げる賭け方がある
現代人はとても忙しく、世にはありとあらゆる種類の情報があふれており、限られた時間の中で読める文章の量は限られています。
今、冒頭の 3 行まとめを乗り越えてこの記事を読み進めているあなたは、きっと PHP の現況や将来に関心を持つエンジニアやその卵、あるいはエンジニアたちの使用者として事業利益の一部を PHP に依存している経営サイドの方などでしょう。
どの技術に投資していくか、何を学び何に習熟していくかは、現代の IT 業界を生き残ろうとする我々の多くにとって重要な関心ごとの 1 つです。あなたはきっと、そのような判断に使うための情報源の 1 つとなることを期待して、SNS や検索エンジンを通じ、たった今この記事へたどりついた、そんなところでしょうか。
そのあなたが、ひょっとすると見落としているか、忘れているかもしれない点を 1 点、お伝えします。私たちや私たちの所属する企業が技術へ行う「投資」は、形によっては丁半博打のようなものではない本当の「投資」として、そもそもゲームの結果を変え得るのです。
The PHP Foundation について
PHP の開発体制
PHP はコミュニティによって開発されるオープンソースの言語で、言語仕様の改訂や処理系の開発には世界中の多くの人々が関わっています。処理系のソースコードは GitHub の php/php-src というプロジェクトでホストされています。
PHP の開発プロセスについては前年に、『PHP の新しいバージョンはどのようにして生まれるか』という発表でも少しお話させていただきました。
広く使われる言語をどのように実装していくかは、しばしば思いつきでコードを書いて PR を送っておしまい、という簡単なものにはなりません。たとえば新たな言語機能の追加なら、RFC の作成とそれについての議論と投票、開発者 ML や GitHub のコメント上での対話といったコミュニティでの合意形成活動が必要です。バグ修正やリファクタリングも、歴史ある巨大なコードベースから現状を把握していくのに多くの時間を要します。開発に参加する人々の大部分は仕事や学業といった本業を別に持っていて、それぞれの余暇からの対応時間の捻出は難しいことです。
開発リソースのリスクと手当てとしての The PHP Foundation
The PHP Foundation は PHP そのものの開発を支援するよう 2021 年に発足した団体です。
開発リソースの供出を個人やごく一部企業の無償奉仕的な活動へただただ依存していこうとするなら、PHP のように普及した言語処理系のプロジェクトにさえ、そこにはネブラスカ問題と同根のリスクがあります。世界中の多くの仕事や生活、もっと言えば、我々の仕事や生活、事業へのリスクです。
そこで、The PHP Foundation は世界中の企業・個人から広く寄付をつのって PHP のコア開発者と契約し、フルタイム・パートタイムで日中の仕事として金銭的な報酬を得ながら PHP の開発へ取り組むことを支援しています。
企業としての寄付
私たちが The PHP Foundation へ寄付をすれば、PHP という言語の開発リソースは拡大し、言語の継続性と発展はより確実なものとなります。
一方、日々新たな技術や言語が現れ、既存の言語も改定によってより生産性の高いものへと進化していく中、PHP が開発リソースの不足によってその進化や改善を止めたり、その速さが鈍化したとします。開発言語に起因する性能、堅牢性、安全性、メンテナンス性や拡張性、またそれを扱う開発者の確保性、エコシステムの完全性、といった面で、どんどん弱い言語になっていったとします。すると回りまわって、私たちが作り日々改善していく PHP 製プロダクトの価値、私たちが保有する PHP に関する技術や知識の価値もまた、それらの側面において業界の中で相対的に目減りしていくことになります。
状況を PHP へ事業利益の一部を依存する企業として、一歩ひいて(あるいは一歩踏み込んで)考えてみます。1 人 1 人の個人による善意の寄付や、JetBrains のようにより大きな他社による寄付を座して待つだけとするならば、私たちは私たちの事業や顧客へのリスクを少しもコントロールしようとしていない、ということになります。世にいくらでもある各リスクに対しどのくらいのコストを投じて手当てすべきか、は難しい問題ですが、使う言語がそもそもの私たちの利益の源泉の一部であるなら、ここにいくらかのコストを支払う合理性はあります。個人にとっては負担が大きくとも、PHP から利益を得る企業にとってはさほどでもない、無理のない金額がある筈です。
もちろん、それで弊社が年にたった $2,000 を寄付するだけでは、状況は大きく変わりません。実際のところ、この $2,000 というのは弊社にとってあまり負担の大きくない金額であるに過ぎず、言語の未来について何か大きなことをしたぞと言える額ではありません。しかし Web の 8 割を支えるという言語 PHP によって利益を得た企業の一部が、さらにその利益の一部、各社にとっての「あまり負担の大きくない金額」を PHP へ還元すれば、話はまるで違ったものになります。
たとえば世界中にある PHP 利用企業のうちの数十社が同等以上の額を寄付すれば、1 人のフルタイム開発者が追加で PHP の開発へ取り組めます。結果的に各社は少ない金額負担によって、事業へのリスクを軽減できます。
企業として無理のない額の寄付を行い、また寄付をしているということを声高に公言し、同様に PHP へ事業上の利益を依存する同業他社へも寄付を呼びかけていくこと。これは少なくとも弊社にとっては、一定の合理性があります。また私たち日本人の多くには報恩のストーリーを好む傾向もありますから、「これまで PHP でさんざんメシを食ってきた分のささやかなお返しだ!」というのは、どちらかといえば気分の良いお金の使い方でもあります。
今この記事を読んでいるあなたや、あなたの所属する会社にとってはどうでしょうか?「タダで使えるから採用した」「世間に広くノウハウが普及しているから採用した」「使える人を見つけやすいから採用した」。PHP の採用理由は多くの現場でそんなものかと思います。そんな言語から実際に一定の利益を得られた上で、これまで得た利益、またこれから得ていくであろう利益についてあらためて考えた時、どんな対応が適切そうでしょうか?
The PHP Foundation の実績
これまで寄付を得た The PHP Foundation が実際にどのような活動を行ってきたかも、少し振り返ってみます。あなたやあなたに説得されたあなたの上司や同僚たちが、何かの基準で費用対効果を検討する際の材料として使えるかもしれません。
The PHP Foundation のメンバーが提案・実装した RFC
2023 年から現在にかけて、The PHP Foundation のコア開発者が提案し、受理・実装された RFC には以下のようなものがあります。
PHP 8.4 向けで受理
- PHP RFC: Property hooks
- PHP RFC: PDO driver specific sub-classes
- PHP RFC: RFC1867 for non-POST HTTP verbs
- Dedicated StreamBucket class
- PHP RFC: Support object type in BCMath
- PHP RFC: Adding bcround, bcfloor and bcceil to BCMath
- Resource to object conversion
- PHP RFC: Deprecate implicitly nullable parameter types
- PHP RFC: Add http_(get|clear)_last_response_headers() function
- PHP RFC: Unbundle ext/imap, ext/pspell, ext/oci8, and ext/PDO_OCI
PHP 8.3 向けで受理
- PHP RFC: Arbitrary static variable initializers
- PHP RFC: Dynamic class constant fetch
- PHP RFC: Typed class constants
- PHP RFC: Readonly amendments
- PHP RFC: Deprecate remains of string evaluated code assertions
- PHP RFC: Path to Saner Increment/Decrement operators
- PHP RFC: Saner array_(sum|product)()
- PHP RFC: Define proper semantics for range() function
- PHP RFC: More Appropriate Date/Time Exceptions
- PHP RFC: Deprecate functions with overloaded signatures
他にも実装や提案内容へのレビューという形でメンバーが関わった RFC もありますし、Asymmetric Visibility のように今まさに PHP 8.4 へ向けて提案中のものもありますが、直接的に関与して受理されたものだけでもこれだけのものがあります。
言語の機能開発が時間を要することを把握する上で、中でも特に分かりやすいのは、今年にリリースされる PHP 8.4 向けで導入の決まった PHP RFC: Property hooks でしょう。これは他の言語にあるようなアクセッサ構文を PHP へ導入する提案です。
たとえばこれまでであれば、次のように getter や setter をメソッドとして定義したコードを PHP で見かけることはよくありました。
interface I
{
public function getInt(): int;
public function setInt(int $i): void;
}
class C implements I
{
private int $i;
public function getInt(): int
{
return $this->i;
}
public function setInt(int $i): void
{
$this->i = $i;
}
}
getter や setter をメソッドとして用意しプロパティの直接公開を避けることで、状態の取得や更新にあたって必要な処理が変わった場合でも、利用側コードを変えずに取得や更新の処理を修正できます。しかしこのやり方では、万全を期すると全てのプロパティに対して getter や setter の用意が必要となり、冗長なコードが増えやすい問題がありました。
PHP 8.4 からは単にこのように書けます。
interface I
{
public int $i { get; set; }
}
class C implements I
{
public int $i;
}
$i
の取得や更新処理に変更が必要となった場合でも、後から処理を追加できます。
class C implements I
{
public int $i {
get => $this->i * 2;
set => $value > 0 ? $value : throw new \LogicException();
}
}
Property Hooks は言語の歴史の中で成立してきた多くの他機能との整合性をとるよう、数々のエッジケースを考慮した長大な RFC となっています。このように多くの事項へ考慮をめぐらし文書や実装をまとめるのはもちろん、それができるほど言語や処理系コードに精通していくのにも多くの時間が必要なのは、想像に難くないところでしょう。
The PHP Foundation の開発者によるコミット・レビュー
“Impact and Transparency Report 2023”(『2023 年の影響と透明性に関するレポート』)によると、2023 年には Foundation と契約した 6 人の開発者によって、784 のコミットが行われました。これは 2023 年の php-src リポジトリに対するコミットの 33% に相当します。なお、その前年の 683 コミットとくらべ絶対数としては増加していますが、php-src へのコミット総数に対する割合としては前年の約 44% から減少しています。というのも、2023 年は非常に php-src へのコミットが活発化した年でもあり、Foundation 以外のメンバーによるコミットが前年の 885 から 1588 へと大きく増加しています。
2022 年のコントリビューショングラフと比べると、目立つ違いに気付きます。
2022 年のトップコントリビュータである Christoph M. Becker (cmb69) さんの活動が大きく減り、あまり姿を見なくなりました。この方は元々 Windows 用 PHP をビルドするチームのメンバーで、PHP の Windows 対応箇所を中心に広く活動していた方ですが、Microsoft のチームの Windows 対応からの引き上げなどが影響して状況が変わったとしても不思議ではありません。一方、Ilija Tovilo (iluuu1994) さんのコミット数がその差を埋めるかのように増加しました。iluuu1994 さんは 2022 年から Foundation と契約しているコア開発者の一人で、先述の Property hooks 提案もその実装面を中心に担当した人です。2023 年初期の頃から Open Collective で公開されている Foundation からの支払い額が増えていることから、契約時間が増えて活動量が増したのかもしれません。そして Foundation 以外からのコントリビュータとして、Niels Dossche (nielsdos) さんというベルギーの大学生(博士課程)の方のコミット数が目立ちます。
Foundation メンバーによるコードレビューは 2022 年には 283 件でしたが、2023 年には 702 件に増加しています。nielsdos さんのような Foundation 外の新たなコントリビュータのコミットは、一見すると Foundation の成果と直接関係しないように見えます。しかし、より迅速なフィードバックサイクルによって、新たなコントリビュータがより深くコア開発へ関わっていくのを助長する役割を果たしているとも見えます。
Sovereign Tech Fund からの支援
2023 年の終わり頃、ドイツ政府のオープンソース支援ファンドである Sovereign Tech Fund (STF) が、The PHP Foundation へセキュリティ監査や PECL の改善について投資することを決定しました。実際にこれまでその支援のもと、すでに以下のような取り組みが行われています。
- PECL の改善案作成
- FPM のテストツール開発
- ドキュメンテーションの改善
- OSTIF との提携での php-src のセキュリティ監査
Foundation は今年、STF から €205,000 の支援を見込んでいます。
The PHP Foundation の現在の人員体制
2024 年に入り、Foundation は 4 人のパートタイム開発者と追加で契約しました。現在は 9 人のボランティアボードメンバーと 1 人のフルタイムオペレーションマネージャー(JetBrains の従業員であり Foundation の創設にかかわった Roman Pronskiy さん)、そして 10 人のフルタイム・パートタイムの開発者の集まりから構成されています。今年に追加された 4 人の開発者の中には日本人開発者も 1 人含まれています。
昨年の追加開発者募集の文書を見ると、Foundation と契約するコア開発者はおおむね以下のような割合で作業をすることとされています。
- バグ修正や issue の確認に 40%
- 戦略領域への取り組みに 30%
- コードレビューに 20%
- RFC の準備や新機能の実装に 10%
戦略領域というのは、Foundation の掲げている以下のような領域を指します。
- セキュリティ
- 性能
- プロジェクトのインフラ部分
- Web APIs (json, PDO, streams, etc.)
- ドキュメンテーション
なお 2022 年から契約の続いている 6 人の開発者については、The PHP Foundation の GitHub Sponsors ページでそれぞれの関心領域が紹介されてもいます。
たとえばその中の 1 人、Arnaud Le Blanc (arnaud-lb) さんについてはこのように書かれています。
Improving the stability of PHP in Opcache JIT, Fibers, Generators, and improving type safety with generics.
arnaud-lb さんはかつて PHPStan へのジェネリクス導入に大きくかかわった 人でもあり、実際にNikita Popov さんが以前に行っていた取り組みを引き継いで PHP 本体へのジェネリクス導入の実験 もしているようです。
実際に取り組みが実を結ぶかは今のところ分かりませんし、言語の新機能開発やジェネリクスは現在公表されている戦略領域にもはっきりと含まれてはいないため、昨年の追加募集者と同じ条件であれば 10% の枠内での取り組みとなるかもしれません。とはいえ、うまくいけば今後、PHP にジェネリクスが導入される日さえ来るかもしれません。
Foundation は今年の 9 月にも新たな開発者を募集する予定です。
寄付の集まり具合と開発者への支払い状況
Foundation の収支は Open Collective にて全て公開されています。
2023 年を通じて、Foundation は企業・個人をあわせて $478,767 の寄付を集めました。寄付を募るプラットフォームである Open Collective への 10% の手数料、支払い手数料を差し引いた額は $418,669 です。設立年の 2021 年の寄付総額が $362,142、2022 年が $493,698 ですので、2023 年は 2022 年に比べて少し減少しているものの、今のところは安定して寄付を集められているといえます。
一方、2023 年の年の全開発者への支払総額は $275,181 でした。2022 年は $157,705 です。2022 年はこの年の 4 月から最初の 6 人の開発者と週 1~ 2 日でのパートタイム契約が始まったため、通年で契約があって契約時間も増えた 2023 年とくらべると、支払額は少なめでした。ここまでの収支を突き合わせると、いま現在についてだけ言えば予算に少しの余裕がある状況とも見えます。
しかし、パートタイムの契約を続けるばかりでは開発者の生活の安定を保証しづらくなりますし、生活の安定を保証できなければ人をつなぎとめられません。
契約時間を増やし、市場相場にあわせた条件で開発者と契約していく必要があります。またプロジェクトの安定的な継続のためには、新たなコア開発者のプールを広げていくことも重要です。
実際に 2024 年は 2 人のパートタイム開発者がフルタイムとなり、また 4 人の新たな開発者が追加契約されもしたため、支払い額は増加する見込みです。予算としては最大で $840,000 までの支払いが予定されていて、6/1 時点までの期間では実際に $225,952 が支払われています。今のところ予算を使い切りはしなさそうなペースですが、昨年に得た寄付総額を上回る可能性は十分あり、また今後 Foundation がフルタイム開発者を増やしていくには更に多くの支払いが(=寄付が)必要という点には留意して見る必要があります。
Open Collective のサイトで寄付の受付状況を見ると、月ごとの定期支払いの総計は約 $17,325 で、12 ヶ月分では $20,7900 となります。1 社で年に $100,000 や $75,000 といった額を寄付している JetBrains や Automattic のような大口の寄付元の存在感は、内訳としてまだまだ大きいようです。が、弊社のような $2,000 以下の寄付の総額でも 2023 年実績で $117,000 を越えており、これは 1 人の C 言語開発者をフルタイムで雇えるかどうかという額にあたります(高いスキルの持ち主を US で探すと少し足りないかも、ヨーロッパなら足りそう、くらいを現在の市場相場と想定しています)。とにかく、私たちが「あまり負担の大きくない金額」の寄付を続けていけるか、広げていけるかにも、今後の PHP の発展がけっこうかかっているのだ、ということはいえるでしょう。
なお日本からの寄付はけっこう多く集まっているようで、弊社の名前さえ Foundation の中の人に認知されていたりします。知る限りでは 2023 年には株式会社コロプラ様からの寄付も行われはじめました。これまでにどのような企業から寄付が行われているかは前回寄付時の記事にもまとめていますが、「他にも日本から寄付してる会社あるよ」という情報をお持ちの方がいらっしゃいましたら、はてブのコメントや弊社問い合わせ窓口などでお伝えください。
現在は年に $12,000 を寄付する Silver スポンサーになると Advisory Board のメンバーになることができ、Foundation の Slack にて開発者とコミュニケーションをとったり意見を伝えたりするなどの幾つかのスポンサー特典も用意されているようですので、寄付を検討されている方はそちらも確認してみるとよいかもしれません。
おわりに
この記事を用意するため情報整理用に手元へ用意したメモ書きには、確かに「長くても 4000 ~ 5000 字で済ますぞ」と書いてあるのですが、一通り書いてみたら少し長くなってしまいました。
株式会社インフィニットループでは、仙台や札幌といった地域に根差しつつ、世界の中で自分たちに何ができるかを考えつつ、エンジニアとしての腕をふるいたい方を募集しています。
詳しくはこちらの求人詳細をご覧ください → 採用情報ページ
特に仙台支社のほうへ興味のある方はこちらをご覧ください → 仙台支社特設ページ