N’s Creates エンジニアの本田です。9月24日に大阪からはるばる東京は蒲田までトリップし、PHPカンファレンスに参加してきました。今回はその時の最も感動した講演の内容を手短に取り上げてみました!
PHPカンファレンスはPHPエンジニアが全国から集まり、日本を代表する企業がスポンサーにつく中で年に1回だけ行われるPHPの研究・発表会です。40名近くのエンジニアが登壇・発表する中で私の中で一番印象に残った講演を今回は紹介したいと思います。
私はこの講演の題名を見た時に、「あ、なんかエンジニア業務の中でPHPをプロジェクトで使っていて、PHPでロジックを組んで機能を追加した話みたいな感じかな〜」と思いました。が、いざ聞いてみると内容はその遥か斜め上をいくものでした。なんと、登壇者の方が何か業務システム開発とかでPGを行った話でも、PHP Extensionの話でもなく、PHP自体に機能を追加した話だったのです。自分もPHPはそれなりに長いこと仕事でもプライベートでも触れてきて色んなエンジニアと話してきましたが、PHP自体に機能追加したエンジニアを見たのはこの時が初めてでした。恐るべしPHPカンファレンス、、とこの登壇の冒頭を聞いて驚嘆しました。
登壇者はとあるゲーム開発の有名企業で働くエンジニアの方だったのですが(めちゃくちゃ若い)、ゲーム開発の根幹を担うサーバ側のロジックはPHPを採用しているとのことでした。具体的にはダンジョンマップの生成、ダメージの計算、獲得報酬の抽選、などなどをPHPで行っているとのことで、中でも今回の講演でテーマにあがったのが乱数生成器の話でした。
そもそも乱数とは何かというところから説明をしますと、サイコロをイメージしてもらうとわかりやすいかと思いますが、無作為に生成された数値を指します。現代のコンピュータは確定的な計算をしているため完全に無作為な数を生成することは不可能だそう(例外はある)。PHPは既に再現性のある乱数生成器を搭載しています。mt_srand()、mt_rand()を用いた乱数生成がそれです。しかし、PHPの既存の乱数生成は以下にあげるように沢山の問題を抱えています。
1. メルセンヌツイスタとしてそもそも実装が間違っている
2. 初期シードがPIDと日時(コンテナでは結果が偏る)
3. PHPランタイムに対して状態がグローバル(他の関数を別の機能で呼び出した時に結果がずれ得る)
これらの問題を解決するため、登壇者の方はPHP Extensionで実装することも考えたそうですが、メンテナンス性やパフォーマンスなど諸々勘案した結果、PHP本体にネイティブ実装する方向で決意したそうでした。
PHPに新機能を実装する手順として、アイディア・方法をまとめた後は、まずはPHP本体の開発メンバ(全員海外の人)にアプローチする必要があります。エンジニアの方は実装アイディアの共有となるとGItHubなどを思い浮かべると思いますが、PHPの世界ではいまだにメーリングリストが利用されています。(GitHubでのやり取りも存在はする)
登壇者の方も初めての経験だったそうですが、メーリングリストにカタコトの英語で突撃したものの初めのうちはほとんど反応をもらえなかったそうです。しかし粘りに粘った末、Nikita氏というPHP界隈では知る人ぞ知るエンジニアからポジティブな返信があったことから徐々に話が進み始めたそうです。そして、その後紆余曲折様々な苦労がありながらも見事、PHP8.2.0で、新機能として登壇者が作成した新しい乱数生成器が実装されたそうです。登壇者の気力と行動力、素晴らしいとしか言いようがありません。。
上記でかなり手短に書きましたが、PHP本体に新機能を実装するためにはまとめると下記のようなステップがあるそうです。
RFCの作成方法についてもかなりノウハウが必要だそうで、その辺りもかなりの労力を使われたというお話もありました。
今までPHPカンファレンス関西などにも参加し、様々な方の登壇を聞いてきましたが、登壇者の方の技術力・行動力にダントツで感動した登壇内容でした。自分も今後もなんらかの形でPHPの世界に足を踏み入れ・貢献したいと刺激される内容でした。臨場感を味わえるので現地開催があるカンファレンスの場合は実際に行ってみることをお勧めします!大阪から蒲田まで行ったかいがあった、、
N’s Creaetesでは、事前に申請すれば社員の社外学習も支援していますので、心おきなくこういったイベントにも参加できます!入社を考えている方は、ぜひこういった制度の存在も考慮に入れてみてください!
今回は以上です、それでは!