SlideShare una empresa de Scribd logo
1 de 120
Descargar para leer sin conexión
なぜ、 PHP の mbstring.func_overload
を deprecated にするのに 5 年
かかったのか? - 慢心、環境の違い
Y8 2017 spring in Shibuya
sasezaki
May 27, 2017
2
目次
●
自己紹介
●
PHP のこれまで
●
PHP の仕組み と 拡張モジュール
●
PHP と 文字列
●
mbstring.func_overload の機能について
●
非推奨提案するに至った経緯 / 提案以降の話
●
5 年かけたことについての反省点
●
"mbstring.func_overload" と同じ事態を避けるには
●
まとめ
●
... おまけの話 ( 例えば文字列を避ける、 7.2 での他の deprecated)
3
自己紹介

はじめまして! sasezaki です。

私が mbstring.func_overload につい
て deprecated を表示するようにしろ !
と bugs.php.net に issue レポート
(#65785) した人です。
4
過去の主な Talk
2009 / PHP勉強会
PHP カンファレンス 2011
PHP カンファレンス福岡 2016
5
PHP のこれまで
6
皆さん PHP を知っていますか?
7
8
私は
「俺 ホントはPHP のこと、ちっとも
分かってあげてやれてなかったんだ !」
というのを
10 年ぐらい続けてます。
9
だって、そうですよね。
PHP のソースコード・ドキュメントには
非常に多くの開発者が、
その都度の状況や思惑などを
おりまぜながら、
PHP は成長してるのだから。 ( 今も! )
10
閑話休題
11
PHP: Hypertext Preprocessor
 としてよく聞く話
・ LAMP (Linux, Apache, MySQL, P** ) の P として普及
・ C によく似た文法。グルー言語としてみなされることもある
・ 非常に多くの機能( 拡張 / 関数・クラス ) が標準で
用意されている。
12
PHP これまでの歩み
https://github.com/open-source-museum/the-history-of-php/
13
PHP の普及期

.php3 拡張子?

Zend Engine 1

デフォルトでは、 register_globals をオフに - 4.2

stream (I/O抽象化レイヤー ) の導入 - 4.3
1999 2003~
14
PHP 3 や 4 の初期 、みんな
mbstring を使っていたかというと・・・
➔
PHP 版の jcode もありましたが・・・
➔
※ PHP 3の頃は、前身として I18n Package というものだったようです。
(ext/mbstring/README_PHP3-i18n-ja)
1999 2003~
15
PHP 5移行期
●
日本にとどまらず、勉強会やカンファレンスが活発に
●
“ フルスタックフレームワーク”ブームもありオブジェクト
指向が意識されるように
なぜフルスタックを重宝した ? (依存性 ? PHP 4/5バージョンの差異への対応 ?)
●
PHP 5.3リリースまで間が空く
2004 2008~
16
さよなら PHP 6
●
5.3 リリース
●
register_globals , safe_mode, magic_quotes_gpc の非
推奨化 (E_DEPRECATED エラー )
●
バイナリセーフではない関数 (ereg, split)の非推奨化
●
GitHub の浸透も相まって ライブラリなど PHP でも開発が活
発に / CIの SaaS 台頭
2009 2012~
17
~~ PHP 5.6そして PHP 7.0, 7.1~
●
5.5 - preg_replace()の /e 修飾子 (eval) が非推奨に
●
5.6 - iconvおよび mbstring の、エンコーディングに関する
オプションが非推奨に
●
PHP 7.0 リリース
●
スカラー型宣言 / 戻り値の型宣言 の導入
●
AST 導入
2013 2017~
18
PHP 7.2~
●
7.2
●
非推奨の追加
– $php_errormsg, create_function(),
mbstring.func_overload など
●
8.0
●
2020 年 ?
●
JIT ?
2017~
https://wiki.php.net/todo/php72#timetable
19
PHP のこれまで
新規機能を取り込みながらも、危ない機能については
廃止しながら進化してきた。
OSS を取り巻く状況の変化により、品質向上の土壌も
進化していった。
20
PHP の 仕組み と 拡張モジュール
21
PHP -リクエストごとのライフサイクル
https://www.slideshare.net/ircmaxell/php-under-the-hood-dpc
22
拡張モジュールでの処理のフック
MINIT/ MSHUTDOWN
http://fntlnz.github.io/php-extensions-development
23
PHP 拡張 の種類
http://php.net/extensions.membership
24
コア拡張
●
ストリーム (4.3 にて登場 )
●
Phar (5.3から組み込み )
●
SPL (5.3から組み込み )
・・・など
今となっては、当然存在するでしょ !
という機能も、過去にはビルド時に外せた
「これらは実際のところ拡張ではありません。 PHP の
コアに組み込まれており、 コンパイルオプションで
無効にすることはできません。」
http://php.net/extensions.membership
25
バンドルされている拡張
●
iconv
●
マルチバイト文字列 (mbstring)
●
intl
・・・など
「これらの拡張は PHP にバンドルされています。」
http://php.net/extensions.membership
26
外部拡張
●
各 DB 向けドライバ (MySQLi など )
●
Gettext
●
DOM
●
cURL
・・・など
「これらの拡張は PHP にバンドルされています
が、コンパイルするには外部ライブラリが
必要となります。」
http://php.net/extensions.membership
27
PECL 拡張
●
V8js
●
SPL_Types /Data Structures
●
phtreads / 各イベント系 (libevent など )
●
mysqlnd_* 系
・・・など
ここまでが、 php.net にてマニュアルが
閲覧できるものです。
「これらの拡張は » PECL にあります。 また、
外部のライブラリを必要とするかもしれません。」
28
その他
●
hnw/php-timecop
●
krakjoe/autostrict
●
runkit7/runkit7 (funkit)
・・・など
野良拡張を導入して、今まで動いてた
スクリプトが動かない!は自己責任
29
PHP の しくみ / 拡張モジュール
PHP 自体でのフック・コード解析する余地がある。
開発者と利用者 ( コンポーネント開発者 ) が想定する
環境はコアとバンドルである。
30
PHP と 文字列
31
「 PHP では、 文字は 1 バイトと同じで
す。つまり、 256 個の異なる文字を使用可
能です。 これは、PHP が Unicode をネ
イティブにサポートしていないことも意味
します。」
http://php.net/language.types.string
32
「 PHP における文字列型は、バイトの配
列と整数値 ( バッファ長 ) で実装されてい
ます。 バイト列を文字列に変換する方法に
ついては何の情報も持っておらず、完全に
プログラマ任せとなっています。」
http://php.net/language.types.string
33
https://www.slideshare.net/nikita_ppv/php-7-what-changed-internally
PHP 5 での zval
34
https://www.slideshare.net/nikita_ppv/php-7-what-changed-internally
PHP 7 での zval
35
ということは?
36
・・というような例もあります。
37
... あなたの PHP で書かれたプログラム
ソースではバイナリ操作って行います?
( バイナリ操作のために文字列関数使ってますか? )
38
PHP と バイナリ操作と・・
●
画像処理 (GD, ImageMagick)
●
ファイル判定 (finfo)
●
password_hash などの パスワードのハッシュ (5.5)
●
random_bytes (PHP 7.0)
39
「けど、けど、文字 ( テキスト ) とバイナリ を分
けないと不便じゃん!」
40
もしかして、 PHP 6 の話 ですか?
https://www.slideshare.net/andreizm/the-good-the-bad-and-the-ugly-what-happened-to-unicode-and-php-6
41
PHP での文字エンコーディングモジュール
●
iconv
●
mbstring
●
intl
42
PHP と 文字列
PHP では低レイヤに関わる機能の多くを提供し
ている。
PHP で 文字エンコーディングに関わる操作を行
うときは、専用のモジュールが必要となる。
43
mbstring.func_overload とは
44
「 PHP アプリケーションの多くは、英語
等のシングルバイトの言語用に設計されて
おり、 日本語を含むマルチバイト文字列を
扱う場合には問題を生じる場合がありま
す。 substr() 等の PHP の文字列関数の
多くは、 マルチバイト文字列に対応してい
ません。」
php.net/mbstring.overload
45
なので (?)
46
「 mbstring では、 対応するマルチバイト文字対
応版の関数で既存の PHP 関数を オーバーロード
する機能をサポートします。関数のオーバーロード
を行うと、例えば substr() を PHP スクリプトで
コールした場合に、 mb_substr() が代わりにコー
ルされるようになります。 これにより、マルチバ
イト文字に対応しないアプリケーションの移植が容
易となります。」
php.net/mbstring.overload
47
なんと ! 夢のような機能!
48
mbsting.func_overload の対象となる関数
49
動作例
mbstring.internal_encoding = UTF-8
mbstring.func_overload = 2
php.ini
sample.php
<?= strlen(" あ "); // 1
50
素敵!抱いて!
51
(;´Д`)
unexpected.php
<?php
$html = '<html>...';
$response->setHeader('Content-Length', strlen($html));
52
mbstring.func_overload はマルチバイトを考慮できてな
いアプリケーションへの解決案だった。
バイナリと文字に違いがない PHP にとっては、影響の
高い機構だった。
mbstring.func_overload とは
53
非推奨と提案するに至った経緯
/ 各開発者の反応
54
2012 年
●
Zend Framework 2の開発がスタート
●
Db などのいくつかのコンポーネントのアーキテクチャ
は書きなおされました。が、あくまでベースは ZF1 。
55
当時の私は、こういう憤りをもってました。
「メジャーバージョンアップに合わせて git に移行し
たけど、 (1. 系からの ) 枝分かれ以降の修正が取り込まれ
てないじゃん。ずこ!」
56
プルリク!マージ ! 貢献 ! 圧倒的成長 !
57
そんなとき
58
Zend Framework の 開発者ML
2012 年 4 月
59
zf1 にて、各コンポーネントごとで PHP 環境の
差分対応のために横展開的な修正があったことから、
ユーティリティコンポーネント (ZendStdlib)
の開発気風が高まり、その一環で
マルチバイト対応の点から、
StringUtils の提案が行われます。
60
当時の対応
・・・ mbstring.func_overload フラグがあったら
分岐の繰り返し
61
メイン開発者の一人 Ben Scholzen の投稿
http://zend-framework-community.634137.n4.nabble.com/Environment-amp-StringUtils-td4559272.html
62
mbstring.func_overload で
ZF を壊すやつは
他の方法でも環境を壊す
(safe_mode をオンにしてるように )
63
かくして、 ZF 2では
mbstring.func_overload を
サポートしない方向へ
2012 年 4 月
64
僕「分かったっす。僕これ mbstring
のメンテナーに伝えるっす」
65
CakePHP や Symfony 、 PEAR の
ライブラリでもフラグによる分岐が
あることを踏まえて、廃止の提案
66
mbstring メンテナー廣川さんの
廃止に向けてのレスポンスあり
67
大垣さんが deprecated の提案を internals に投稿
※ internals とは、 PHP のコア開発についてのメインの ML です。
http://news.php.net/php.internals
68
その時 (2012 年 4 月 ) の反応
> 特になし! <
69
... もちろん この2012 年 4 月の時点で
「 mbstring.func_overload やめた方が
良くない?」
が PHP 利用者に伝わる訳ではなく。。
70
2012 年 5 月
https://github.com/reactphp/react/pull/27
71
ReactPHP での
mbstring.func_overload が
ON のときをサポートしようとする
Pull Request
2012 年 5 月
72
僕「 You 、やめときなよ」
「それでも、動かせるようにしたい」
73
igorw のレスポンス
「 mbstring.func_overload の振る舞いは   
  register_globals や magic quotes への
 汚いハックを思い出させる」
74
~~ そのまま時は流れる ~~
75
bugs.php.net に レポート
2013 年 9 月
76
2013 年 10 月
「ユニコードについてのスライド up しました」、
という PHP 開発者のツイート
https://twitter.com/auroraeosrose/status/388380154713489409
77
`Intl doesn't support function
“overloading”`
78
Nikita が 反応
「 func_overload は ASAP な drop 対象でしょ」
79
僕「その件なんですけど、 bugs にレポート
してまして・・」
Nikita 「 intenals に投稿して」
80
僕「か、かしこま ! 」
81
~~ けど、そのまま時は流れ ~~
PHP 7の開発も佳境に入り
82
Nikita の deprecation の提案
2015 年 3 月
83
2015 年 3 月
84
~~ またまた時は流れ ~~
85
2016 年 2 月
7.1 に向け Deprecation の RFC 提案が出され
http://news.php.net/php.internals/91265
86
2016 年 11 月
RFC は 7.2 向けの Deprecations に
http://news.php.net/php.internals/96993
87
2016 年 11 月
非推奨の一つとして、 mbstring.func_overload が
リストに上がる
https://wiki.php.net/rfc/deprecations_php_7_2
88
賛成多数で可決
2017 年 1 月
https://wiki.php.net/rfc/deprecations_php_7_2
89
ちなみに
90
2016 年 12 月
・・ twig ではしれっと削除されてる
https://github.com/twigphp/Twig/commit/b09faf8
91
非推奨と提案するに至った経緯
/ 各開発者の反応
PHP 利用者 ( 主にライブラリ作成者 ) は、 PHP が標準
で用意しているがために mbstring.func_overload をサ
ポートしようとしていた。
PHP 自体が用意している機能でも見直すことが必要。
92
反省点
93
Zend Framework 2 での ML でのやりとり、および日本人メ
ンテナーへの報告 (2012 年 ) から
internals での投票可決と master への反映まで
5 年の月日が経過していた。
 ※ PHP 7.2 はまだリリースはされていません。
➔なぜ 5 年かけてしまったのか?
➔5 年の歳月のうち取れた行動はなかったのか?
94
●
取れるべきアクションを取らなかった 慢心
●
環境の違い を否定できてなかった後悔
95
●
レポートは一度どこかに投稿すれば終わりという訳で
はない
●
動きがなかったら、再度自分からアクションを起こ
すしかない
➔internals や bugs.php.net への登録は
もっと早めにできたはず
取れるべきアクションを取らなかった 慢心
96
取れるべきアクションを取らなかった 慢心
●
マニュアルに注意書きを載せることも可能だった
●
実は、 php.gr.jp への投稿時に注意書きも載せた方がいい
ですね。という話はあった。
– コミット権がないことに、人任せになっていた。
– マニュアルの警告追記も用意してマージ依頼までもでき
たはず。
●
警告の理由を、皆が納得できるように事細かく書かな
ればという思いこみもあった。という逃げ
97
環境の違い を否定 できてなかった後悔
●
環境の違いを否定する環境づくり
●
ライブラリ導入時のチェックを強化すべきだったのでは
– 例 ) mbstring.func_overloadがオンの時にコンポーネント
をインストールさせない
●
周知・啓蒙が足りなかった ?
98
ところで
99
「あぁ、 mbstring.func_overload が
邪魔する件?」
「前から知ってたよ。」
100
?
101
2004 年 7 月
102
2004 年 7 月
* Do not use gzip encoding if certain
string functions are overloaded by
mbstring extension (bug #1781)
103
実は 13 年ぐらい前から気付いてた。
104
コミュニティ・バグトラッキングの
分断という後悔
105
結局、現状の機能を肯定してしまったがため
に長い間 NO と言えなかった。
盲目的に、
臭いものに蓋をするようにコーディングを
行っていたのはなぜだろう?
106
慢心・環境の違い
107
"mbstring.func_overload" と
同じ事態を避けるには
108
PHP 言語の成長の貢献者としてできること (?)
➔傍観者効果に陥らないようにする
– リーナスの法則?
➔先人の教訓を生かす
– YAGNI, Feature Creep, 結果の局所化
PHP の利用者としてできること
➔ヴァージョン互換性・設定依存と向き合う
109
ヴァージョン互換性・設定依存と向き合う
秘伝のタレをやめる
「あらゆる環境での動作サポート」という欲望を捨てる
➔PHP 環境の前提条件 ( ビルドオプション ・php.ini) を制限する
(PHP のヴァージョンアップに対して )
継続的・横断的に動作することを検証、
マイグレーションの促進・いびつな設定の排除
➔ コード解析、ユニットテスト、互換性の確認
処理のフックでごまかす (?)
110
アプリケーション動作環境の前提条件 を制限する
●
動作時にチェックする ?
●
例 ) コンストラクタで extension のチェック
●
アプリケーション構築時の前提条件を制限する
●
プロビジョニングによる冪等性
●
フレームワークによる環境チェック
( 参考例 )SymfonyEnvironments
●
コンポーネント・インストール時の前提条件を制限する
●
Diagnostics
●
composer だと pre-install-cmd ?
111
PHP でのコード解析 ( 基本 )

デバッガ・プロファイラ・ユニットテスト

Xdebug, phpdbg

静的解析

Reflection

tokenizer

PHPParser

AST (nikic/php-ast)
●
IDE, SaaS (scrutinizerなど ), 他の言語による解析ツール
112
https://github.com/ziadoz/awesome-php#code-analysis
PHP のコード解析ツール
は様々なものが登場しています
113
互換性を確認する

PHP 7 へ非推奨となった箇所の診断

php7cc など

複数の PHP バージョンでの挙動確認

3v4l など

利用しているモジュール・関数の互換性解析
●
PHP CompatInfo
114
まとめ
115
今日の主な話は
●
歴史のある OSS だからこそ、抱える問題に目を背けて
いてはいけないという話
●
PHP での機能非推奨化への過程の一例紹介
●
PHP の進化を支えるための基本の紹介
116
● 例えば文字列をさける
●
PHP 7.2 での deprecation
●
mbstring.func_overload 以外で
●
PHP 7 での文字列最適化
おまけの話
117
●
fig/http-message でのストリームと Content-Length
● 拡張での処理のフック
●
runkit を用いた処理の書き換え
● 名前空間を使った hack < 非推奨 >
●
Var を dump すると、ほら・・ < 非推奨 >
● 口承伝来 bin2hex との組み合わせ < 非推奨 >
例えば文字列をさける
118
※ Wiki.php.net の rfc ページ見ながら話します
PHP 7.2 での deprecation
119
※ 資料『 PHP AST 徹底解説 ( 補遺 ) 』にて、該当箇所の
確認をします
PHP 7 での文字列最適化
120
ご清聴ありがとうございました

Más contenido relacionado

La actualidad más candente

SPAセキュリティ入門~PHP Conference Japan 2021
SPAセキュリティ入門~PHP Conference Japan 2021SPAセキュリティ入門~PHP Conference Japan 2021
SPAセキュリティ入門~PHP Conference Japan 2021Hiroshi Tokumaru
 
JSでファミコンエミュレータを作った時の話
JSでファミコンエミュレータを作った時の話JSでファミコンエミュレータを作った時の話
JSでファミコンエミュレータを作った時の話sairoutine
 
デキるプログラマだけが知っているコードレビュー7つの秘訣
デキるプログラマだけが知っているコードレビュー7つの秘訣デキるプログラマだけが知っているコードレビュー7つの秘訣
デキるプログラマだけが知っているコードレビュー7つの秘訣Masahiro Nishimi
 
導入から 10 年、PHP の trait は滅びるべきなのか その適切な使いどころと弱点、将来について
導入から 10 年、PHP の trait は滅びるべきなのか その適切な使いどころと弱点、将来について導入から 10 年、PHP の trait は滅びるべきなのか その適切な使いどころと弱点、将来について
導入から 10 年、PHP の trait は滅びるべきなのか その適切な使いどころと弱点、将来についてshinjiigarashi
 
PHP と SAPI と ZendEngine3 と
PHP と SAPI と ZendEngine3 とPHP と SAPI と ZendEngine3 と
PHP と SAPI と ZendEngine3 とdo_aki
 
「龍が如くスタジオ」のQAエンジニアリング技術を結集した全自動バグ取りシステム
「龍が如くスタジオ」のQAエンジニアリング技術を結集した全自動バグ取りシステム「龍が如くスタジオ」のQAエンジニアリング技術を結集した全自動バグ取りシステム
「龍が如くスタジオ」のQAエンジニアリング技術を結集した全自動バグ取りシステムSEGADevTech
 
モダン PHP テクニック 12 選 ―PsalmとPHP 8.1で今はこんなこともできる!―
モダン PHP テクニック 12 選 ―PsalmとPHP 8.1で今はこんなこともできる!―モダン PHP テクニック 12 選 ―PsalmとPHP 8.1で今はこんなこともできる!―
モダン PHP テクニック 12 選 ―PsalmとPHP 8.1で今はこんなこともできる!―shinjiigarashi
 
PHP、おまえだったのか。 いつもHTTPメッセージを 運んでくれたのは。
PHP、おまえだったのか。 いつもHTTPメッセージを 運んでくれたのは。PHP、おまえだったのか。 いつもHTTPメッセージを 運んでくれたのは。
PHP、おまえだったのか。 いつもHTTPメッセージを 運んでくれたのは。sasezaki
 
テストコードの DRY と DAMP
テストコードの DRY と DAMPテストコードの DRY と DAMP
テストコードの DRY と DAMPYusuke Kagata
 
HTTPを理解する
HTTPを理解するHTTPを理解する
HTTPを理解するIIJ
 
ドメイン駆動設計のための Spring の上手な使い方
ドメイン駆動設計のための Spring の上手な使い方ドメイン駆動設計のための Spring の上手な使い方
ドメイン駆動設計のための Spring の上手な使い方増田 亨
 
デプロイメントパイプラインって何?
デプロイメントパイプラインって何?デプロイメントパイプラインって何?
デプロイメントパイプラインって何?ke-m kamekoopa
 
Dockerfile を書くためのベストプラクティス解説編
Dockerfile を書くためのベストプラクティス解説編Dockerfile を書くためのベストプラクティス解説編
Dockerfile を書くためのベストプラクティス解説編Masahito Zembutsu
 
マイクロサービスバックエンドAPIのためのRESTとgRPC
マイクロサービスバックエンドAPIのためのRESTとgRPCマイクロサービスバックエンドAPIのためのRESTとgRPC
マイクロサービスバックエンドAPIのためのRESTとgRPCdisc99_
 
Railsエンジニアのためのウェブセキュリティ入門
Railsエンジニアのためのウェブセキュリティ入門Railsエンジニアのためのウェブセキュリティ入門
Railsエンジニアのためのウェブセキュリティ入門Hiroshi Tokumaru
 
Elasticsearchのサジェスト機能を使った話
Elasticsearchのサジェスト機能を使った話Elasticsearchのサジェスト機能を使った話
Elasticsearchのサジェスト機能を使った話ktaro_w
 
Javaプログラマのための頑張らないGo入門
Javaプログラマのための頑張らないGo入門Javaプログラマのための頑張らないGo入門
Javaプログラマのための頑張らないGo入門yy yank
 
CEDEC2021 Android iOS 実機上での自動テストをより楽に有意義にする為に ~端末管理・イメージ転送・動画記録等の周辺情報のノウハウ共有~
CEDEC2021 Android iOS 実機上での自動テストをより楽に有意義にする為に ~端末管理・イメージ転送・動画記録等の周辺情報のノウハウ共有~CEDEC2021 Android iOS 実機上での自動テストをより楽に有意義にする為に ~端末管理・イメージ転送・動画記録等の周辺情報のノウハウ共有~
CEDEC2021 Android iOS 実機上での自動テストをより楽に有意義にする為に ~端末管理・イメージ転送・動画記録等の周辺情報のノウハウ共有~SEGADevTech
 
[164] pinpoint
[164] pinpoint[164] pinpoint
[164] pinpointNAVER D2
 

La actualidad más candente (20)

SPAセキュリティ入門~PHP Conference Japan 2021
SPAセキュリティ入門~PHP Conference Japan 2021SPAセキュリティ入門~PHP Conference Japan 2021
SPAセキュリティ入門~PHP Conference Japan 2021
 
JSでファミコンエミュレータを作った時の話
JSでファミコンエミュレータを作った時の話JSでファミコンエミュレータを作った時の話
JSでファミコンエミュレータを作った時の話
 
デキるプログラマだけが知っているコードレビュー7つの秘訣
デキるプログラマだけが知っているコードレビュー7つの秘訣デキるプログラマだけが知っているコードレビュー7つの秘訣
デキるプログラマだけが知っているコードレビュー7つの秘訣
 
導入から 10 年、PHP の trait は滅びるべきなのか その適切な使いどころと弱点、将来について
導入から 10 年、PHP の trait は滅びるべきなのか その適切な使いどころと弱点、将来について導入から 10 年、PHP の trait は滅びるべきなのか その適切な使いどころと弱点、将来について
導入から 10 年、PHP の trait は滅びるべきなのか その適切な使いどころと弱点、将来について
 
PHP と SAPI と ZendEngine3 と
PHP と SAPI と ZendEngine3 とPHP と SAPI と ZendEngine3 と
PHP と SAPI と ZendEngine3 と
 
「龍が如くスタジオ」のQAエンジニアリング技術を結集した全自動バグ取りシステム
「龍が如くスタジオ」のQAエンジニアリング技術を結集した全自動バグ取りシステム「龍が如くスタジオ」のQAエンジニアリング技術を結集した全自動バグ取りシステム
「龍が如くスタジオ」のQAエンジニアリング技術を結集した全自動バグ取りシステム
 
モダン PHP テクニック 12 選 ―PsalmとPHP 8.1で今はこんなこともできる!―
モダン PHP テクニック 12 選 ―PsalmとPHP 8.1で今はこんなこともできる!―モダン PHP テクニック 12 選 ―PsalmとPHP 8.1で今はこんなこともできる!―
モダン PHP テクニック 12 選 ―PsalmとPHP 8.1で今はこんなこともできる!―
 
PHP、おまえだったのか。 いつもHTTPメッセージを 運んでくれたのは。
PHP、おまえだったのか。 いつもHTTPメッセージを 運んでくれたのは。PHP、おまえだったのか。 いつもHTTPメッセージを 運んでくれたのは。
PHP、おまえだったのか。 いつもHTTPメッセージを 運んでくれたのは。
 
テストコードの DRY と DAMP
テストコードの DRY と DAMPテストコードの DRY と DAMP
テストコードの DRY と DAMP
 
HTTPを理解する
HTTPを理解するHTTPを理解する
HTTPを理解する
 
ドメイン駆動設計のための Spring の上手な使い方
ドメイン駆動設計のための Spring の上手な使い方ドメイン駆動設計のための Spring の上手な使い方
ドメイン駆動設計のための Spring の上手な使い方
 
デプロイメントパイプラインって何?
デプロイメントパイプラインって何?デプロイメントパイプラインって何?
デプロイメントパイプラインって何?
 
Dockerfile を書くためのベストプラクティス解説編
Dockerfile を書くためのベストプラクティス解説編Dockerfile を書くためのベストプラクティス解説編
Dockerfile を書くためのベストプラクティス解説編
 
マイクロサービスバックエンドAPIのためのRESTとgRPC
マイクロサービスバックエンドAPIのためのRESTとgRPCマイクロサービスバックエンドAPIのためのRESTとgRPC
マイクロサービスバックエンドAPIのためのRESTとgRPC
 
Railsエンジニアのためのウェブセキュリティ入門
Railsエンジニアのためのウェブセキュリティ入門Railsエンジニアのためのウェブセキュリティ入門
Railsエンジニアのためのウェブセキュリティ入門
 
Elasticsearchのサジェスト機能を使った話
Elasticsearchのサジェスト機能を使った話Elasticsearchのサジェスト機能を使った話
Elasticsearchのサジェスト機能を使った話
 
入門!Jenkins
入門!Jenkins入門!Jenkins
入門!Jenkins
 
Javaプログラマのための頑張らないGo入門
Javaプログラマのための頑張らないGo入門Javaプログラマのための頑張らないGo入門
Javaプログラマのための頑張らないGo入門
 
CEDEC2021 Android iOS 実機上での自動テストをより楽に有意義にする為に ~端末管理・イメージ転送・動画記録等の周辺情報のノウハウ共有~
CEDEC2021 Android iOS 実機上での自動テストをより楽に有意義にする為に ~端末管理・イメージ転送・動画記録等の周辺情報のノウハウ共有~CEDEC2021 Android iOS 実機上での自動テストをより楽に有意義にする為に ~端末管理・イメージ転送・動画記録等の周辺情報のノウハウ共有~
CEDEC2021 Android iOS 実機上での自動テストをより楽に有意義にする為に ~端末管理・イメージ転送・動画記録等の周辺情報のノウハウ共有~
 
[164] pinpoint
[164] pinpoint[164] pinpoint
[164] pinpoint
 

Destacado

知ってるようで意外と知らないPHPの便利関数
知ってるようで意外と知らないPHPの便利関数知ってるようで意外と知らないPHPの便利関数
知ってるようで意外と知らないPHPの便利関数Wataru Terada
 
『例えば、PHPを避ける』以降PHPはどれだけ安全になったか
『例えば、PHPを避ける』以降PHPはどれだけ安全になったか『例えば、PHPを避ける』以降PHPはどれだけ安全になったか
『例えば、PHPを避ける』以降PHPはどれだけ安全になったかHiroshi Tokumaru
 
みんなそろそろ707やめようぜ (;´Д`)
みんなそろそろ707やめようぜ (;´Д`)みんなそろそろ707やめようぜ (;´Д`)
みんなそろそろ707やめようぜ (;´Д`)Yasutaka Hamada
 
営業・運用を支える "気付ける" 管理画面
営業・運用を支える "気付ける" 管理画面営業・運用を支える "気付ける" 管理画面
営業・運用を支える "気付ける" 管理画面Masao Maeda
 
PHP の GC の話
PHP の GC の話PHP の GC の話
PHP の GC の話y-uti
 
脆弱性もバグ、だからテストしよう PHPカンファンレス2015
脆弱性もバグ、だからテストしよう PHPカンファンレス2015脆弱性もバグ、だからテストしよう PHPカンファンレス2015
脆弱性もバグ、だからテストしよう PHPカンファンレス2015ichikaway
 
いまどきのPHP開発現場 -2015年秋-
いまどきのPHP開発現場 -2015年秋-いまどきのPHP開発現場 -2015年秋-
いまどきのPHP開発現場 -2015年秋-Masashi Shinbara
 
PHPの今とこれから2015
PHPの今とこれから2015PHPの今とこれから2015
PHPの今とこれから2015Rui Hirokawa
 
PHPとシグナル、その裏側
PHPとシグナル、その裏側PHPとシグナル、その裏側
PHPとシグナル、その裏側do_aki
 

Destacado (9)

知ってるようで意外と知らないPHPの便利関数
知ってるようで意外と知らないPHPの便利関数知ってるようで意外と知らないPHPの便利関数
知ってるようで意外と知らないPHPの便利関数
 
『例えば、PHPを避ける』以降PHPはどれだけ安全になったか
『例えば、PHPを避ける』以降PHPはどれだけ安全になったか『例えば、PHPを避ける』以降PHPはどれだけ安全になったか
『例えば、PHPを避ける』以降PHPはどれだけ安全になったか
 
みんなそろそろ707やめようぜ (;´Д`)
みんなそろそろ707やめようぜ (;´Д`)みんなそろそろ707やめようぜ (;´Д`)
みんなそろそろ707やめようぜ (;´Д`)
 
営業・運用を支える "気付ける" 管理画面
営業・運用を支える "気付ける" 管理画面営業・運用を支える "気付ける" 管理画面
営業・運用を支える "気付ける" 管理画面
 
PHP の GC の話
PHP の GC の話PHP の GC の話
PHP の GC の話
 
脆弱性もバグ、だからテストしよう PHPカンファンレス2015
脆弱性もバグ、だからテストしよう PHPカンファンレス2015脆弱性もバグ、だからテストしよう PHPカンファンレス2015
脆弱性もバグ、だからテストしよう PHPカンファンレス2015
 
いまどきのPHP開発現場 -2015年秋-
いまどきのPHP開発現場 -2015年秋-いまどきのPHP開発現場 -2015年秋-
いまどきのPHP開発現場 -2015年秋-
 
PHPの今とこれから2015
PHPの今とこれから2015PHPの今とこれから2015
PHPの今とこれから2015
 
PHPとシグナル、その裏側
PHPとシグナル、その裏側PHPとシグナル、その裏側
PHPとシグナル、その裏側
 

Similar a なぜ、PHPのmbstring.func_overloadをdeprecatedにするのに5年かかったのか? - 慢心、環境の違い

FuelPHP活用事例
FuelPHP活用事例FuelPHP活用事例
FuelPHP活用事例Yusuke Naka
 
RFC: "var" Deprecation
RFC: "var" DeprecationRFC: "var" Deprecation
RFC: "var" Deprecationy-uti
 
PHPの今とこれから2022
PHPの今とこれから2022PHPの今とこれから2022
PHPの今とこれから2022Rui Hirokawa
 
PHPの今とこれから2016
PHPの今とこれから2016PHPの今とこれから2016
PHPの今とこれから2016Rui Hirokawa
 
PHPの今とこれから2020
PHPの今とこれから2020PHPの今とこれから2020
PHPの今とこれから2020Rui Hirokawa
 
FukuokaPHP 3
FukuokaPHP 3FukuokaPHP 3
FukuokaPHP 3ichikaway
 
PHPの今とこれから2018
PHPの今とこれから2018PHPの今とこれから2018
PHPの今とこれから2018Rui Hirokawa
 
フレームワークを使うべき 3 つの理由
フレームワークを使うべき 3 つの理由フレームワークを使うべき 3 つの理由
フレームワークを使うべき 3 つの理由Kenichi Mukai
 
YAPC::Asia 2014 - 半端なPHPDisでPHPerに陰で笑われないためのPerl Monger向け最新PHP事情
YAPC::Asia 2014 - 半端なPHPDisでPHPerに陰で笑われないためのPerl Monger向け最新PHP事情YAPC::Asia 2014 - 半端なPHPDisでPHPerに陰で笑われないためのPerl Monger向け最新PHP事情
YAPC::Asia 2014 - 半端なPHPDisでPHPerに陰で笑われないためのPerl Monger向け最新PHP事情Junichi Ishida
 
PHPで並列処理する ライブラリを作った
PHPで並列処理する ライブラリを作ったPHPで並列処理する ライブラリを作った
PHPで並列処理する ライブラリを作ったHironobu Saitoh
 
PHP で実行中のスクリプトの動作を下から覗き見る
PHP で実行中のスクリプトの動作を下から覗き見るPHP で実行中のスクリプトの動作を下から覗き見る
PHP で実行中のスクリプトの動作を下から覗き見るshinjiigarashi
 
Ruby向け帳票ソリューション「ThinReports」の開発で知るOSSの威力
Ruby向け帳票ソリューション「ThinReports」の開発で知るOSSの威力Ruby向け帳票ソリューション「ThinReports」の開発で知るOSSの威力
Ruby向け帳票ソリューション「ThinReports」の開発で知るOSSの威力ThinReports
 
PHPの今と未来を語る
PHPの今と未来を語るPHPの今と未来を語る
PHPの今と未来を語るRui Hirokawa
 
スクリプト言語PHP攻略法
スクリプト言語PHP攻略法スクリプト言語PHP攻略法
スクリプト言語PHP攻略法Rui Hirokawa
 
8時間耐久 PHP構築の教室
8時間耐久 PHP構築の教室8時間耐久 PHP構築の教室
8時間耐久 PHP構築の教室Yusuke Ando
 
PHPカンファレンス2014の懇親会飛び込みLT資料
PHPカンファレンス2014の懇親会飛び込みLT資料PHPカンファレンス2014の懇親会飛び込みLT資料
PHPカンファレンス2014の懇親会飛び込みLT資料Junichi Ishida
 
PhpStormを使おう --高槻からは快速急行が早くなります #jbugj
PhpStormを使おう --高槻からは快速急行が早くなります #jbugjPhpStormを使おう --高槻からは快速急行が早くなります #jbugj
PhpStormを使おう --高槻からは快速急行が早くなります #jbugjHisateru Tanaka
 
Phpcon tokyo 20120_bigginer
Phpcon tokyo 20120_bigginerPhpcon tokyo 20120_bigginer
Phpcon tokyo 20120_bigginerHideo Kashioka
 

Similar a なぜ、PHPのmbstring.func_overloadをdeprecatedにするのに5年かかったのか? - 慢心、環境の違い (20)

FuelPHP活用事例
FuelPHP活用事例FuelPHP活用事例
FuelPHP活用事例
 
RFC: "var" Deprecation
RFC: "var" DeprecationRFC: "var" Deprecation
RFC: "var" Deprecation
 
PHPの今とこれから2022
PHPの今とこれから2022PHPの今とこれから2022
PHPの今とこれから2022
 
PHPの今とこれから2016
PHPの今とこれから2016PHPの今とこれから2016
PHPの今とこれから2016
 
PHPの今とこれから2020
PHPの今とこれから2020PHPの今とこれから2020
PHPの今とこれから2020
 
FukuokaPHP 3
FukuokaPHP 3FukuokaPHP 3
FukuokaPHP 3
 
PHPの今とこれから2018
PHPの今とこれから2018PHPの今とこれから2018
PHPの今とこれから2018
 
フレームワークを使うべき 3 つの理由
フレームワークを使うべき 3 つの理由フレームワークを使うべき 3 つの理由
フレームワークを使うべき 3 つの理由
 
YAPC::Asia 2014 - 半端なPHPDisでPHPerに陰で笑われないためのPerl Monger向け最新PHP事情
YAPC::Asia 2014 - 半端なPHPDisでPHPerに陰で笑われないためのPerl Monger向け最新PHP事情YAPC::Asia 2014 - 半端なPHPDisでPHPerに陰で笑われないためのPerl Monger向け最新PHP事情
YAPC::Asia 2014 - 半端なPHPDisでPHPerに陰で笑われないためのPerl Monger向け最新PHP事情
 
PHPで並列処理する ライブラリを作った
PHPで並列処理する ライブラリを作ったPHPで並列処理する ライブラリを作った
PHPで並列処理する ライブラリを作った
 
PHP で実行中のスクリプトの動作を下から覗き見る
PHP で実行中のスクリプトの動作を下から覗き見るPHP で実行中のスクリプトの動作を下から覗き見る
PHP で実行中のスクリプトの動作を下から覗き見る
 
Ruby向け帳票ソリューション「ThinReports」の開発で知るOSSの威力
Ruby向け帳票ソリューション「ThinReports」の開発で知るOSSの威力Ruby向け帳票ソリューション「ThinReports」の開発で知るOSSの威力
Ruby向け帳票ソリューション「ThinReports」の開発で知るOSSの威力
 
PHPの今と未来を語る
PHPの今と未来を語るPHPの今と未来を語る
PHPの今と未来を語る
 
スクリプト言語PHP攻略法
スクリプト言語PHP攻略法スクリプト言語PHP攻略法
スクリプト言語PHP攻略法
 
phpext-2-takagi
phpext-2-takagiphpext-2-takagi
phpext-2-takagi
 
8時間耐久 PHP構築の教室
8時間耐久 PHP構築の教室8時間耐久 PHP構築の教室
8時間耐久 PHP構築の教室
 
Laravel5.1 Release
Laravel5.1 ReleaseLaravel5.1 Release
Laravel5.1 Release
 
PHPカンファレンス2014の懇親会飛び込みLT資料
PHPカンファレンス2014の懇親会飛び込みLT資料PHPカンファレンス2014の懇親会飛び込みLT資料
PHPカンファレンス2014の懇親会飛び込みLT資料
 
PhpStormを使おう --高槻からは快速急行が早くなります #jbugj
PhpStormを使おう --高槻からは快速急行が早くなります #jbugjPhpStormを使おう --高槻からは快速急行が早くなります #jbugj
PhpStormを使おう --高槻からは快速急行が早くなります #jbugj
 
Phpcon tokyo 20120_bigginer
Phpcon tokyo 20120_bigginerPhpcon tokyo 20120_bigginer
Phpcon tokyo 20120_bigginer
 

Más de sasezaki

このPHP拡張がすごい!2017
このPHP拡張がすごい!2017このPHP拡張がすごい!2017
このPHP拡張がすごい!2017sasezaki
 
HTTPメッセージ、PHPの 事情ば分かっとっと?
HTTPメッセージ、PHPの 事情ば分かっとっと?HTTPメッセージ、PHPの 事情ば分かっとっと?
HTTPメッセージ、PHPの 事情ば分かっとっと?sasezaki
 
phpcon2013_zf
phpcon2013_zfphpcon2013_zf
phpcon2013_zfsasezaki
 
Awesome PHP extensions! Top 50!
Awesome PHP extensions! Top 50!Awesome PHP extensions! Top 50!
Awesome PHP extensions! Top 50!sasezaki
 
PHP 触れてはいけないほうの闇の話
PHP 触れてはいけないほうの闇の話PHP 触れてはいけないほうの闇の話
PHP 触れてはいけないほうの闇の話sasezaki
 
これからのPHPライブラリとパッケージマネージメントの話をしよう
これからのPHPライブラリとパッケージマネージメントの話をしようこれからのPHPライブラリとパッケージマネージメントの話をしよう
これからのPHPライブラリとパッケージマネージメントの話をしようsasezaki
 
PHP Conference Japan 2010 : Zend Framewrok
PHP Conference Japan 2010 : Zend FramewrokPHP Conference Japan 2010 : Zend Framewrok
PHP Conference Japan 2010 : Zend Framewroksasezaki
 
"More" Introduction to Zend Tool
"More" Introduction to Zend Tool"More" Introduction to Zend Tool
"More" Introduction to Zend Toolsasezaki
 
PHP & Queue
PHP & QueuePHP & Queue
PHP & Queuesasezaki
 
Phpstudy44 Zend Frameworkが抱えている問題は多い。
Phpstudy44 Zend Frameworkが抱えている問題は多い。Phpstudy44 Zend Frameworkが抱えている問題は多い。
Phpstudy44 Zend Frameworkが抱えている問題は多い。sasezaki
 

Más de sasezaki (10)

このPHP拡張がすごい!2017
このPHP拡張がすごい!2017このPHP拡張がすごい!2017
このPHP拡張がすごい!2017
 
HTTPメッセージ、PHPの 事情ば分かっとっと?
HTTPメッセージ、PHPの 事情ば分かっとっと?HTTPメッセージ、PHPの 事情ば分かっとっと?
HTTPメッセージ、PHPの 事情ば分かっとっと?
 
phpcon2013_zf
phpcon2013_zfphpcon2013_zf
phpcon2013_zf
 
Awesome PHP extensions! Top 50!
Awesome PHP extensions! Top 50!Awesome PHP extensions! Top 50!
Awesome PHP extensions! Top 50!
 
PHP 触れてはいけないほうの闇の話
PHP 触れてはいけないほうの闇の話PHP 触れてはいけないほうの闇の話
PHP 触れてはいけないほうの闇の話
 
これからのPHPライブラリとパッケージマネージメントの話をしよう
これからのPHPライブラリとパッケージマネージメントの話をしようこれからのPHPライブラリとパッケージマネージメントの話をしよう
これからのPHPライブラリとパッケージマネージメントの話をしよう
 
PHP Conference Japan 2010 : Zend Framewrok
PHP Conference Japan 2010 : Zend FramewrokPHP Conference Japan 2010 : Zend Framewrok
PHP Conference Japan 2010 : Zend Framewrok
 
"More" Introduction to Zend Tool
"More" Introduction to Zend Tool"More" Introduction to Zend Tool
"More" Introduction to Zend Tool
 
PHP & Queue
PHP & QueuePHP & Queue
PHP & Queue
 
Phpstudy44 Zend Frameworkが抱えている問題は多い。
Phpstudy44 Zend Frameworkが抱えている問題は多い。Phpstudy44 Zend Frameworkが抱えている問題は多い。
Phpstudy44 Zend Frameworkが抱えている問題は多い。
 

なぜ、PHPのmbstring.func_overloadをdeprecatedにするのに5年かかったのか? - 慢心、環境の違い