Slide 1

Slide 1 text

非公式mbstringレビュワー 12月と1月について

Slide 2

Slide 2 text

自己紹介 てきめん ● https://tekitoh-memdhoi.info ● @youkidearitai ● https://www.youtube.com/user/t ekitohmrp ● https://www.nicovideo.jp/user/2 957748 ● https://github.com/youkidearitai – GitHub Sponsorsはじめました オレ

Slide 3

Slide 3 text

アジェンダ ● mbstringについてまとめたらFYAされるようになった ● Pull RequestをcommitしてもらってContributorフ ラグをもらう ● mbstringの変更について ● 何かあったらIssueとか貢献してください

Slide 4

Slide 4 text

文字コードとは(ざっくりてきとう) ● コンピューターは数値を扱う – 数値に文字を割り当てることでやり取りをしている ● 最近ではほとんどUnicodeのUTF-8を使えば良くなってきた – そのため意識することがないこともあるかも – 業務システムなどでは他の文字コードを使うことがあるかもしれ ない

Slide 5

Slide 5 text

mbstringとは ● PHPでマルチバイト文字列を扱うPHPの拡張 ● C言語で書かれている – libmbflというライブラリを含んでいて、文字コードそのものの 処理はこれが行う ● 簡単に言うとmb_で始まる関数は大体mbstringの範疇 – よく使うのはmb_convert_encodingでしょうか

Slide 6

Slide 6 text

PHP 8.1からのmbstringの変更 ● 非公式 PHP 8.1のmbstringアップグレードガイドを作 成した – 日本のPHPユーザーに読んでもらえた、助かる ● まだ把握していない部分があって、Pull Requestにした – mbstring: Do not stop when mbstring test faild #10009 – このPRのおかげか、執筆者であるAlexさんにFYA(For Your Action)されるようになった

Slide 7

Slide 7 text

phptファイルとは ● php-srcでの単体テストを 行うためのPHPファイル ● 出力された結果と EXPECTとを比較する – くわしくは http://qa.php.net/write- test.php

Slide 8

Slide 8 text

Contributorフラグをもらった ● Contributorフラグをもらいました。 ● これからもなんか気づいたらコミットしていきた いと思います。

Slide 9

Slide 9 text

FYAされるとはどういうことか ● こんな風に、メンションしてくれるようになったのでレ ビューしている ● FYA(For Your Action)、あなたのレビューが欲しいと 訳すべきでしょうか

Slide 10

Slide 10 text

Major overhaul of mbstring (part 27) ● Major overhaul of mbstring (part 27) #10048 – mb_strpos, mb_stripos, mb_strrpos, mb_strripos, mb_strstr, mb_stristr, mb_strrchr, mb_strrichr, and mb_substrなどを再実装 ● ここでもFYAで呼ばれたのでレビュー、一箇所C言語の型につ いて指摘しました

Slide 11

Slide 11 text

Major Overhaul of mbstring (part 28) ● Major overhaul of mbstring (part 28) #10099 – mb_substr_countの再実装 – これにも@youkidearitaiが呼ばれてる ● 特に何もしてないが – UTF-8の文字列のときに効果を発揮するみたい

Slide 12

Slide 12 text

mb_strposの問題 ● mb_strpos matches illegal character when ne edle is '?' #9613 – これは、mb_strpos関数にUTF-8以外のエンコーディン グを指定したら、不正なバイトが”?”にマッチするという てきめんが立てたIssue – 一旦はdifferent encoding(違う文字コード)ということ でcloseされるが、これはillegal characterであると説明 したところ、再オープン、修正となった

Slide 13

Slide 13 text

mb_strposの問題の修正 ● Performance optimization for mb_stripos and mitigation for GH-9613 #10107 – これは、mb_strpos関数にUTF-8以外のエンコーディン グを指定したら、不正なバイトが”?”にマッチするという てきめんが立てたIssueの修正のプルリクエスト – 地味に「mb_strposのテストがmb_striposのテストに 置かれてるよ」っていう指摘をした

Slide 14

Slide 14 text

mb_convert_kanaの問題の修正 ● Allow 'h' and 'k' flags to be combined for mb_con vert_kana #10178 – mb_convert_kana関数のhとkフラグは両立するが、PHP 8.2からは両立しないようにエラーで落としてたのを修正 – Looks good to meをしたら、Nikitaさんがやってきて「正常 系のテスト(positive test)を勧めますよ」というコメントが来た – mb_convert_kana関数では、PHP 8.2からはありえないフラ グの組み合わせに関してエラーを出すようになったので注意

Slide 15

Slide 15 text

mbstringの変更について ● Performance optimizations for mb_strlen and encoding conversion of SJIS, UHC, CP936, BIG 5 text #10211 – それぞれのmb_strlenのパフォーマンス改善について のPull Request – しかし、このPRとSJISのmb_strlenの結果が違うケース が存在することをてきめんが発見、既存のバグであるこ とが判明(0x80が2バイトの先頭と数えられてたというバ グ)

Slide 16

Slide 16 text

発見されたSJISバグの修正 ● Fix entries in SJIS multi-byte character length tables for bytes which do not start any valid 2 -byte character #10230 – 先程のSJISでの挙動の違いから、1バイト目0x80が1バ イトとして処理されないとおかしいのでその修正

Slide 17

Slide 17 text

SJIS-mac(MacJapanese)のマッピングの変更 ● Update SJIS-mac mappings to use Unicode codepoint s which were added after Unicode 1.0 #10264 – これは、MacJapaneseのUnicodeマッピングを、非互換ではあるが 妥当なUnicodeコードポイントに変えようというPull Request ● JAPANESE.TXTの定義を変更して非互換のコードポイントにしようとしてい る ● WikipediaのMacJapaneseの項を見るとわかりやすい – しかしながら、「MacJapaneseという古い文字エンコーディングに、 非互換の変更が必要なのか?」という観点からこれはしなくてよい のではということをコメントした – 現状待ち

Slide 18

Slide 18 text

SJIS-mac(MacJapanese)のマッピングの変更 MacJapaneseの歴史を 英語で伝えるのがものす ごく難しかったため、日本 語コメントになった(汗)

Slide 19

Slide 19 text

ここまでが呼び出されたものとなります ● 率直に言うと、フリーランスの活動を休止してまでやるのは 「非公式 PHP 8.1のmbstringアップグレードガイド」を作 成するくらいで止めようと思っていたが – Alexさんは日本語の読み書きができるため、この記事を読んだ らしく、ここから信頼を得られるようになってしまったみたい – そこでレビュアーとして活動しているというわけです

Slide 20

Slide 20 text

貢献がほしい ● 働きながらレビューするのは大変そう – More performance increases for mbstring functions on UT F-8 text#10313 と言ったパフォーマンスの最適化には、SSE2が使われているの で、よくわからんかった ● さらなる勉強が必要である – 非公式レビュアーとしてmbstringの第一人者になりつつあるの は嬉しいが、何か気がついたらIssue、コメントしてくれると嬉しい – そもそもOSSなんだから、抱え込むことがおかしいのでペース配 分を考えます

Slide 21

Slide 21 text

まとめ ● mbstringは進化をし続けています。 – PHP 8.1、8.2、8.3とmbstringの進化はとどまることを知らないの で後方互換性に気をつけましょう – これのレビューを行えるのは文字コードを追いかけているてきめ んとしてはかつて無い幸運だと思う ● 何かあったらIssueや、ドキュメンテーションの充実とかで 貢献してくれると嬉しい

Slide 22

Slide 22 text

おわり ご清聴ありがとうございました