インフィニットループ 技術ブログ

2021年11月29日 (月)

著者 : s-igarashi

インフィニットループは PHP の継続的な発展を目指す The PHP Foundation に寄付をしました

こんにちは、仙台支社のいがらしです。
インフィニットループは会社として、先日設立された The PHP Foundation にささやかながら寄付をしました。


PHP 原作者の Rasmus Lerdorf さんと Laravel 原作者の Taylor Otwell さんと JetBrains さんあいえるたんが同じ画面におさまって見えるのは、たぶん今だけ……!

TL;DR

この記事では、以下の内容について述べています。

  • PHP は主要開発者が抜け、今後のために Foundation を作りました
  • 弊社は支援を行いました
  • 継続的な PHP の成長のためにみなさんの会社でも寄付を考えていただけませんか

経緯など

日本時間で 11 月 23 日の午前 2 時頃、JetBrains の The PhpStorm Blog にて、以下 2 つの PHP にとって重大な発表が行われました。
  • Nikita Popov (nikic)さんが 12 月から活動の主軸を PHP から LLVM に移すこと
  • これを契機としての The PHP Foundation の設立
この 2 つの事件により、PHP はプログラミング言語として大きな転機を迎えています。
弊社インフィニットループはかねてより PHP を業務で使用してきており、PHP の言語としての発展と継続にその利益をある程度依存しています。道義的な側面でもある種の投資的な側面でも、元々何らかの形でコミュニティへ利益を還元すべきという認識はありつつ、PHP という言語自体へ適切な形で還元を行う方法が分からないでいました。The PHP Foundation の設立により、今回この問題が解消したわけです。
しかし、弊社一社の支援だけであまり大きく状況が動くわけではありません。できれば PHP によって利益を得ている多くの同業他社が同様に、あるいはそれ以上の寄付を行い、できるだけ多くの額が集まってくれればとよいと考えています。
すでにいくつかのニュースサイトで今回の件について触れる記事も出ているところですが、問題意識を広く共有するため、あらためて Nikita さんや PHP の開発体制、The PHP Foundation の意義について少し解説してみます。

Nikita Popov さんについて

PHP の開発体制についてよく知らない人が「なぜ Nikita さんという人の動向がそれほど PHP にとって重大なのか」を認識するには、まずここ数年の php-src(PHP 公式処理系の GitHub リポジトリ)のコントリビューショングラフを見るのがよいでしょう。
このように単純なコミット数だけからも、Nikita さんがこの約 10 年の累計でトップのコントリビュータであることが分かります。特に彼が大学卒業後 2019 年 1 月に JetBrains に加入し、日中の仕事として PHP の開発を行い始めてからは、爆発的に貢献量が増えているのも見てとれます。
コミット数だけを見ても、実際的な貢献度とどれだけ関係があるかは疑わしい、と冷静に考える人もいるかもしれません。実のところ、この圧倒的なコミット数さえ彼の本当の影響力をごく一部しか表せていないという意味で、その疑念は正しいものです。
Nikita さんは 2011 年、高校生の頃(当時は 16 歳だった筈です)に PHP で PHP のパーサを作り公開しました。なおこの PHP-Parser は、現在 Psalm や PHPStan のような静的解析ツールの基盤ライブラリとなっています。
プログラミング言語としての PHP に関心を持ち、翌年 2012 年には php-src の開発に関わりはじめていて、例えば PHP5.5 で導入されたジェネレータの RFC 起草と合意形成までの議論、実装 もこの頃の彼によるものです。ジェネレータは元々 PHP による非同期処理の実装を視野に入れて開発されたもので、後に ReactPHP や Amp のような非同期処理ライブラリがこのコンセプトを実用レベルで実現させ、PHP 8.1 で Fiber が導入される流れにもつながりました。
これまで彼によって数多くの提案とその実装が PHP へ取り込まれてきており、PHP 7.0 での AST 取り入れ構文の整理、旧来からの不合理な仕様の廃止、PHP 7.4 での型付きプロパティアロー関数、PHP 8.0 での名前付き引数コンストラクタプロパティプロモーションUnion 型など、重要度の高い幾つもの変更が成し遂げられました。PHP 8.1 向けでも 25 の RFC のうち readonly プロパティ初期化式での new を含む 9 つの RFC を通し、またつい先日 PHP 8.2 向けでも動的プロパティの非推奨化というインパクトの大きな提案を可決に持ち込んでいます。
彼の成果はコミットや RFC として見える分かりやすいものだけではありません。情報が少ない PHP の処理系内部について個人サイトや PHP Internals Book などで幾つもの情報発信を行っているほか、日々他の開発者の多くの PR や RFC をレビューし、メーリングリスト上のコア開発者同士の議論でも適切な指摘や助言を続けてきています。PHP 8.0 で導入されたJITDmitry Stogovさんという古くからの開発者により実装されたものですが、常連のコア開発者の中でも JIT 部分の修正にある程度のレビューができる人は、まだ Nikita さん以外にほとんどいません。
PHP のコア開発者の一人でありapcupcovparallelといった拡張の作者でもある Joe Watkins (krakjoe) さんは、今日の PHP のバス係数(メンバーの何人がバスに轢かれるとプロジェクトが破綻するか、という属人性に関する物騒な指標)は たった 2 であるとしており、2 人のうちの 1 人として Nikita さんを挙げています(もう 1 人は Dmitry さん)。PHP の RFC を蓄積する PHP.net Wiki には「Nikita Popov を PHP コアにマージする」というジョーク RFC さえ存在しています。
そしていなくなれば PHP というプロジェクトが破綻する、と名指しされているまさにその重要な 1 人が、実際にいなくなりはしないまでも、活動規模を大きく縮小しようとしているわけです。Nikita さんは以前より Rust や LLVM の開発にも参加しており、今現在は LLVM の方に関心があるようです。Nikita さんはもうやりたいようにやっていただくのが世のため人のためになるとして、問題なのはこのままだと PHP の開発や不具合修正の速度が大幅に低下するだろう、ということです。

PHP の開発体制と開発者の日中の仕事

PHP の開発はコミュニティにもとづいています。Rasmus Lerdorf さんが 1995 年に公開し、オープンソースプロジェクトとして多くの開発者が参加してきました。PHP 5.4 の頃に RFC プロセスと呼ばれる民主的な意思決定プロセスが定められ、PHP への機能追加などの大きな修正は RFC (Request for Comments) の起草と告知、2 週間以上の議論とコア開発者による投票が必要とされています。PHP のバージョン管理システムへのコミット権を持つコア開発者や、既存のコア開発者から特に認められた者が各 1 票の投票権を得られ、投票の可決には 2/3 以上の賛成が必要です。バージョン管理システムへのコミット権は、継続的に php-src へパッチを送るなどしているとコア開発者から個別に声がかかります()。
多くの開発者は日中に別の仕事を持ちつつ、PHP 処理系の開発は個人の時間で取り組んでいます。しかし RFC の起草や合意形成、実装は多くの時間を要する作業です。
ここで2018 年から現在までのコントリビューショングラフを見てみましょう。コミット数 1 位の Nikita さんは JetBrains にてフルタイムで PHP の開発に取り組み始めるまで、コミット数の面で(多くはあるのですが)今ほどのインパクトはありませんでした。2 位の Dmitry さんは Zend by Perforce の従業員として、日中の仕事として PHP のエンジン開発に取り組んでいます。3 位の Christoph M. Becker (cmb69) さんと 4 位の Anatol Belski (weltling) さんはどちらも Windows 用 PHP をビルドするチームのメンバーです。後者の Anatol さんは Microsoft に所属し、2018 年まではPHP on Windows and Azure にて、日中の仕事として Windows 用の不具合修正などを中心に活発に活動していました。一方、2019 年以降は明らかに php-src での活動量が落ちています。入れ替わるようにコミットの増えている Christoph さんについてはドイツ在住という以外の情報がありませんが、日頃のコミット日時からやはり日中の時間帯に活動していることが多いようです。
当然のことではあるのですが、PHP プロジェクトが言語自体の開発をどれだけ進められるかには、このように各開発者がどのくらいの時間を投入できるかが大きく影響します。企業の日中の仕事として開発を行うごく少数の開発者への依存度が大きい、という見方もできますし、逆にそれ以外のコア開発者がどれだけプライベートの時間を投入できるかへの依存度が大きい、という見方もできるでしょう。どちらにせよ、これほどまでに大きく成長し、世界の沢山の仕事、人々の生活を支える言語としてはあまり健全でない状態だったのです。

The PHP Foundation 設立の意義とこれからの PHP

この問題意識はかねてより何人ものコア開発者の間で共有されており、PHP のコア開発を継続的に行っていくための基金を設立する案も散発的に提案されてきていました。しかしその実現にはコミュニティでの合意や事務的 / 法的な手続きなど、何が必要かを明らかにしながら一つ一つクリアしていく取り組みが必要です。やはりこれも、個人がプライベートの時間を投じて行うには負担の大きな仕事です。
PhpStorm の販売により PHP という言語の発展から利益を得ている JetBrains にとって、Nikita さんを雇うという形で言語そのものの開発を支えるのは極めて合理的で建設的な判断だったと言えます。その Nikita さんが関心の移行に伴って活動規模を縮小するとなった時、より持続性のある支援の形を構築できるよう JetBrains の人々が精力的に取り組んだのは、PHP にとって本当に素晴らしいことでした。
Nikita さんの代わりとなるような開発者は、そう簡単に見つかるものではありません。16 歳から 10 年間 PHP の言語そのものに第一線で取り組んできた、などという人は、彼以外に世界中探したって見つかりはしないのです。しかし The PHP Foundation が多くの資金調達に成功し、1 人ではなく複数の開発者が、フルタイム / パートタイムで日中の時間を使えるようになったとすればどうでしょう。
例えば PHP 8.0 に match 式と nullsafe 演算子throw 式をもたらし、PHP 8.1 の Enum でもその実装面を担当した Ilija Tovilo さんのような人々が複数現れ、より多くの時間を投入できるようになるとしたら?
弊社が一度 2,000 USD を寄付しただけでは状況は大きく変わりませんが、同様に状況を認識して寄付を行う企業が 100 社も集まれば、話は変わっていきます。Web の約 8 割を支えると言われる PHP、その PHP によって利益を得ている多くの企業のごく一部が、その利益のごく一部を PHP へ還元すれば、話はまるで違ったものになるのです。これまでよりもっと持続的に、これまでよりもっと速い発展が得られることにさえなり得ます。
もちろん、支援を必要とするプロジェクトは世界にいくらでもあり、各社の予算は有限です。どこにどうお金を使うべきかは、各社それぞれに判断基準があることでしょう。ただ一つ言えるのは、我々は PHP によってすでに多くの利益を得ていて、その PHP は「今」助けを求めている、ということです。
言語が単に廃れることを覚悟し、いざという時には人員やプロジェクトの言語移行コストを支払うことを検討するか。周囲への同調を呼びかけつつ、無理のない範囲で一定の投資を行い、リスクを最小化しようと働きかけるか。この 2 つの選択肢は決して排他的なものではなく、両方を選ぶことだってできます。
もしあなたが企業に所属していて、所属先の予算配分に裁量を持つ立場にあるなら、どんな対応が最も自社の利益に即したものとなるかを少しだけ考えてみてください。もしその立場にないとしても、もし現状の自社の対応に問題を感じるようであれば、裁量を持っている人を動かす方法がないかを、少しだけ考えてみてください。

おわりに

株式会社インフィニットループでは、仙台や札幌といった地域に根差しつつ、世界の中で自分たちに何ができるかを考えつつ、エンジニアとしての腕をふるいたい方を募集しています。
詳しくはこちらの求人詳細をご覧ください → 採用情報ページ (仙台支社特設ページはこちら

ブログ記事検索

このブログについて

このブログは、札幌市・仙台市の「株式会社インフィニットループ」が運営する技術ブログです。 お仕事で使えるITネタを社員たちが発信します!