Language Update PHP 2018

公開日:

Download PDF

スライドテキスト

Page 1

Language Update 2018

PHP

<?php

2018-08-26 Learn Languages 2018

#ll2018

Page 2

お前誰よ
うさみけんた (@tadsan) / Zonu.EXE

  • GitHub/Packagistでは id: zonuexe
    • ピクシブ株式会社 pixiv運営本部
  • Emacs Lisper, PHPer
  • Emacs PHP Modeのメンテナ引き継ぎました
    • 好きなリスプはEmacs Lispです
    • Qiitaに記事を書いたり変なコメントしてるよ

Page 3

言語的なバックグラウンド
2004年頃: ISO-HTML

  • 2006年頃: JavaScript
  • 2010年頃: Ruby, 魔法言語 リリカル☆Lisp
  • 2011年頃: Python, shell(Bash), F#/OCaml
  • 2013年頃: Emacs Lisp, PHP
  • 基本はWebから始まって動的言語やってきた

Page 4

<?php

Page 5

みんな大好きPHP

Page 6

ですよね?
(暗黒微笑)

Page 7

リアルワールドでのシェア の割にプログラミング言語

として興味関心の対象と してる人は多くない印象

Page 8

😇

Page 9

“We have things like protected properties.
We have abstract methods. We have all
this stuff that your computer science

teacher told you you should be using.
I don't care about this crap at all.”

–Rasmus Lerdorf
https://en.wikiquote.org/wiki/Rasmus_Lerdorf

Page 10

には プロパティも抽象メ

“PHP protected
ソッドもありますよ。計算機科学の教授が
「使え」と言ってるものは全部。

そんなことはクソ興味ないですけど

–Rasmus Lerdorf

Page 11

原作者のRasmusはプロ グラミング言語の設計 にはあまり関心がない

Page 12

おしながき

Page 13

1. PHPの開発体制
2. 言語としての特徴 3. 最近の動向と「次」

Page 14

PHPの
開発体制

Page 15

Rasmusは「最初の開発者」 であってGuidoやMatzの
ようなBDFLではない
(Wikipediaの一覧には載ってるけど…)

Page 16

機能追加や改廃はRFCに まとめられMLで議論され た後にコミッターによる

投票で決まるプロセス

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

Page 17

PHPの行く末を

知りたければRFCを ウォッチすればよい

Page 18

https://wiki.php.net/rfc

Page 19

https://php-rfc-watch.beberlei.de/

Page 20

Page 21

https://wiki.php.net/rfc

Page 22

言語としての
特徴

Page 23

Webアプリを最も

ゆるふわ簡単に 構築できる言語

Page 24

昔ながらのCGIと同じく

レンタルサーバー借りて
ファイルを置けば設置完了

Page 25

現在ではレン鯖にFTPで転送とか よりHerokuにgit pushした方が

ずっと簡単じゃね?
と僕も思ってるけど、PHPが利用
される界隈的にそこまで主流の 選択肢とはされない感じがある

Page 26

PHPは様々な
要素を併せ持つ

Page 27

1. HTMLテンプレート
2. PerlっぽいCGI
3. Javaっぽいクラス

Page 28

には プロパティも抽象メ

“PHP protected
ソッドもありますよ。計算機科学の教授が
「使え」と言ってるものは全部。

そんなことはクソ興味ないですけど

–Rasmus Lerdorf

Page 29

ほかの言語にあるよ

うな機能は概ねある 計算機科学の教授が使えと言ってるものは全部

全部とは言ってない↑↑↑

Page 30

抽象クラス, トレイト, インターフェ
イス, ジェネレータ, イテレータ, クロー
ジャ, 函数の動的呼び出し, 無名クラ ス, eval, 型宣言, 連想配列, リフレク ションAPI, 自己文書化, 標準入出力の 読み書き, REPL, クラスの遅延ロード

Page 31

イテレータ・ジェネレータ

foreachでイテレーションできる
モノをユーザー定義で作れる
ストリーム も

(遅延リスト・無限リスト)

当然扱える
創意工夫でかなりの使いでがある

Page 32

トレイト (trait)

継承なしでクラスに実装追加できる 複数トレイトの衝突を解決できる
優先順位の定義・メソッド名変更
つまり「本物の」トレイトの実装

Nathanael Schärli, Stéphane Ducasse, Oscar Nierstrasz, Andrew P. Black(2002)
Traits: Composable Units of Behaviour

Page 33

クラスの遅延ロード

実行時に未定義クラスが登場したと きにファイルを読み込むロジックを
ユーザー定義できる
いちいちrequire_onceを書かない 不必要なファイルが読み込まれない
AOP メタプログラミングの温床
Composerを利用するのが鉄板構成

Page 34

最近の動向

Page 35

PHP7.0は12月1日前後に リリースされるスケジュー
ルで概ね固定されてる

Page 36

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

Page 37

2年間のメンテと
1年間のセキュリティ修正

Page 38

大事な
お知らせです

Page 39

2004年から長らくご愛顧いた だいだきましたPHP5.xの公式

サポートは2018年をもって

完全に終了いたします。
(5.6のSecurity fixes終了)

Page 40

ついでにPHP7.0の

Security fixesも12月3日に 終了するので7.1または7.2系 にアップデートしましょう。

Page 41

あくまでThe PHP Groupから のリリースの話なので、脆弱性 が出たら各ディストリ独自のアッ プデートがあると思いますが。

Page 42

ご安全に。

Page 43

最近の動向
(言語コア)

Page 44

PHP 5.6→ 7.0

Page 45

これは内部構造の

最適化と型宣言の
追加が目玉

Page 46

http://d.hatena.ne.jp/hnw/20160828

Page 47

PHP 7.1以降

Page 48

微妙に書きにくかった
文法の修正と危険な機能 の非推奨化 が中心
(削除)

Page 49

PHP 7.1

nullableの追加
函数戻り値にvoidが書けるように
配列分解の短縮構文
クラス定数に可視性を定義可能に

private const

Page 50

PHP 7.2

型宣言にobjectが書けるように
継承時にメソッドの型宣言を省略可 クラスのグループ表記ケツカンマ可

Page 51

PHP 7.3 (12月リリース予定)

7月にfeature freezeされ現在beta2
函数呼び出し引数のケツカンマ可 ヒアドキュメント/nowdocの改善
終端行判定がシビアだったのが緩和
行頭空白をトリムできるように

Page 52

PHP 7.4?

Page 53

PHP 7.4

typed propertyが入る…かも(議論中)
これは比較的確度高そう
Fiberが入る… かも(議論中)
PHPで非同期処理は伝統的に鬼門 取り込まれるまでハードル高そう

Page 54

PHP 8?

PHP5時代の負債っぽい仕様は一掃?
臆測です
JITが入る…?
ほんとにうまくいくの?
ローカル変数の型付け?
typed propertyの流れで視野内

Page 55

最近の動向
(関連コミュニティ)

Page 56

PHPカンファレンスは活発

2018年はPHPコミュニティ・カンファ
レンスが活発化した一年だった
iOSDC主宰の長谷川さん(@tomzoh) がPHPカンファレンスと別にPHPer
Kaigiを開催してコミュニティに火
をつけた
各地域のCFP応募数が倍増した

Page 57

2018年のPHPカンファレンス

2019年は既に例年以上の開催告知

PHPerKaigi 2019
地域: 福岡/仙台 /札幌

(New!)
フレームワーク: CakePHP, Laravel

Page 58

PhpStormの普及

JetBrains社のPHP(+WEB)専用IDE 静的解析機能がめっちゃ強い

(PHP比)

入力補完やエラー表示が強い 簡単な型推論はしてくれる
PHPDocの型記述を読んでくれる
リファクタリング機能がある

Page 59

PHPと静的解析

PhpStorm登場以前は単純なコードの スタイルや複雑度を検査するものが
多かった

PhpStorm以後は変数のスコープや 静的な型検査をベースにチェックで
きるツールが増えた

Phan, PHPStan, Psalm

Page 60

PHPDocの現状

ポピュラーなライブラリやフレーム ワークはPHPDocが整備されてるので、 PhpStormを入れるだけで十分補完が
機能する状態
一方で仕様の標準化と実装は難航
PhpStormがPSR-5入れてくれない IntersectionType 入りそう

(非標準)

Page 61

並列処理・非同期処理

PHPでは実行モデル的に鬼門
↑情報科学の教授に怒られそう
それを解決しようとする動きがある

Swoole

https://www.swoole.com/
Fiber(RFC)

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

PHP-Promise(ext)
https://github.com/php-promise/promise

Page 62

書籍

あんまり景気よくなさそう
初心者向けの入門書は結構出てる

最新のモダンな開発事情を伝える
ものはずっと出てない
パーフェクトPHPは2014年
いまがんばって企画書を書いてます

Page 63

まとめ

Page 64

PHPの活用領域
は多様

Page 65

言語としては従来の 「負債」を解消する
方向の変更が多い

Page 66

PHPを継続的に静的解析できる 環境が既に揃ってるので既存プ ロジェクトの改善や新規開発の
効率化の大きな武器になる