PHPの今とこれから2014

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

Transcript of PHPの今とこれから2014

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

PHPの今とこれから2014

PHP Conference 2014, Tokyo

October 11, 2014

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

1

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

自己紹介:ひろかわ

PHPのホビーユーザ(1996~)

PHPマニュアルの日本語化

マルチバイト化:mbstringエクステンション

PHP関連書籍:

2

PHPカンファレンス皆勤中!

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

アジェンダ

PHPの今

新しいPHP

3

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

PHPとは?

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

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

244M サイト (39%)のWebサーバーでPHPが実行されている

82.0%

17.3%

2.7% 0.7%

0.6%

サーバサイドスクリプト言語

PHP

ASP.NET

Java

ColdFusion

Perl

引用: W3Techs.com, 2014/10/1

60.9%

7.9%

5.2% 2.9% 2.7%

CMSシェア

WordPress

Joomla

Drupal

Blogger

Magento

4

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

PHP アンケート 2014

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

5

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

PHPバージョン分布

引用: W3Techs.com, 2014/9/21

0.1% 3.7%

23.1%

48.4%

23.3%

1.3%

5.6

5.5

5.4

5.3

5.2

5.1

(51.9%)

(39.3%)

(6.4%)

5.2半減、5.3微減、5.4大幅増(4倍)

EOLとなったPHP 5.3以前のユーザが約3/4

register_globalsの呪い?

6

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

PHPの歩み

2004 2005 2006 2007 2008 2009 2010

5.3 `09/6

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

7.0

PHP 10周年

JPUG 10周年

フレームワーク AJAX

XML W/S API

2011 2012 PHPcon 関西

PHPcon 北海道

5.4 ・Traits - 速度改善 - MB対応標準化 - 組込みWebサーバ - レガシー機能削除

`12/3 6.0 `10/3 キャンセル

・Unicode

`10/12 (EOL)

5.0 `04/7

5.1 `05/11

5.2 `06/11

・メモリ/速度改善 ・入力フィルタ ・速度改善

・PDO

スマホ

2013

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

`13/6

`14/8 (EOL)

2014

php.net攻撃される(2013/10)

クラウド

2015

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

`14/8

Hack/HHVM

phpng

5.7

2016

・ZE2 ・SimpleXML ・SQLite, MySQLi

7

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

PHP リリースとPHP 5.3 EOL

PHP 5.3

EOLをPHP 5.5リリース時に宣言(2013/6)

セキュリティ修正のみ実施(1年間) → 2014/8にEOL

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

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

リリースサイクル:1年

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

PHP 5.4

PHP 5.4.33がバグ修正最終版

セキュリティ修正:1年 (→ 2015/8にEOL)

8

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

PHPリリース情報

*1 X.509証明書の時刻スタンプ処理:任意コード実行、DoS

*2 null byte injection in gd

*3 buffer overflow in php_parserr (dns)

Release 5.3 5.4 5.5 変更

2013/12/12 5.3.28 5.4.23 5.5.7 CVE-2013-6420 (openssl_x509_parse)*1,4248

2014/1/9 5.4.24 5.5.8 CVE-2013-6712 (dateinterval,DoS)

2014/2/6 5.4.25 5.5.9 CVE-2013-7226 (gdImageCrop,DoS)

2014/3/6 5.4.26 5.5.10 CVE-2014-1943,2270

2014/4/3 5.4.27 5.5.11 CVE-2013-7345

2014/5/1 5.4.28 5.5.12 CVE-2014-0185(sapi/fpm,権限設定)

2014/5/29 5.4.29 5.5.13 CVE-2014-0238,0237

2014/6/26 5.4.30 5.5.14 CVE-2014-3981,0207,3478,3479,3480,3487

2014/8/14 5.3.29 5.3 EOL: CVE-2013-6712,2014-*

2014/8/21 5.4.32 5.5.16 CVE-2014-3538,3587, 5120*2,3597*3,4698,4670

CVE: Common Vulnerabilities and Exposures

fileinfo関連

Heartbleed,ShellShock

9

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

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

若干の速度改善:5%?

php://inputが再利用可に。POST用メモリ半減

可変長引数・配列展開の構文追加(’…’構文)

累乗演算子(’**’構文)

定数のスカラー式

useによる関数/定数のインポート

デバッガ標準搭載:phpdbg

10

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

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

default_charset(UTF-8)がhtmlentities()等のデフォルトに

文字コード設定の統一化(mbstring.*は非推奨)

非互換コンテキストからのコール(非staticメソッドのstaticコール

など)が非推奨に

SSL/TLS機能強化: ピア証明書/ホスト名検証デフォルト有効化

中間者攻撃(MITM)の防止

サーバ クライアント 中間者

認証局

11

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

PHP5.6: 地道な改善

Athlon II X4 640 3.0GHz, Ubuntu 14.04

0

0.5

1

1.5

2

2.5

3

3.5

4

4.5

PHP 5.3 PHP 5.4 PHP 5.5 PHP 5.6

実行時間

[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)

mandel2

mandel

simpleudcall

simpleucall

simplecall

simple

12

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

PHP5.6: 地道な改善

Athlon II X4 640 3.0GHz, Ubuntu 14.04

0

5

10

15

20

25

30

PHP 5.3 PHP 5.4 PHP 5.5 PHP 5.6

実行時間

[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

13

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

PHP5.6: ’…’ 構文

可変長引数: オプション部(可変部)を配列で取得

従来のfunc_get_args()より簡潔に記述できる

関数引数における配列アンパック:Rubyのsplat演算子

function f($val, ...$params) {

echo "$val:",count($params);

}

f(“taro”, “users”,12 );

全オプション変数を保持

taro : 2

$v = [1,2,3];

f("taro",...$v);

$v = [1,2,3];

f("taro",$v[0], $v[1], $v[2]); taro : 3

14

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

PHP5.6: phpdbgデバッガ標準化

http://phpdbg.com/

SAPIとして実装された軽量デバッガ(PHP >=5.4をサポート)

リモートデバッグ対応(Javaクライアント付属)

15

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

PHP5.6: 文字コード設定標準化

文字コード関連オプションを標準化

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

input_encoding

internal_encoding

output_encoding

iconv.* mbstring.*

input_encoding http_input

internal_encoding internal_encoding

output_encoding output_encoding

mbstring.http_input input_encoding 例:

デフォルトの文字コード:default_charset(デフォルト:UTF-8)

旧設定はE_DEPRECATEDを発生(PHP 7.0以降で廃止予定)

16

旧設定 新設定

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

PHP5.6: その他の機能(1)

名前付き定数宣言、引数デフォルト値にスカラー式を使用可能

累乗演算子(’**’構文)

<?php

const PI = 3.14;

const RADIUS = 10.0;

const AREA = PI*RADIUS**2;

function f($r = RADIUS + 2.0) {

return $r;

}

echo AREA;

echo f();

314

12

17

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

<?php

namespace Foo¥Moo {

const A = 123;

function fun() { echo A+1;}

}

namespace {

use const Foo¥Moo¥A;

use function Foo¥Moo¥fun;

echo A;

fun();

}

PHP5.6: その他の機能(2)

use で定数・関数を導入可能

123

124

18

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

アジェンダ

PHPの今

新しいPHP

19

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

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)

20

hhvm.com

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

Hack

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

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

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

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

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

型拡張:generics,collections,nullable

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

21

hacklang.org

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

Hackのコード例

<?hh

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

return $a + $b;

}

echo add(1,2);

echo add(1,”a”);

.hhconfig をトップに配置

hh_clientで型チェック

hhvmで実行

<?php

function add($a, $b) {

return $a + $b;

}

echo add(1,2);

echo add(1,”a”);

エラー 22

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

PHP互換環境の課題

互換環境いろいろ:hhvm, HippyVM, Recki-CT, Zephir

実行環境(特にJIT)が限定される

PHP(Zend VM)との互換性

23

PHP言語仕様を策定:言語実装依存の問題を分離

https://github.com/php/php-langspec

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

PHP 5.7

PHP 7.0開発に2年要する見込み

2015/8 リリース?(リリース自体も未定)

機能改善内容は未定(小規模な改善と予想)

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

24

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

PHP Next Generation

2014/5 phpng発表:メモリ管理、内部変数仕様改善

性能はhhvmに追い付いてきた(WP3.9で -15%)

ユーザ仕様は上位互換性維持、エクステンションは要改定

2014/7 次期リリース名称を PHP 7 (phpngベース)に決定

PHP 7のリリースは? 2015にα版(?)、2016リリース(?)

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

https://wiki.php.net/phpng

25

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

PHP 7に向けて( 検討中)

エンジン/メモリ管理大幅改善:JITサポート?

ASTベースコンパイラ(スクリプト→中間コード)

OpCacheエンジン統合化

非同期プログラミング

64bit対応

Unicodeサポート

HTTP2

ネーティブアノテーション/スカラータイプヒンティング

https://wiki.php.net/ideas/php6

Abstract syntax tree : AST * HHVMでサポート済み 26

Page 27: PHPの今とこれから2014

より速く、快適に

Athlon II X4 640 3.0GHz, Ubuntu 14.04

0

0.5

1

1.5

2

2.5

3

3.5

4

4.5

PHP 5.3 PHP 5.4 PHP 5.5 PHP 5.6 PHP 7.0 HHVM 3.3

実行時間

[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)

mandel2

mandel

simpleudcall

simpleucall

simplecall

simple

27

Page 28: PHPの今とこれから2014

より速く、快適に

Athlon II X4 640 3.0GHz, Ubuntu 14.04

0

5

10

15

20

25

30

PHP 5.3 PHP 5.4 PHP 5.5 PHP 5.6 PHP 7.0 HHVM 3.3

実行時間

[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

28

Page 29: PHPの今とこれから2014

PHPの未来

php

frameworks

applications / plugins

pecl

users

Hack/HHVMリリースの持つ意味 Webの進化に迅速に対応できているか?

外部開発者との密な連携が課題

実装間の互換性:アプリ作成側の開発負荷低減

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

zend

hni

29

hhvm

hack

phalcon Zephir

Page 30: PHPの今とこれから2014

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

設立趣旨

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

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

背景

国内PHPユーザの増加

活動内容

ドキュメント整備

セミナー/イベント

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

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

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

日本PHPユーザ会

(2000年4月発足)

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

メーリングリスト

30

Page 31: PHPの今とこれから2014

31

2F小展示 4Fコンベンション 3F特別会議室 6F会議室C

PHPコアから読み解くPHP5.5 Ansibleではじめるサーバ作業の自動化

初心者セッション ブラウザだけでOK!

AzureでさわっておぼえるPHP

(登録制) メルカリの超高速開発を支えるPHP

Mysqlnd徹底解説 擬人化から始めるOOP超入門

安全なPHPアプリケーションの作り方2014

PHPerがAWSと出会ってDevOpsを目指した話

パーフェクト成長戦略

(学生・新卒エンジニア向け)

PHPにおけるI/O多重化とyield

ウエブエンジニアのためのAngular.js入門

Webデザイナ向けGithub

ハンズオン

HHVM+Hack==PHP++ PHPエンジニアのためのアクセスログ解析基盤構築入門

ウェブエンジニアに必要なセキュリティスキルとは

Good Parts of PHP and

The UNIX Philosophy

LT CMS/DB Webアプリのデプロイ今昔物語

初心者向けPHPソースコード診断

エンジニアだって、企画書に強くなった方がいい

LT無差別級

メイン Bトラック Cトラック ワークショップ

10:50

11:30

12:10

12:40

13:30

14:10

14:50

15:30

PHP Conference 2014 の見どころ

Page 32: PHPの今とこれから2014

PHPカンファレンス紹介

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

Facebookページ:phpcon.japan

PHP Conference 2014関連情報

http://phpcon.php.gr.jp/w/2014/#program

32

Page 33: PHPの今とこれから2014

http://www.flickr.com/photos/skoop/2965898655/sizes/m/in/photostream/

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

33