Skip to content

Language Update PHP 2018

公開日:

東京都大田区日本工学院専門学校 蒲田キャンパスで開催された『Learn Languages 2018』でLanguage Update(15分)として発表しました。

Download PDF

スライドテキスト

Page 1

Language Update PHP 2018

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