SlideShare une entreprise Scribd logo
1  sur  120
Télécharger pour lire hors ligne
なぜ、 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
ご清聴ありがとうございました

Contenu connexe

Tendances

PHP-FPM の子プロセス制御方法と設定をおさらいしよう
PHP-FPM の子プロセス制御方法と設定をおさらいしようPHP-FPM の子プロセス制御方法と設定をおさらいしよう
PHP-FPM の子プロセス制御方法と設定をおさらいしようShohei Okada
 
Kubernetes meetup-tokyo-13-customizing-kubernetes-for-ml-cluster
Kubernetes meetup-tokyo-13-customizing-kubernetes-for-ml-clusterKubernetes meetup-tokyo-13-customizing-kubernetes-for-ml-cluster
Kubernetes meetup-tokyo-13-customizing-kubernetes-for-ml-clusterPreferred Networks
 
Docker composeで開発環境をメンバに配布せよ
Docker composeで開発環境をメンバに配布せよDocker composeで開発環境をメンバに配布せよ
Docker composeで開発環境をメンバに配布せよYusuke Kon
 
PHP7の内部実装から学ぶ性能改善テクニック
PHP7の内部実装から学ぶ性能改善テクニックPHP7の内部実装から学ぶ性能改善テクニック
PHP7の内部実装から学ぶ性能改善テクニックYoshio Hanawa
 
UEFIで始めるLinux From Scratch
UEFIで始めるLinux From ScratchUEFIで始めるLinux From Scratch
UEFIで始めるLinux From ScratchYuma Ohgami
 
Azure SecOps! Azure Key Vaultを用いたクラウドのキー管理
Azure SecOps! Azure Key Vaultを用いたクラウドのキー管理Azure SecOps! Azure Key Vaultを用いたクラウドのキー管理
Azure SecOps! Azure Key Vaultを用いたクラウドのキー管理Yuki Hattori
 
モダン 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
 
JavaScriptの仕組みと未来のJavaScript ~ESNextとは~
JavaScriptの仕組みと未来のJavaScript ~ESNextとは~JavaScriptの仕組みと未来のJavaScript ~ESNextとは~
JavaScriptの仕組みと未来のJavaScript ~ESNextとは~Yuki Hirano
 
10GbE時代のネットワークI/O高速化
10GbE時代のネットワークI/O高速化10GbE時代のネットワークI/O高速化
10GbE時代のネットワークI/O高速化Takuya ASADA
 
ログ+メトリック+トレースの組み合わせで構築する一元的なオブザーバビリティ
ログ+メトリック+トレースの組み合わせで構築する一元的なオブザーバビリティログ+メトリック+トレースの組み合わせで構築する一元的なオブザーバビリティ
ログ+メトリック+トレースの組み合わせで構築する一元的なオブザーバビリティElasticsearch
 
WebRTC SFU mediasoup sample
WebRTC SFU mediasoup sampleWebRTC SFU mediasoup sample
WebRTC SFU mediasoup samplemganeko
 
hpingで作るパケット
hpingで作るパケットhpingで作るパケット
hpingで作るパケットTakaaki Hoyo
 
世界最大級のアジャイルカンファレンス報告:Agile2016参加レポート
世界最大級のアジャイルカンファレンス報告:Agile2016参加レポート世界最大級のアジャイルカンファレンス報告:Agile2016参加レポート
世界最大級のアジャイルカンファレンス報告:Agile2016参加レポートHiroyuki Ito
 
[140315 박민근] 젠킨스를 이용한 자동빌드 시스템 구축하기(ci)
[140315 박민근] 젠킨스를 이용한 자동빌드 시스템 구축하기(ci)[140315 박민근] 젠킨스를 이용한 자동빌드 시스템 구축하기(ci)
[140315 박민근] 젠킨스를 이용한 자동빌드 시스템 구축하기(ci)MinGeun Park
 
導入から 10 年、PHP の trait は滅びるべきなのか その適切な使いどころと弱点、将来について
導入から 10 年、PHP の trait は滅びるべきなのか その適切な使いどころと弱点、将来について導入から 10 年、PHP の trait は滅びるべきなのか その適切な使いどころと弱点、将来について
導入から 10 年、PHP の trait は滅びるべきなのか その適切な使いどころと弱点、将来についてshinjiigarashi
 
分散環境におけるDocker とオーケストレーション
分散環境におけるDocker とオーケストレーション分散環境におけるDocker とオーケストレーション
分散環境におけるDocker とオーケストレーションMasahito Zembutsu
 
Protocol Buffers 入門
Protocol Buffers 入門Protocol Buffers 入門
Protocol Buffers 入門Yuichi Ito
 
Rootlessコンテナ
RootlessコンテナRootlessコンテナ
RootlessコンテナAkihiro Suda
 
Kubernetes環境で実現するWebアプリケーションセキュリティ
Kubernetes環境で実現するWebアプリケーションセキュリティKubernetes環境で実現するWebアプリケーションセキュリティ
Kubernetes環境で実現するWebアプリケーションセキュリティNGINX, Inc.
 
「私のkintone 連携には何が最適?」CData Software ソリューションを使うケースは?
「私のkintone 連携には何が最適?」CData Software ソリューションを使うケースは?「私のkintone 連携には何が最適?」CData Software ソリューションを使うケースは?
「私のkintone 連携には何が最適?」CData Software ソリューションを使うケースは?CData Software Japan
 

Tendances (20)

PHP-FPM の子プロセス制御方法と設定をおさらいしよう
PHP-FPM の子プロセス制御方法と設定をおさらいしようPHP-FPM の子プロセス制御方法と設定をおさらいしよう
PHP-FPM の子プロセス制御方法と設定をおさらいしよう
 
Kubernetes meetup-tokyo-13-customizing-kubernetes-for-ml-cluster
Kubernetes meetup-tokyo-13-customizing-kubernetes-for-ml-clusterKubernetes meetup-tokyo-13-customizing-kubernetes-for-ml-cluster
Kubernetes meetup-tokyo-13-customizing-kubernetes-for-ml-cluster
 
Docker composeで開発環境をメンバに配布せよ
Docker composeで開発環境をメンバに配布せよDocker composeで開発環境をメンバに配布せよ
Docker composeで開発環境をメンバに配布せよ
 
PHP7の内部実装から学ぶ性能改善テクニック
PHP7の内部実装から学ぶ性能改善テクニックPHP7の内部実装から学ぶ性能改善テクニック
PHP7の内部実装から学ぶ性能改善テクニック
 
UEFIで始めるLinux From Scratch
UEFIで始めるLinux From ScratchUEFIで始めるLinux From Scratch
UEFIで始めるLinux From Scratch
 
Azure SecOps! Azure Key Vaultを用いたクラウドのキー管理
Azure SecOps! Azure Key Vaultを用いたクラウドのキー管理Azure SecOps! Azure Key Vaultを用いたクラウドのキー管理
Azure SecOps! Azure Key Vaultを用いたクラウドのキー管理
 
モダン PHP テクニック 12 選 ―PsalmとPHP 8.1で今はこんなこともできる!―
モダン PHP テクニック 12 選 ―PsalmとPHP 8.1で今はこんなこともできる!―モダン PHP テクニック 12 選 ―PsalmとPHP 8.1で今はこんなこともできる!―
モダン PHP テクニック 12 選 ―PsalmとPHP 8.1で今はこんなこともできる!―
 
JavaScriptの仕組みと未来のJavaScript ~ESNextとは~
JavaScriptの仕組みと未来のJavaScript ~ESNextとは~JavaScriptの仕組みと未来のJavaScript ~ESNextとは~
JavaScriptの仕組みと未来のJavaScript ~ESNextとは~
 
10GbE時代のネットワークI/O高速化
10GbE時代のネットワークI/O高速化10GbE時代のネットワークI/O高速化
10GbE時代のネットワークI/O高速化
 
ログ+メトリック+トレースの組み合わせで構築する一元的なオブザーバビリティ
ログ+メトリック+トレースの組み合わせで構築する一元的なオブザーバビリティログ+メトリック+トレースの組み合わせで構築する一元的なオブザーバビリティ
ログ+メトリック+トレースの組み合わせで構築する一元的なオブザーバビリティ
 
WebRTC SFU mediasoup sample
WebRTC SFU mediasoup sampleWebRTC SFU mediasoup sample
WebRTC SFU mediasoup sample
 
hpingで作るパケット
hpingで作るパケットhpingで作るパケット
hpingで作るパケット
 
世界最大級のアジャイルカンファレンス報告:Agile2016参加レポート
世界最大級のアジャイルカンファレンス報告:Agile2016参加レポート世界最大級のアジャイルカンファレンス報告:Agile2016参加レポート
世界最大級のアジャイルカンファレンス報告:Agile2016参加レポート
 
[140315 박민근] 젠킨스를 이용한 자동빌드 시스템 구축하기(ci)
[140315 박민근] 젠킨스를 이용한 자동빌드 시스템 구축하기(ci)[140315 박민근] 젠킨스를 이용한 자동빌드 시스템 구축하기(ci)
[140315 박민근] 젠킨스를 이용한 자동빌드 시스템 구축하기(ci)
 
導入から 10 年、PHP の trait は滅びるべきなのか その適切な使いどころと弱点、将来について
導入から 10 年、PHP の trait は滅びるべきなのか その適切な使いどころと弱点、将来について導入から 10 年、PHP の trait は滅びるべきなのか その適切な使いどころと弱点、将来について
導入から 10 年、PHP の trait は滅びるべきなのか その適切な使いどころと弱点、将来について
 
分散環境におけるDocker とオーケストレーション
分散環境におけるDocker とオーケストレーション分散環境におけるDocker とオーケストレーション
分散環境におけるDocker とオーケストレーション
 
Protocol Buffers 入門
Protocol Buffers 入門Protocol Buffers 入門
Protocol Buffers 入門
 
Rootlessコンテナ
RootlessコンテナRootlessコンテナ
Rootlessコンテナ
 
Kubernetes環境で実現するWebアプリケーションセキュリティ
Kubernetes環境で実現するWebアプリケーションセキュリティKubernetes環境で実現するWebアプリケーションセキュリティ
Kubernetes環境で実現するWebアプリケーションセキュリティ
 
「私のkintone 連携には何が最適?」CData Software ソリューションを使うケースは?
「私のkintone 連携には何が最適?」CData Software ソリューションを使うケースは?「私のkintone 連携には何が最適?」CData Software ソリューションを使うケースは?
「私のkintone 連携には何が最適?」CData Software ソリューションを使うケースは?
 

En vedette

知ってるようで意外と知らない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
 

En vedette (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とシグナル、その裏側
 

Similaire à なぜ、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
 

Similaire à なぜ、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
 

Plus 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
 

Plus 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年かかったのか? - 慢心、環境の違い