本記事は、武田さんのPHP8.4翻訳プロジェクトのインタビューの中で伺った、より具体的な機能の紹介部分にフォーカスした内容です。(記事の最後に該当の記事のリンクをご案内しています。)
武田さんご自身がコントリビューターとして追加した機能や、翻訳プロジェクトのメインメンテナとしてPHP8.4を隈なく知り尽くす武田さんの悩んだ末に選んでもらったイチ押しの機能についての解説をご紹介します。
武田さんが8.4で追加した機能「PostgreSQLのPDO」
PHPのPDOからPostgreSQLのデータベースにアクセス時に、PostgreSQLでメモリをどれぐらい使っているのかを観測することができる新機能です。PDOとは、PHPからデータベースを扱うための拡張機能のことです。
▼実際のpull request
*補足:mergeされたとしても、closed表示になっちゃうことがある特殊な運用をしています。
▼日本語翻訳のpull request
PHPへの新機能追加は私にとっては長年の夢で、それが叶った思い入れのあるcontributionsとなりました。GitHubアカウント名の右側の表示からも分かる通り、この頃はまだメンテナではありませんでした。そして、この数週間後にはメンテナとしてIssue Trackerを立てたりしています。今思うと本当に急展開です。
今までlibpq含め全てのマニュアルに目を通していましたが、あまり機能追加が活発ではなかったため、この機能追加なら貢献できると思ったことが追加のきっかけとなりました。これまで、PHPは多くのサービスで採用されているMySQLをメインにDatabaseのサポートを拡充してきました。ところが、海外での開発で採用される機会が増えていく中でPostgreSQLのサポートをより拡充することの声が上がってきていました。
そして、個人的にPostgreSQLが大好きだということもあり、より皆さんに便利に使ってもらえたら、という想いもあり機能実装をすることになりました。
余談ですが、OSS活動をしている方なら少しでもあるはずの「この新機能について、自慢したい!」という思いから(OSS活動してる方、この気持ちありますよね?笑)、過去にPHP Conference Japan 2024では「PostgreSQLのPDO」をテーマに登壇もしています。
武田さん推し機能「BCMATH 任意精度数学関数」
翻訳に携わっていると隅々までの機能を知り尽くしているので、本当なら2時間くらい語り尽くしたいくらい選びづらいですが...1つ挙げるなら、PHPコア開発者の高町咲衣さんが追加したBCMATHの追加機能です。
この変更は、今までPHPが活用されづらかった端数を含む正確な計算が必要な金融の分野や、高精度が求められるヘルスケア分野にも広がるきっかけになる可能性を秘めていると感じます。そうなれば、後世になって語られるぐらいのインパクトがある機能追加なんじゃないかなと個人的に思っています。
▼翻訳元の英語ドキュメントのpull request
▼日本語翻訳のpull request
「任意精度数学関数」というのは、誤差が出ないよう正確な計算をするための機能です。この機能自体はもともと昔からありましたが、今までと比較して高速化し、より使いやすくなっているのがポイントです。なんと、状況によっては、約1000倍の高速化が施されています。また、before/afterで同じ計算をするコードを実際に見ると使いやすくなったことが顕著にわかると思います。
Before
// (150 2 + 100) 1.1
var_dump(bcmul(bcadd(bcmul('150', '2', 0), '100', 0), '1.1', 2));
// string(6) "440.00"
After
use BcMath\Number;
$number = new Number(0);
$result = $number
->add(150)
->mul(2)
->add(100)
->mul('1.1', 2);
var_dump($result);
// object(BcMath\Number)#3 (2) {
// ["value"]=>
// string(6) "440.00"
// ["scale"]=>
// int(2)
// }
Afterではオブジェクト対応により、可読性も高く、そしてシンプルで書きやすくなっていることが見てわかりますよね。
さらに、これだけではなく、演算子オーバーロードにより、演算子(+、-、×、÷など)を使った計算が実現し、よりシンプルで使いやすくなりました。
use BcMath\Number;
$answer = new Number(42);
$enigma = new Number(23);
get_class($answer); // BcMath\Number
get_class($enigma); // BcMath\Number
get_class($answer + $enigma); // BcMath\Number
error_log($answer + $enigma); // 65
error_log($answer - $enigma); // 19
error_log($answer $enigma); // 966
error_log($answer / $enigma); // 1.8260869565
error_log($answer % $enigma); // 19
error_log($answer * $enigma); // 21613926941579800829422581272845221888
出展元:以前武田さんがPHP勉強会で登壇した時の資料をブログ
関連ツール「Composer」の公式マニュアルでの紹介
Composerは、PHPでアプリを開発する際にライブラリを管理するツールで、どのフレームワークを採用していてもPHPを使う人なら利用しない人は誰一人としていないくらい有名なツールです。ただ、このComposerはPHPで書かれていますが、PHPが公式に出しているものではありません。PHP8.4の翻訳中、公式マニュアルに突然掲載されたのを見つけた時には本当に驚きました。
実際に翻訳が掲載されている[PHPマニュアル「Composer 入門」
▼日本語翻訳のpull request
この翻訳元のcommentを見ると、公式の出されたツールではないもののマニュアルを載せることについては慎重に議論がされていることがわかるので、ぜひ興味がある方は見てみてくださいね。
▼翻訳元の英語ドキュメントのpull request
Composerの部分は早く翻訳したいなと思っていた箇所なのですが、なかなか手をつけられずにいました。そしたらなんと、コントリビューターの方から翻訳のプルリクエストを頂き、おかげでやっと日本語訳を提供できました。本当に良かったなと思っています!
"マニュアルの「今」があるのはプルリクエストを下さった皆さん全員のお力です。PHPへの貢献に感謝!"
by武田さん
取材頂きました!マニュアルの話なのにいつの間にPHP 8.4を熱く語っていた取材風景。聞き上手な @hiraisoko_rai に感謝。
— 武田 憲太郎 (@KentarouTakeda) April 1, 2025
記事は私への取材ですが、 マニュアルの「今」があるのはプルリクエストを下さった皆さん全員のお力です。PHPへの貢献に感謝!https://t.co/YuAMfNZV0m
前回の記事では、翻訳プロジェクトについてをメインでお話ししてきましたが、インタビューの中でいくつか具体的な機能についても解説していただきました。
本記事をきっかけに、一部の機能に触れていただくことで、少しでもPHPマニュアルや、翻訳のOSS活動に興味を持ってもらえるきっかけになれば嬉しいです!
また、マニュアルの整備は、これからPHPに触れたい!という方や、PHPに触れ始めたばかりという方々の成長の後押しになります。あなたも、翻訳に参加してみませんか?
▼Issue「PHP 8.4 マニュアル翻訳状況」