SlideShare uma empresa Scribd logo
1 de 25
Baixar para ler offline
PHPの今とこれから2018
PHP Conference Tokyo 2018
December 15, 2018
廣川 類 (日本PHPユーザ会)
1
自己紹介:ひろかわ
 PHPのホビーユーザ(1996~)
 PHPマニュアルの日本語化
 マルチバイト化:mbstringエクステンション
 PHPカンファレンス皆勤中!
 PHP関連書籍:
 PHP徹底攻略
 初めてのPHP(監訳)
2
PHPとは?
 PHPは主にWebアプリケーションに使用されるスクリプト言語
 1995年の誕生以来、Webと共に成長、進化
 現場の課題を簡単に解決してくれる便利なツールです
78.9%
11.9%
3.9%
2.3%
2.1%
サーバサイドプログラミング言語
PHP
ASP.NET
Java
Ruby
static files
引用: W3Techs.com, 2018/12/11
59.6%
5.5%
3.5%
2.6% 2.6%
CMSシェア
WordPress
Joomla
Drupal
Squarespace
Shopify
3
PHPの開発体制
Rasmus Lerdorf Andi Gutmans
Zeev Suraski
Marcus Boerger
開発アカウント:約1939名(15名)‫‏‬
コア:約150名(5名)
PHP Group:10名
・名前空間
・クロージャ
PHPの歩み
5.3
`09/6
7.0
5.4
・Traits
・高速化
・MB標準化
`12/3
5.5
・ジェネレータ
・キャッシュ
`13/6
5.6
・デバッガ
`14/8
5
`15/12
・大幅高速化
PHP 5.0 ‘04/7
7.1
`16/12
・Nullable
・複数例外キャッチ
`17/11
7.2
・高速化
7.3
`18/12/6
2004 PHP 5.0 オブジェクト機能強化
2009 PHP 5.3 普通のプログラミング言語に
2015 PHP 7.0 大幅高速化
PHP アンケート 2018
 PHPでよく使うバージョンは?
1) 使ったことがない
2) PHP 5.x
3) PHP 7.x
6
<?php
echo “Hello!”;
?>
PHPバージョン分布
引用: W3Techs.com, 2018/12/1
5.3%
7.4%
10.9%
32.1%
10.6%
15.1%
12.8%
7.2
7.1
7.0
5.6
5.5
5.4
5.3(14.6%)
(19.5%)
(28.5%)
 PHP7ユーザ: 23.6% (昨年: 8.2%)
 EOLとなるPHP 5のユーザ: 75.8%
 WordPressの推奨環境:PHP 7.2, MySQL 5.6, HTTPS
7
(20.2%)
* https://wordpress.org/about/requirements/
PHPリリースサイクル
8
2015 2016 2017 2018 2019 2020 2021
5.6
7.0
7.1
7.2
アクティブサポート セキュリティ修正のみ
2018/12/15
 PHPのライフサイクル:3年(バグ修正:2年、セキュリティ修正のみ:1年)
 EOL以降はセキュリティ関連の修正も提供されず、非常に危険です
 2018年末、PHP5のEOLがついにやってきます
EOL 2018/12/31
https://wiki.php.net/rfc/releaseprocess
http://php.net/supported-versions.php
EOL 2018/12/3
EOL 2019/12/1
EOL 2020/11/30
PHPリリース情報
Release 5.6 7.0 7.1 7.2 変更
2017/11/23 7.0.26 7.1.12
2017/11/30 7.2.0 PHP 7.2.0
2018/1/4 5.6.33 7.0.27 7.1.13 7.2.1 CVE-2018-5711-5712 (gd,phar),14884 (http)
2018/2/1 7.1.14 7.2.2
2018/3/1 5.6.34 7.0.28 7.1.15 7.2.3 CVE-2018-7584 (buffer overflow)
2018/3/29 5.6.35 7.0.29 7.1.16 7.2.4 CVE-2018-10545(opcache)
2018/4/26 5.6.36 7.0.30 7.1.17 7.2.5 CVE-2018-10546-10549(ldap,icon,phar,heap/exif)
2018/5/24 7.1.18 7.2.6
2018/6/21 7.1.19 7.2.7
2018/7/19 5.6.37 7.0.31 7.1.20 7.2.8 CVE-2018-14883,14851 (heap/exif)
2018/8/16 7.1.21 7.2.9
2018/9/13 5.6.38 7.0.32 7.1.22 7.2.10 CVE-2018-17082 (Apache2/XSS)
2018/10/11 7.1.23 7.2.11
2018/11/8 7.1.24 7.2.12
2018/12/6 5.6.39 7.0.33 7.1.25 7.2.13 PHP 5.6/PHP 7.0 EOL, PHP 7.3.0 Release
9
 大きなセキュリティ上の問題は発生せず。ただし、更新推奨
PHP7: より速く、快適に
http://talks.php.net/etsy18 by Rasmus Leodorf
10
 実用アプリケーション(Wordpress)の例
 実行速度、メモリ消費共に大きく改善
PHP7: より速く、快適に
Athlon II X4 640 3.0GHz, Ubuntu
11
 PHP 7.3は若干の改善
Zend/bench.php
0
0.5
1
1.5
2
2.5
3
3.5
4
PHP 5.6 PHP 7.0 PHP 7.1 PHP 7.2 PHP 7.3
実行時間[s]
strcat(200000)
sieve(30)
nestedloop(12)
matrix(20)
heapsort(20000)
hash2(500)
hash1(50000)
fibo(30)
ary3(2000)
ary2(50000)
ary(50000)
ackermann(7)
mandel2
mandel
simpleudcall
simpleucall
simplecall
simple
0
2
4
6
8
10
12
14
16
PHP 5.6 PHP 7.0 PHP 7.1 PHP 7.2 PHP 7.3
実行時間[s]
$x = $f ? $f : tmp
$x = $f ? $f : $a
$x = $f ?: tmp
$x = $a ?: null
$x = $str[0]
$x = $hash['v']
$x = $GLOBALS['v']
$x = $_GET
$x = TEST
new Foo()
$x = Foo::TEST
$this->f()
empty($this->x)
isset($this->x)
$this->x--
$this->x++
--$this->x
++$this->x
$this->x += 2
$this->x = 0
$x = $this->x
Foo::f()
self::f()
empty(Foo::$x)
isset(Foo::$x)
Foo::$x = 0
$x = Foo::$x
empty(self::$x)
isset(self::$x)
self::$x = 0
$x = self::$x
int_func()
undef_func()
func()
empty_loop
Zend/microbench.php
PHP 7.3 改善/変更のポイント
12
if (TRUE) {
print <<EOS
Hello
EOS;
}
 doc文字列の終端マーカ:インデントできるようになった、改行が不要に
 終端マーカの位置でインデント(スペース挿入)を制御できる
 注意:インデントを文字列よりも右に配置すると構文エラー(*)となる
 注意:タブと空白の混用は禁止
 heredoc/nowdoc構文が柔軟に
RFC: https://wiki.php.net/rfc/flexible_heredoc_nowdoc_syntaxes
if (TRUE) {
print <<EOS
Hello
EOS;
}
Hello
Hello
if (TRUE) {
print <<EOS
Hello
EOS;
}
Hello
* Parse error: Invalid indentation - tabs and spaces cannot be mixed
PHP 7.3 改善/変更のポイント
13
$s = "sTraße";
echo mb_strtoupper($s);
 Mbstring: 完全な大文字・小文字変換のサポート
(文字数変化に対応、引用符・アポストロフィの扱い改善、変換速度改善)
echo mb_convert_case($s,MB_CASE_UPPER); // STRASSE
echo mb_convert_case($s,MB_CASE_UPPER_SIMPLE); // STRAßE
echo mb_convert_case($s,MB_CASE_FOLD); // strasse
echo mb_convert_case($s,MB_CASE_FOLD_SIMPLE); // straße
STRASSE
STRAßE PHP 7.2
PHP 7.3
echo mb_convert_case("'be'",MB_CASE_TITLE);
'Be'
'be' PHP 7.2
PHP 7.3
PHP 7.3 改善/変更のポイント
14
mb_ereg('(?<word>¥w+)', '国', $m);
 Mbstring: mb_ereg_*() で名前付きキャプチャをサポート
mb_ereg_replace('¥s*(?<word>¥w+)¥s*', "_¥k<word>_¥k'word'_", ' foo ');
mb_ereg_replace() で置換文字列で名前付きキャプチャを使うための
¥k<> および ¥k‘’ 表記をサポート:
$m[0] = "国"
$m[1] = "国"
$m["word"] = "国"
_foo_foo_
PHP 7.3 改善/変更のポイント
15
 session.cookie_samesite:
CookieにSameSiteディレクティブ (“Lax” または “Strict”)を追加
RFC: https://wiki.php.net/rfc/same-site-cookie
 RFC 6265 (Cookie)の拡張提案: SameSite属性
CookieにSameSite属性を付与することで、クロスサイトへのリクエスト時に
Cookieヘッダを付与しなくなる (Chrome等ほぼ全てのブラウザでサポート)
CSRF攻撃対策
 setcookie(), setrawcookie(),session_set_cookie_params()に
samesiteオプション追加
Set-Cookie: sess=abc123; path=/; SameSite=Lax
setcookie(‘foo’,’boo’,3600,[‘path’=>’/’,…
’samesite’=>’Strict’]);
PHP 7.3 改善/変更のポイント
16
$foo = [1,2,3];
if (is_array($foo) || $foo instanceof Countable) {
echo "countable";
}
 関数追加: is_countable()
RFC: https://wiki.php.net/rfc/is-countable
$foo = [1,2,3];
if (is_countable($foo)) {
echo "countable";
}
$a = ['abc'=>‘A', 'def'=>‘B', 'ghi'=>‘C'];
echo array_key_first($a);
echo array_key_last($a);
 関数追加: array_key_first()/array_key_last()
abc
ghi
PHP 7.3 改善/変更のポイント
17
$m = [1,2,3];
$a = $m[0];
$b =& $m[1];
$c =& $m[2];
 listにおけるリファレンス代入
RFC: https://wiki.php.net/rfc/list_reference_assignment
$m = [1,2,3];
list($a, &$b, &$c) = $m;
$c = [1,2,3];
[$a, &$b, &$c] = $m;
または
PHP7.2まで PHP7.3
• 複数のリファレンス代入を一度に行うことができる
• 複数の代入の中で、リファレンス代入を任意に指定できる
PHP 7.3 改善/変更のポイント
18
<?php
$a = [1,2];
$b = [3,4];
$c = array_merge($a,
$b,
[5,6],
);
 関数コール引数の末尾にカンマが使用可能に
RFC: https://wiki.php.net/rfc/trailing-comma-function-calls
PHP 7.3 改善/変更のポイント
19
 PCREがPCRE2に更新
 php-fpmでgetallheaders()が利用可能に
 preg_quote()が’#’もエスケープするようになった
 ftp転送モードのデフォルトがbinaryに
 高分解能タイマー関数追加(ナノ秒):hrtime()
 JsonException追加
 廃止
 大文字・小文字に依存しない定数:
define() の第三引数にtrueを指定するとdeprecaion警告を発生
(RFC: https://wiki.php.net/rfc/case_insensitive_constant_deprecation)
mbereg_*() 廃止 -> mb_ereg_*()
HHVM/Hackの進化
20
Facebookが開発/公開するPHP/Hack実行環境
HHVMのPHPサポート終了を宣言(2018/9/12)
 v3.30 (2018/12/17) がPHPをサポートする最終版
 v4.0.0 (2019/1/28) 以降ではPHP非互換
 2019/11/19: v3.30のサポート終了
Hackの未来
 2~3年は、ユーザ数増を目指さず、Hack言語の改善に務める
 4週間毎のリリースを行い、LTS版の使用は非推奨
https://hhvm.com/blog/2018/09/12/end-of-php-support-future-of-hack.html
PHPのこれから
 PHP 7.4開発が開始される。
 プリロード
 Typed Properties 2.0
21
https://wiki.php.net/rfc/typed_properties_v2
https://wiki.php.net/rfc/preload
class User {
public int $id;
public string $name;
public function __construct(int $id, string $name) {
$this->id = $id; $this->name = $name;
}
}
 opcache.preload で指定されたPHPスクリプトがサーバ起動時に実行される
 応答速度50%改善 (ZF2Test)
PHPの成功と未来
学習が容易: 言語がシンプル、ドキュメントが豊富
- 多様な要求に応えつつ、わかり易さを保つことが必要
- 地道な活動が重要: ローカルなPHPカンファレンス、勉強会、等
進化を継続: Webの進化に対応し、必要十分な解を提供
- 開発者/貢献者の育成
- キラーアプリ(WordPressなど)の存在がキー
PHPは歯ブラシのようなもの。いつも使う役に立つシンプルな
ツールだけど、誰も歯ブラシのことなんて気にしないよね。
PHPは「問題を解くためのシンプルなツール」なのさ。
(http://en.wikiquote.org/wiki/Rasmus_Lerdorf)
Rasmus語録
PHPユーザ相互の情報交換および
コミュニティの健全な発展
設立趣旨
• 高性能Webミドルウエアへのニーズ増大
• オープンソースソフトウエアの発展
背景
国内PHPユーザの増加
活動内容
ドキュメント整備
セミナー/イベント
メンバー/スタッフ
国際化
Web/SNS
・PHPユーザ会員と思ったらメンバー
・運営するのも楽しいかも
日本PHPユーザ会
(2000年4月発足)
PHPカンファレンス
23
PHP勉強会
福岡(6/16),関西(7/14),東京(12/15)
24
PHP Conference 2018 の見どころ
1F大展示 2F小展示 4F梅 4F鶯 1F A+B 3F特別 6F D会
大規模PHPプロジェク
トでPHPUnitを3世代
アップグレードするため
にやったこと
PHPとブロックチェーン
を使ったWebアプリ開
発
LarabelでTDDを体
験しよう
独立したコアレイヤ
パターンによるPHP
アプリケーションの
実装
PHP初心者セッショ
ン
マイグレーションアン
チパターン
Cygamesにおける長
期運用タイトルのこれ
までとこれから
2018年のPHP環境を
考えてみた
継続的なバージョン
アップのためのテスト
戦略
PHP,Go,Elasticsear
chによる@cosmeを5
倍早くする取り組み
VOYAGEのエンジ
ニア評価制度ってど
んな感じなのか25
分でミニ再演
セキュア・アプリケー
ションのためのHTTP
設定
ランサーズの
CakePHP 1.3→2.8
移行
モノリシックなアプリ
ケーションにおけるフロ
ントエンド部品の共通
化
PHPは本当に遅いの
か
アーキテクチャ設計と
UX設計は同じなのか
PHPを選ぶ理由 ドキュメントルート配
下に全てのPHPファ
イルが置かれていた
環境をindex.php 1
個だけにした話
PHPでのgRPCクラ
イアント作成とユース
ケース
ユニットテストが入れら
れないレガシーなソー
スでCIが回せるように
なった
安全なWebアプリ
ケーションの作り方
2018
php-fpmをもっと理
解しよう
Larabelxレイヤード
アーキテクチャを実践
して得られた知見と反
省
PHP-FIGのHTTP
処理標準の設計は
なぜPSR-7/15/17
になったのか
Phalcon
Essentials
苦手!!フレームワーク
を克服するには
PHPを検査するPHP
を書く
PHPバージョンアップと
決済テストを支えたユ
ニットテスト
案外よくできている
MySQLというアプリ
ケーション
Domain Driven
Design
レビューで初心者イ
ンターンを一人前に
育てた話
技術者が企画力を
上げたら鬼に金棒
エンジニアだけで完全
内作化のOAチームを
立ち上げた話
Webサービスを育てる
ための組織作りと文化
作り
エンジニア経験5ヶ月
の新人がDDDやTDD、
コンポーネントを駆使
してクソコードを改革し
てきた話
PHPとApache
Sparkで始めるデータ
解析処理
php-srcと遊ぶよ!
LT
11:00
12:00
13:00
13:35
14:10
14:45
15:20
16:20
17:40
25
すべてのPHPerの学びの場として
すべてのPHPerの表現の場として
すべてのPHPerの出会いの場として
技術を高め、広く共有できる居場所となることを心から願っています。

Mais conteúdo relacionado

Mais procurados

Javascript1-1
Javascript1-1Javascript1-1
Javascript1-1
Jun Chiba
 

Mais procurados (16)

今すぐ使えるPHP開発のあれこれ
今すぐ使えるPHP開発のあれこれ今すぐ使えるPHP開発のあれこれ
今すぐ使えるPHP開発のあれこれ
 
PHP で実行中のスクリプトの動作を下から覗き見る
PHP で実行中のスクリプトの動作を下から覗き見るPHP で実行中のスクリプトの動作を下から覗き見る
PHP で実行中のスクリプトの動作を下から覗き見る
 
モダン PHP テクニック 12 選 ―PsalmとPHP 8.1で今はこんなこともできる!―
モダン PHP テクニック 12 選 ―PsalmとPHP 8.1で今はこんなこともできる!―モダン PHP テクニック 12 選 ―PsalmとPHP 8.1で今はこんなこともできる!―
モダン PHP テクニック 12 選 ―PsalmとPHP 8.1で今はこんなこともできる!―
 
Oss coding style
Oss coding styleOss coding style
Oss coding style
 
20130316 プログラミング言語Go
20130316 プログラミング言語Go20130316 プログラミング言語Go
20130316 プログラミング言語Go
 
JIT のコードを読んでみた
JIT のコードを読んでみたJIT のコードを読んでみた
JIT のコードを読んでみた
 
20130824 Lightweight Language "Go" @LL matsuri
20130824 Lightweight Language "Go" @LL matsuri20130824 Lightweight Language "Go" @LL matsuri
20130824 Lightweight Language "Go" @LL matsuri
 
PHP 8 と V8 (JavaScript) で速さを見比べてみよう!
PHP 8 と V8 (JavaScript) で速さを見比べてみよう!PHP 8 と V8 (JavaScript) で速さを見比べてみよう!
PHP 8 と V8 (JavaScript) で速さを見比べてみよう!
 
php-src の歩き方
php-src の歩き方php-src の歩き方
php-src の歩き方
 
コードを書いて理解する!Enumについて
コードを書いて理解する!Enumについてコードを書いて理解する!Enumについて
コードを書いて理解する!Enumについて
 
PHPでセキュリティを真面目に考える
PHPでセキュリティを真面目に考えるPHPでセキュリティを真面目に考える
PHPでセキュリティを真面目に考える
 
Javascript1-1
Javascript1-1Javascript1-1
Javascript1-1
 
20130228 Goノススメ(BPStudy #66)
20130228 Goノススメ(BPStudy #66)20130228 Goノススメ(BPStudy #66)
20130228 Goノススメ(BPStudy #66)
 
【DELPHI / C++BUILDER STARTER チュートリアルシリーズ】 シーズン2 Delphi の部 第1回 ‟シューティングゲームのプロ...
【DELPHI / C++BUILDER STARTER チュートリアルシリーズ】  シーズン2 Delphi の部 第1回 ‟シューティングゲームのプロ...【DELPHI / C++BUILDER STARTER チュートリアルシリーズ】  シーズン2 Delphi の部 第1回 ‟シューティングゲームのプロ...
【DELPHI / C++BUILDER STARTER チュートリアルシリーズ】 シーズン2 Delphi の部 第1回 ‟シューティングゲームのプロ...
 
PHP AST 徹底解説(補遺)
PHP AST 徹底解説(補遺)PHP AST 徹底解説(補遺)
PHP AST 徹底解説(補遺)
 
コンピュータシステムの理論と実装10
コンピュータシステムの理論と実装10コンピュータシステムの理論と実装10
コンピュータシステムの理論と実装10
 

Semelhante a PHPの今とこれから2018

Semelhante a PHPの今とこれから2018 (20)

PHPの今とこれから2016
PHPの今とこれから2016PHPの今とこれから2016
PHPの今とこれから2016
 
PHPの今とこれから2022
PHPの今とこれから2022PHPの今とこれから2022
PHPの今とこれから2022
 
PHPの今とこれから2020
PHPの今とこれから2020PHPの今とこれから2020
PHPの今とこれから2020
 
PHP Now and then 2018 : WordPress Special Edition
PHP Now and then 2018 : WordPress Special EditionPHP Now and then 2018 : WordPress Special Edition
PHP Now and then 2018 : WordPress Special Edition
 
PHPの今とこれから2015
PHPの今とこれから2015PHPの今とこれから2015
PHPの今とこれから2015
 
2009 PHP初心者
2009 PHP初心者2009 PHP初心者
2009 PHP初心者
 
FuelPHP活用事例
FuelPHP活用事例FuelPHP活用事例
FuelPHP活用事例
 
RFC: "var" Deprecation
RFC: "var" DeprecationRFC: "var" Deprecation
RFC: "var" Deprecation
 
PhpStormを使おう --高槻からは快速急行が早くなります #jbugj
PhpStormを使おう --高槻からは快速急行が早くなります #jbugjPhpStormを使おう --高槻からは快速急行が早くなります #jbugj
PhpStormを使おう --高槻からは快速急行が早くなります #jbugj
 
スクリプト言語PHP攻略法
スクリプト言語PHP攻略法スクリプト言語PHP攻略法
スクリプト言語PHP攻略法
 
php.netの歩き方
php.netの歩き方php.netの歩き方
php.netの歩き方
 
PHP Now and Then 2012 at PHP Conference 2012, Tokyo Japan (in japanese)
PHP Now and Then 2012 at PHP Conference 2012, Tokyo Japan (in japanese)PHP Now and Then 2012 at PHP Conference 2012, Tokyo Japan (in japanese)
PHP Now and Then 2012 at PHP Conference 2012, Tokyo Japan (in japanese)
 
Phpcon tokyo 20120_bigginer
Phpcon tokyo 20120_bigginerPhpcon tokyo 20120_bigginer
Phpcon tokyo 20120_bigginer
 
PHPの今とこれから2017
PHPの今とこれから2017PHPの今とこれから2017
PHPの今とこれから2017
 
8時間耐久 PHP構築の教室
8時間耐久 PHP構築の教室8時間耐久 PHP構築の教室
8時間耐久 PHP構築の教室
 
PHPの今とこれから2007
PHPの今とこれから2007PHPの今とこれから2007
PHPの今とこれから2007
 
Ruby向け帳票ソリューション「ThinReports」の開発で知るOSSの威力
Ruby向け帳票ソリューション「ThinReports」の開発で知るOSSの威力Ruby向け帳票ソリューション「ThinReports」の開発で知るOSSの威力
Ruby向け帳票ソリューション「ThinReports」の開発で知るOSSの威力
 
20171005 告白に学ぶ http status code
20171005 告白に学ぶ http status code20171005 告白に学ぶ http status code
20171005 告白に学ぶ http status code
 
FukuokaPHP 3
FukuokaPHP 3FukuokaPHP 3
FukuokaPHP 3
 
PHPCON_TOKYO_2022_Bigginer.pptx
PHPCON_TOKYO_2022_Bigginer.pptxPHPCON_TOKYO_2022_Bigginer.pptx
PHPCON_TOKYO_2022_Bigginer.pptx
 

Mais de Rui Hirokawa

Mais de Rui Hirokawa (16)

PHPの今とこれから2023
PHPの今とこれから2023PHPの今とこれから2023
PHPの今とこれから2023
 
PHPの今とこれから2021
PHPの今とこれから2021PHPの今とこれから2021
PHPの今とこれから2021
 
PHPの今とこれから2019
PHPの今とこれから2019PHPの今とこれから2019
PHPの今とこれから2019
 
日本PHPユーザ会の紹介
日本PHPユーザ会の紹介日本PHPユーザ会の紹介
日本PHPユーザ会の紹介
 
PHPの中の人によるパネルディスカッション
PHPの中の人によるパネルディスカッションPHPの中の人によるパネルディスカッション
PHPの中の人によるパネルディスカッション
 
PHPの今とこれから2009
PHPの今とこれから2009PHPの今とこれから2009
PHPの今とこれから2009
 
PHPの今とこれから2008
PHPの今とこれから2008PHPの今とこれから2008
PHPの今とこれから2008
 
PHPの今とこれから2006
PHPの今とこれから2006PHPの今とこれから2006
PHPの今とこれから2006
 
PHPの今と未来を語る
PHPの今と未来を語るPHPの今と未来を語る
PHPの今と未来を語る
 
PHPの今と未来を語る
PHPの今と未来を語るPHPの今と未来を語る
PHPの今と未来を語る
 
PHP4の今 ~日本語対応と最近のトピックス~
PHP4の今 ~日本語対応と最近のトピックス~PHP4の今 ~日本語対応と最近のトピックス~
PHP4の今 ~日本語対応と最近のトピックス~
 
PHPの今とこれから2014
PHPの今とこれから2014PHPの今とこれから2014
PHPの今とこれから2014
 
PHP 5.5ネーティブキャッシュの話
PHP 5.5ネーティブキャッシュの話PHP 5.5ネーティブキャッシュの話
PHP 5.5ネーティブキャッシュの話
 
PHPの今とこれから 2013
PHPの今とこれから 2013PHPの今とこれから 2013
PHPの今とこれから 2013
 
最新PHP事情 (2000年7月22日,PHPカンファレンス)
最新PHP事情 (2000年7月22日,PHPカンファレンス)最新PHP事情 (2000年7月22日,PHPカンファレンス)
最新PHP事情 (2000年7月22日,PHPカンファレンス)
 
PHP, Now and Then 2011
PHP, Now and Then 2011PHP, Now and Then 2011
PHP, Now and Then 2011
 

Último

Último (10)

LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
 
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
 
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
 
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
 
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
 
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
 
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
 
Utilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native IntegrationsUtilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native Integrations
 
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
 
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。
 

PHPの今とこれから2018

  • 1. PHPの今とこれから2018 PHP Conference Tokyo 2018 December 15, 2018 廣川 類 (日本PHPユーザ会) 1
  • 2. 自己紹介:ひろかわ  PHPのホビーユーザ(1996~)  PHPマニュアルの日本語化  マルチバイト化:mbstringエクステンション  PHPカンファレンス皆勤中!  PHP関連書籍:  PHP徹底攻略  初めてのPHP(監訳) 2
  • 3. PHPとは?  PHPは主にWebアプリケーションに使用されるスクリプト言語  1995年の誕生以来、Webと共に成長、進化  現場の課題を簡単に解決してくれる便利なツールです 78.9% 11.9% 3.9% 2.3% 2.1% サーバサイドプログラミング言語 PHP ASP.NET Java Ruby static files 引用: W3Techs.com, 2018/12/11 59.6% 5.5% 3.5% 2.6% 2.6% CMSシェア WordPress Joomla Drupal Squarespace Shopify 3
  • 4. PHPの開発体制 Rasmus Lerdorf Andi Gutmans Zeev Suraski Marcus Boerger 開発アカウント:約1939名(15名)‫‏‬ コア:約150名(5名) PHP Group:10名
  • 6. PHP アンケート 2018  PHPでよく使うバージョンは? 1) 使ったことがない 2) PHP 5.x 3) PHP 7.x 6 <?php echo “Hello!”; ?>
  • 7. PHPバージョン分布 引用: W3Techs.com, 2018/12/1 5.3% 7.4% 10.9% 32.1% 10.6% 15.1% 12.8% 7.2 7.1 7.0 5.6 5.5 5.4 5.3(14.6%) (19.5%) (28.5%)  PHP7ユーザ: 23.6% (昨年: 8.2%)  EOLとなるPHP 5のユーザ: 75.8%  WordPressの推奨環境:PHP 7.2, MySQL 5.6, HTTPS 7 (20.2%) * https://wordpress.org/about/requirements/
  • 8. PHPリリースサイクル 8 2015 2016 2017 2018 2019 2020 2021 5.6 7.0 7.1 7.2 アクティブサポート セキュリティ修正のみ 2018/12/15  PHPのライフサイクル:3年(バグ修正:2年、セキュリティ修正のみ:1年)  EOL以降はセキュリティ関連の修正も提供されず、非常に危険です  2018年末、PHP5のEOLがついにやってきます EOL 2018/12/31 https://wiki.php.net/rfc/releaseprocess http://php.net/supported-versions.php EOL 2018/12/3 EOL 2019/12/1 EOL 2020/11/30
  • 9. PHPリリース情報 Release 5.6 7.0 7.1 7.2 変更 2017/11/23 7.0.26 7.1.12 2017/11/30 7.2.0 PHP 7.2.0 2018/1/4 5.6.33 7.0.27 7.1.13 7.2.1 CVE-2018-5711-5712 (gd,phar),14884 (http) 2018/2/1 7.1.14 7.2.2 2018/3/1 5.6.34 7.0.28 7.1.15 7.2.3 CVE-2018-7584 (buffer overflow) 2018/3/29 5.6.35 7.0.29 7.1.16 7.2.4 CVE-2018-10545(opcache) 2018/4/26 5.6.36 7.0.30 7.1.17 7.2.5 CVE-2018-10546-10549(ldap,icon,phar,heap/exif) 2018/5/24 7.1.18 7.2.6 2018/6/21 7.1.19 7.2.7 2018/7/19 5.6.37 7.0.31 7.1.20 7.2.8 CVE-2018-14883,14851 (heap/exif) 2018/8/16 7.1.21 7.2.9 2018/9/13 5.6.38 7.0.32 7.1.22 7.2.10 CVE-2018-17082 (Apache2/XSS) 2018/10/11 7.1.23 7.2.11 2018/11/8 7.1.24 7.2.12 2018/12/6 5.6.39 7.0.33 7.1.25 7.2.13 PHP 5.6/PHP 7.0 EOL, PHP 7.3.0 Release 9  大きなセキュリティ上の問題は発生せず。ただし、更新推奨
  • 10. PHP7: より速く、快適に http://talks.php.net/etsy18 by Rasmus Leodorf 10  実用アプリケーション(Wordpress)の例  実行速度、メモリ消費共に大きく改善
  • 11. PHP7: より速く、快適に Athlon II X4 640 3.0GHz, Ubuntu 11  PHP 7.3は若干の改善 Zend/bench.php 0 0.5 1 1.5 2 2.5 3 3.5 4 PHP 5.6 PHP 7.0 PHP 7.1 PHP 7.2 PHP 7.3 実行時間[s] strcat(200000) sieve(30) nestedloop(12) matrix(20) heapsort(20000) hash2(500) hash1(50000) fibo(30) ary3(2000) ary2(50000) ary(50000) ackermann(7) mandel2 mandel simpleudcall simpleucall simplecall simple 0 2 4 6 8 10 12 14 16 PHP 5.6 PHP 7.0 PHP 7.1 PHP 7.2 PHP 7.3 実行時間[s] $x = $f ? $f : tmp $x = $f ? $f : $a $x = $f ?: tmp $x = $a ?: null $x = $str[0] $x = $hash['v'] $x = $GLOBALS['v'] $x = $_GET $x = TEST new Foo() $x = Foo::TEST $this->f() empty($this->x) isset($this->x) $this->x-- $this->x++ --$this->x ++$this->x $this->x += 2 $this->x = 0 $x = $this->x Foo::f() self::f() empty(Foo::$x) isset(Foo::$x) Foo::$x = 0 $x = Foo::$x empty(self::$x) isset(self::$x) self::$x = 0 $x = self::$x int_func() undef_func() func() empty_loop Zend/microbench.php
  • 12. PHP 7.3 改善/変更のポイント 12 if (TRUE) { print <<EOS Hello EOS; }  doc文字列の終端マーカ:インデントできるようになった、改行が不要に  終端マーカの位置でインデント(スペース挿入)を制御できる  注意:インデントを文字列よりも右に配置すると構文エラー(*)となる  注意:タブと空白の混用は禁止  heredoc/nowdoc構文が柔軟に RFC: https://wiki.php.net/rfc/flexible_heredoc_nowdoc_syntaxes if (TRUE) { print <<EOS Hello EOS; } Hello Hello if (TRUE) { print <<EOS Hello EOS; } Hello * Parse error: Invalid indentation - tabs and spaces cannot be mixed
  • 13. PHP 7.3 改善/変更のポイント 13 $s = "sTraße"; echo mb_strtoupper($s);  Mbstring: 完全な大文字・小文字変換のサポート (文字数変化に対応、引用符・アポストロフィの扱い改善、変換速度改善) echo mb_convert_case($s,MB_CASE_UPPER); // STRASSE echo mb_convert_case($s,MB_CASE_UPPER_SIMPLE); // STRAßE echo mb_convert_case($s,MB_CASE_FOLD); // strasse echo mb_convert_case($s,MB_CASE_FOLD_SIMPLE); // straße STRASSE STRAßE PHP 7.2 PHP 7.3 echo mb_convert_case("'be'",MB_CASE_TITLE); 'Be' 'be' PHP 7.2 PHP 7.3
  • 14. PHP 7.3 改善/変更のポイント 14 mb_ereg('(?<word>¥w+)', '国', $m);  Mbstring: mb_ereg_*() で名前付きキャプチャをサポート mb_ereg_replace('¥s*(?<word>¥w+)¥s*', "_¥k<word>_¥k'word'_", ' foo '); mb_ereg_replace() で置換文字列で名前付きキャプチャを使うための ¥k<> および ¥k‘’ 表記をサポート: $m[0] = "国" $m[1] = "国" $m["word"] = "国" _foo_foo_
  • 15. PHP 7.3 改善/変更のポイント 15  session.cookie_samesite: CookieにSameSiteディレクティブ (“Lax” または “Strict”)を追加 RFC: https://wiki.php.net/rfc/same-site-cookie  RFC 6265 (Cookie)の拡張提案: SameSite属性 CookieにSameSite属性を付与することで、クロスサイトへのリクエスト時に Cookieヘッダを付与しなくなる (Chrome等ほぼ全てのブラウザでサポート) CSRF攻撃対策  setcookie(), setrawcookie(),session_set_cookie_params()に samesiteオプション追加 Set-Cookie: sess=abc123; path=/; SameSite=Lax setcookie(‘foo’,’boo’,3600,[‘path’=>’/’,… ’samesite’=>’Strict’]);
  • 16. PHP 7.3 改善/変更のポイント 16 $foo = [1,2,3]; if (is_array($foo) || $foo instanceof Countable) { echo "countable"; }  関数追加: is_countable() RFC: https://wiki.php.net/rfc/is-countable $foo = [1,2,3]; if (is_countable($foo)) { echo "countable"; } $a = ['abc'=>‘A', 'def'=>‘B', 'ghi'=>‘C']; echo array_key_first($a); echo array_key_last($a);  関数追加: array_key_first()/array_key_last() abc ghi
  • 17. PHP 7.3 改善/変更のポイント 17 $m = [1,2,3]; $a = $m[0]; $b =& $m[1]; $c =& $m[2];  listにおけるリファレンス代入 RFC: https://wiki.php.net/rfc/list_reference_assignment $m = [1,2,3]; list($a, &$b, &$c) = $m; $c = [1,2,3]; [$a, &$b, &$c] = $m; または PHP7.2まで PHP7.3 • 複数のリファレンス代入を一度に行うことができる • 複数の代入の中で、リファレンス代入を任意に指定できる
  • 18. PHP 7.3 改善/変更のポイント 18 <?php $a = [1,2]; $b = [3,4]; $c = array_merge($a, $b, [5,6], );  関数コール引数の末尾にカンマが使用可能に RFC: https://wiki.php.net/rfc/trailing-comma-function-calls
  • 19. PHP 7.3 改善/変更のポイント 19  PCREがPCRE2に更新  php-fpmでgetallheaders()が利用可能に  preg_quote()が’#’もエスケープするようになった  ftp転送モードのデフォルトがbinaryに  高分解能タイマー関数追加(ナノ秒):hrtime()  JsonException追加  廃止  大文字・小文字に依存しない定数: define() の第三引数にtrueを指定するとdeprecaion警告を発生 (RFC: https://wiki.php.net/rfc/case_insensitive_constant_deprecation) mbereg_*() 廃止 -> mb_ereg_*()
  • 20. HHVM/Hackの進化 20 Facebookが開発/公開するPHP/Hack実行環境 HHVMのPHPサポート終了を宣言(2018/9/12)  v3.30 (2018/12/17) がPHPをサポートする最終版  v4.0.0 (2019/1/28) 以降ではPHP非互換  2019/11/19: v3.30のサポート終了 Hackの未来  2~3年は、ユーザ数増を目指さず、Hack言語の改善に務める  4週間毎のリリースを行い、LTS版の使用は非推奨 https://hhvm.com/blog/2018/09/12/end-of-php-support-future-of-hack.html
  • 21. PHPのこれから  PHP 7.4開発が開始される。  プリロード  Typed Properties 2.0 21 https://wiki.php.net/rfc/typed_properties_v2 https://wiki.php.net/rfc/preload class User { public int $id; public string $name; public function __construct(int $id, string $name) { $this->id = $id; $this->name = $name; } }  opcache.preload で指定されたPHPスクリプトがサーバ起動時に実行される  応答速度50%改善 (ZF2Test)
  • 22. PHPの成功と未来 学習が容易: 言語がシンプル、ドキュメントが豊富 - 多様な要求に応えつつ、わかり易さを保つことが必要 - 地道な活動が重要: ローカルなPHPカンファレンス、勉強会、等 進化を継続: Webの進化に対応し、必要十分な解を提供 - 開発者/貢献者の育成 - キラーアプリ(WordPressなど)の存在がキー PHPは歯ブラシのようなもの。いつも使う役に立つシンプルな ツールだけど、誰も歯ブラシのことなんて気にしないよね。 PHPは「問題を解くためのシンプルなツール」なのさ。 (http://en.wikiquote.org/wiki/Rasmus_Lerdorf) Rasmus語録
  • 24. 24 PHP Conference 2018 の見どころ 1F大展示 2F小展示 4F梅 4F鶯 1F A+B 3F特別 6F D会 大規模PHPプロジェク トでPHPUnitを3世代 アップグレードするため にやったこと PHPとブロックチェーン を使ったWebアプリ開 発 LarabelでTDDを体 験しよう 独立したコアレイヤ パターンによるPHP アプリケーションの 実装 PHP初心者セッショ ン マイグレーションアン チパターン Cygamesにおける長 期運用タイトルのこれ までとこれから 2018年のPHP環境を 考えてみた 継続的なバージョン アップのためのテスト 戦略 PHP,Go,Elasticsear chによる@cosmeを5 倍早くする取り組み VOYAGEのエンジ ニア評価制度ってど んな感じなのか25 分でミニ再演 セキュア・アプリケー ションのためのHTTP 設定 ランサーズの CakePHP 1.3→2.8 移行 モノリシックなアプリ ケーションにおけるフロ ントエンド部品の共通 化 PHPは本当に遅いの か アーキテクチャ設計と UX設計は同じなのか PHPを選ぶ理由 ドキュメントルート配 下に全てのPHPファ イルが置かれていた 環境をindex.php 1 個だけにした話 PHPでのgRPCクラ イアント作成とユース ケース ユニットテストが入れら れないレガシーなソー スでCIが回せるように なった 安全なWebアプリ ケーションの作り方 2018 php-fpmをもっと理 解しよう Larabelxレイヤード アーキテクチャを実践 して得られた知見と反 省 PHP-FIGのHTTP 処理標準の設計は なぜPSR-7/15/17 になったのか Phalcon Essentials 苦手!!フレームワーク を克服するには PHPを検査するPHP を書く PHPバージョンアップと 決済テストを支えたユ ニットテスト 案外よくできている MySQLというアプリ ケーション Domain Driven Design レビューで初心者イ ンターンを一人前に 育てた話 技術者が企画力を 上げたら鬼に金棒 エンジニアだけで完全 内作化のOAチームを 立ち上げた話 Webサービスを育てる ための組織作りと文化 作り エンジニア経験5ヶ月 の新人がDDDやTDD、 コンポーネントを駆使 してクソコードを改革し てきた話 PHPとApache Sparkで始めるデータ 解析処理 php-srcと遊ぶよ! LT 11:00 12:00 13:00 13:35 14:10 14:45 15:20 16:20 17:40