phpの今とこれから2015

26
PHPの今とこれから2015 PHP Conference 2015, Tokyo October 3, 2015 廣川 類 (日本PHPユーザ会) 1

Upload: rui-hirokawa

Post on 16-Apr-2017

25.312 views

Category:

Software


0 download

TRANSCRIPT

Page 1: PHPの今とこれから2015

PHPの今とこれから2015

PHP Conference 2015, Tokyo

October 3, 2015

廣川 類 (日本PHPユーザ会)

1

Page 2: PHPの今とこれから2015

2

Page 3: PHPの今とこれから2015

PHPとは?

PHPは主にWebアプリケーションに使用されるスクリプト言語

1995年の誕生以来、Webと共に成長、進化

81.3%

16.5%

3.0% 1.6%

0.7%

サーバサイドプログラミング言語

PHP

ASP.NET

Java

static files

ColdFusion

引用: W3Techs.com, 2015/9/22

58.7%

6.7%

5.0% 2.9% 2.8%

CMSシェア

WordPress

Joomla

Drupal

Magento

Blogger

3

Page 4: PHPの今とこれから2015

PHP アンケート 2015

主に使っているPHPのバージョン 1) PHP <=5.3 2) PHP 5.4 3) PHP 5.5 4) PHP 5.6 5) PHP 7.0 6) 使ってない

4

Page 5: PHPの今とこれから2015

PHPバージョン分布

引用: W3Techs.com, 2015/9/22

3.0%

12.0%

31.3% 38.1%

14.6% 1.0%

5.6

5.5

5.4

5.3

5.2

5.1(48.4%)

(22.3%)

(23.1%)

5.2 、5.3 10%減、5.5大幅増(3倍)

EOLとなったPHP 5.4以前のユーザ: 84%

5

(3.7%) (0.1%)

Page 6: PHPの今とこれから2015

・名前空間 ・クロージャ ・遅延静的束縛 ・GC改善 ・MySQLnd

PHPの歩み

5.3

`09/6

7.0

5.4

・Traits ・高速化 ・MB標準化 ・組込みWebサーバ ・レガシー機能削除

`12/3

6.0

`10/3 キャンセル

・Unicode 5.5

・ジェネレータ ・キャッシュ ・パスワードハッシュ

`13/6 5.6

・デバッガ ・定数スカラー式

`14/8

6

`15/11/12

・大幅高速化 ・戻り値型宣言 ・スカラー型宣言

PHP 5.0 ‘04/7

Page 7: PHPの今とこれから2015

PHPリリースサイクル

7

2012 2013 2014 2015 2016 2017 2018

5.3

5.4

5.5

5.6

アクティブサポート

セキュリティ修正のみ

2015/10

リリースサイクル:1年

ライフサイクル:3年(バグ修正:2年、セキュリティ修正のみ:1年)

EOL 2015/9/14

EOL 2016/7/10

EOL 2017/8/28

https://wiki.php.net/rfc/releaseprocess

http://php.net/supported-versions.php

Page 8: PHPの今とこれから2015

PHPリリース情報 Release 5.4 5.5 5.6 変更

2014/10/16 5.4.34 5.5.18 5.6.2 CVE-2014-3670, 3668 ,3669

2014/11/13 5.4.35 5.5.19 5.6.3 CVE-2014-3710

2014/12/18 5.4.36 5.5.20 5.6.4 CVE-2014-8142

2015/1/22 5.4.37 5.5.21 5.6.5 CVE-2015-0231,0232, CVE-2014-9427,9652

2015/2/19 5.4.38 5.5.22 5.6.6 CVE-2015-0235,0273,2301, CVE-2014-9705

2015/3/19 5.4.39 5.5.23 5.6.7 CVE-2015-2787,2348,2305,4147,4148,2331

2015/4/16 5.4.40 5.5.24 5.6.8 CVE-2015-3330

2015/5/14 5.4.41 5.5.25 5.6.9 CVE-2015-4025,4026,2325,2326,4021

2015/6/11 5.4.42 5.5.26 5.6.10 CVE-2015-3414,3415,3416,4642,4644

2015/7/9 5.4.43 5.5.27 5.6.11 CVE-2015-3152,5589,5590

2015/8/6 5.4.44 5.5.28 5.6.12 CVE-2015-6831,6832,6833

2015/9/3 5.4.45 5.5.29 5.6.13 CVE-2015-6834,6835,6836,6837,6838

2015/10/1 5.5.30 5.6.14 8

escapeshellarg() OSコマンドインジェクション

Page 9: PHPの今とこれから2015

PHP 7.0 改善/変更のポイント

大幅高速化 致命的エラーを例外捕捉可能に 古いSAPI、エクステンションの削除 ヌル合体演算子 (??) 結合比較演算子 ( <=> ) 戻り値型宣言 スカラー型宣言 匿名クラス

9

Page 10: PHPの今とこれから2015

より速く、快適に

Athlon II X4 640 3.0GHz, Ubuntu 14.04 10

0

0.5

1

1.5

2

2.5

3

3.5

4

PHP 5.4 PHP 5.5 PHP 5.6 PHP 7.0 HHVM 3.9

実行時間

[s]

Zend/bench.php strcat(200000)sieve(30)nestedloop(12)matrix(20)heapsort(20000)hash2(500)hash1(50000)fibo(30)ary3(2000)ary2(50000)ary(50000)ackermann(7)mandel2mandelsimpleudcallsimpleucallsimplecallsimple

PHP 7はPHP 5.6よりも大幅高速化

変数コンテナ等、内部構造を大幅最適化し、メモリを削減

Page 11: PHPの今とこれから2015

より速く、快適に

Athlon II X4 640 3.0GHz, Ubuntu 14.04 11

0

2

4

6

8

10

12

14

16

PHP 5.4 PHP 5.5 PHP 5.6 PHP 7.0 HHVM 3.9

実行時間

[s]

Zend/micro_bench.php $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

Page 12: PHPの今とこれから2015

WordPress 4.4 ベンチマーク

Athlon II X4 640 3.0GHz, Ubuntu 14.04 12

0

0.5

1

1.5

2

2.5

PHP 5.6 PHP 7.0 HHVM 3.9

PHP 7はPHP 5.6よりも約2倍高速

HHVM 3.9は更に約10%高速

リクエスト/秒の比(PHP 5.6: 1)

Page 13: PHPの今とこれから2015

スカラー型宣言と戻り型宣言

スカラー型宣言と戻り型宣言のサポート

デフォルト動作は従来と同じ(non strictモード)

Strictモードにすると型チェックが有効になる

13

RFC: https://wiki.php.net/rfc/scalar_type_hints_v5

<?php

function add($a, $b) {

return $a+$b;

}

echo add(“2“,”3”); // 5

<?php

function add(int $a, int $b) : int {

return $a+$b;

}

echo add(“2“,”3”);

PHP 5.6 PHP 7

declare(strict_types = 1);

// エラー

Page 14: PHPの今とこれから2015

致命的エラーを例外捕捉可能に

PHP 5では致命的エラー(回復可能な致命的エラー)の例外処理が困難だった。

function foo($obj) {

$obj->nope();

}

14

try {

foo(null);

} catch (¥Error $e) {

var_dump($e); // 回復処理

}

echo “alive!”; // alive!

RFC: https://wiki.php.net/rfc/engine_exceptions_for_php7

foo(null);

PHP 5.6

PHP 7

致命的エラー

Page 15: PHPの今とこれから2015

PHP7: ’<=>’ 演算子

結合比較演算子:スペースシップ演算子

function order_func($a, $b) {

return ($a < $b) ? -1 : (($a > $b) ? 1 : 0);

}

15

function order_func($a, $b) {

return $a <=> $b;

}

https://wiki.php.net/rfc/combined-comparison-operator

PHP 5.6

PHP 7

Page 16: PHPの今とこれから2015

PHP7: パーサ関連の変更

Abstract Syntax Tree (AST) :パーサとコンパイラを分離

コード管理が容易→ 最適化、メモリ削減

変数構文の統一

16

$obj->$bar [‘foo’]

RFC: https://wiki.php.net/rfc/abstract_syntax_tree

$obj->{$bar [‘foo’]}

{$obj->$bar} [‘foo’]

PHP 5.6

PHP 7

RFC: https://wiki.php.net/rfc/uniform_variable_syntax

Page 17: PHPの今とこれから2015

PHP 7:互換性に関する変更

エクステンション削除: ereg, mysql, mssql

SAPI削除: 22種類→7種類

apache2handler, cgi, cli, embed, fpm, litespeed, phpdbg

ASP(<% .. %>)、Script(<script launguage=“php”></script>)廃止

newオブジェクトの参照代入廃止

PHP4形式のコンストラクタ: E_DEPRECATED

エクステンションは要変更: http://gophp7.org/gophp7-ext/

17

class C {}

$c =& new C;

class C {

function C() {}

}

$c = new C();

Page 18: PHPの今とこれから2015

HHVM/Hackの進化

LTSリリース: 3.3, 3.6

3.8 で更に高速化: PHP7よりも平均10~20%高速

非同期クエリ(MySQL)による高速化を模索

18 From http://hhvm.com/blog

Page 19: PHPの今とこれから2015

PHPのこれから

PHP 7.1開発が開始される。

PCO (PHP Cryptography Objects)

JIT ?

19

Page 20: PHPの今とこれから2015

PHPの未来

php

frameworks

applications / plugins

pecl

users

Hack/HHVMリリースの持つ意味 PHP7は劇的に進化した、そしてこれからも…

高性能かつ現実的な解を継続的に提供する

zend

hni

20

hhvm

hack

phalcon Zephir

Page 21: PHPの今とこれから2015

PHPユーザ相互の情報交換およびコミュニティの健全な発展

設立趣旨

• 高性能Webミドルウエアへのニーズ増大

• オープンソースソフトウエアの発展

背景

国内PHPユーザの増加

活動内容

ドキュメント整備

セミナー/イベント

メンバー/スタッフ 国際化

http://www.php.gr.jp/ Web

・PHPユーザ会員と思ったらメンバー ・運営するのも楽しいかも

日本PHPユーザ会

(2000年4月発足)

php-users, php-dev, php-doc, phpug-admin

メーリングリスト

21

Page 22: PHPの今とこれから2015

22

PHP Conference 2015 の見どころ

Page 23: PHPの今とこれから2015

PHPカンファレンス紹介

Twitterアカウント:@phpcon , ハッシュタグ:#phpcon2015

Facebookページ:pcon.japan

PHP Conference 2015関連情報

http://phpcon.php.gr.jp/2015

23

Page 24: PHPの今とこれから2015

24

PHPカンファレンス2015を お楽しみください!

Page 25: PHPの今とこれから2015

HHVM

Facebookが開発/公開するPHP/Hack実行環境

2010/2 HipHop for PHP:C++トランスレータ、互換性、管理

2011/12 HipHop Virtual Machine(HHVM):JITベースVM

リソース低減化(>66%)と速度改善(>5x), WP (2.5x)

FastCGI+Webサーバで実行

PHPスクリプト

バイトコード

パース/コンパイル

Zend VM

実行

PHP/Hackスクリプト

HipHopバイトコード(HHBC)

パース/コンパイル(AST)

JITコンパイラ(最適化)

ネーティブコード

HHVM

実行(x86-64,ARM64)

25

hhvm.com

Page 26: PHPの今とこれから2015

Hack

PHPを拡張したHHVM用の言語: 2014/2公開

目的:大規模開発における開発効率化

関数、クラスの型アノテーション:型チェッカ

PHPからの移行は容易:移行ツール、gradual typing

HHVMにおける最適化にも寄与

型拡張:generics,collections,nullable

非同期プログラミング:async,await

26

hacklang.org