PHPの20年とこれから
20 years of PHP and beyond

pixiv Inc.
USAMI Kenta
1

Docomo R&D OPEN LAB ODAIBA
2023-08-26 Learn Languages

お前誰よ•
ピクシブ株式会社
pixiv事業本部
Webエンジニアリングチーム
PHPer•
うさみけんた (@tadsan) / Zonu.EXE / にゃんだーすわん• 2012年末から現職でPHPを書いているWebプログラマ•
プログラミング言語にちょっとこだわりのある素人(spcamp2010)•Emacs PHP Modeを開発しています (2017年-)

2emacs-php

3

<?php4

PHPってどんな言語？
5とにかく毀誉褒貶が激しい言語ランタイム
6

Webトラフィック
7

W3Techs 統計

パッケージ数

PHPはどこで使えるのか
10

PHPは汎用プログラミング言語•

11

HTTP = Webサービス

PHPは汎用プログラミング言語•
それ以外の任意のあらゆること(得意とは言ってない)•
HTTP = Webサービス

12

PHPは汎用プログラミング言語•
それ以外の任意のあらゆること(得意とは言ってない)•HTTP = Webサービス• CLI• GUIもいちおう… (得意とは言ってない)13

みなさんの想像するPHPとは14

<!DOCTYPE html><html><head><title>Hello, PHP!</title></head><p><?php if (date('H') < 19): ?>こんにちは<?php else: ?>こんばんは<?php endif; ?></p><p>今は<?= htmlspecialchars(date('H')) ?>時です</p>15

A

<?php require 'bootstrap.php';$db = mysqli_connect();$stmt = mysqli_prepare($db, 'SELECT * FROM books');
mysqli_stmt_execute($stmt);
print '<h1>本の一覧</h1>';
print '<ul>';foreach ($stmt as $s) {print '<li>'; print $s->name; print '</li>';}print '</ul>';16

B<?php declare(strict_types=1);
namespace Foo\Http\Controller;class BooksController extends BaseController {public function index() {$books = Books::getAll();$this->render(compact("books"));
}
}
17

C

P H P の 原 作 者

ラスマスかく語りき18

2007年 MySQL Conference“We have things like protected properties.
We have abstract methods. We have all thisstuff 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

2007年 MySQL Conference“PHPにはprotectedプロパティも抽象メソッドもありますよ。計算機科学の教授が「使え」と言ってるものは全部。
そんなことはクソ興味ないですけど”–Rasmus Lerdorf (tadsanによる超訳)

変数に$があってPerlっぽくて21

C言語っぽい関数と-> があって22

雰囲気Javaっぽい
オブジェクト指向で23

PHPは見る人の心を映す

24

改めて2003年
25PHPの歴史 (LLイベント以前)•
1996:
PHP/FI2.0→
汎用言語として使用できるように
•
1998:
PHP
3.0→
クラス構文のサポート•1999:
PHP
4.0→Zend
Engine(インタプリタVM化)•
2003:PHP5.0(開発中)→
オブジェクト指向構文の刷新•
1994: PHP Tools 1.0

26→ SSI風構文のテンプレートエンジン‒ PHPの今とこれから
http://ll.jus.or.jp/2003/document/p1-php.pdf

‒ PHPの今とこれから2009https://www.slideshare.net/hirokawa/php2009

‒ PHPの今とこれから2009https://www.slideshare.net/hirokawa/php2009

‒ 開発中の PHP 6、UTF-16 化に失敗。開発ブランチも 5.3 系に巻き戻し
https://srad.jp/story/10/03/19/0136250/

PHPと文字列•

string型 = バイト列 (任意のバイナリが格納できる)• Ruby 1.8、Python 2.xと同等•

PHP 6.xでICUと統合してUCS正規化しようとした• 規定路線だったので、PHP 5.2(2006年)にbinaryキャストが追加• 当時期待されていたパフォーマンス要件を満たせず2010年に断念•
31

文字列以外の機能は5.3(2009年)、5.4(2012年)でリリース‒ Lightweight Language Saturday プログラム
http://ll.jus.or.jp/2003/program.html

‒ PHPにおけるオブジェクト指向「的」機能の特徴
http://ll.jus.or.jp/2003/document/p2-php.pdf

‒ PHPにおけるオブジェクト指向「的」機能の特徴
http://ll.jus.or.jp/2003/document/p2-php.pdf

PHPのオブジェクト指向機能•

PHP 5.0• 可視性 (public/protected/private)• abstract/interfaceが導入• オブジェクトが参照型に (それまではCoW)

•
PHP
5.6:
定数式(それまではリテラルしか記述できなかった)•
PHP 5.4: traitが導入

35

PHPのオブジェクト指向機能•
PHP
8.0:コンストラクタプロモーション(PHP8.2)•
PHP
8.1:
readonlyプロパティ
•PHP
8.2:
trait定数宣言•PHP
8.3:
型付き定数宣言•PHP 7.4: 型付きプロパティ

36

<?php<?phpclass Book {/*** @var string* @readonly*/
private $name;class Book {public function __construct(public readonly string $name,) {}...

/** @param string $name */public function __construct($name) {$this->name = $name;...
37

PHPの歴史 (LLイベント以後)•2005:
PHP
5.1
•
2006:
PHP
5.2
(PHP6との互換性を見越したsyntax追加)•2009:PHP
5.3(PHP6予定の機能の一部を先行マージ)•2012:PHP
5.4(PHP
6開発断念、文字列以外の機能をマージ)•2004: PHP 5.0

38

PHPの開発体制•Request for Comments https://wiki.php.net/rfc• 言語機能の改廃提案と投票プロセス、リリース周期が明文化•
PHP原作者のRasmus
Lardorfは開発者としての1票しか行使しない•
PHP
7.0(2015年)以降、11月末〜12月初頭にリリースが定着•

機能提案する人は仕様をまとめてMLで議論、実装も責任を持って用意する• 品質保障のためのfeature freeze、RC版なども定められた
39

PHPは誰が開発しているのか

40

41

42

43

PHPはどこに行くのか•

おそらく、どの言語よりも利用者の幅が広い言語• 動的なホームページを作りたい個人• Web制作からのステップアップ• CMSを使ったWebサイト構築• 各種システム開発 (大規模Webサイト、ゲームのAPIサーバ…)

44おそらく溝は広まりつつある•
PHPの品質保障(テスト・静的解析)のトレンドに乗れているか•
PHP8.xへのアップデートはかなり大変•
PHPの先進的な言語機能を取り入れて使っているか• PHP 7以前よりもエラーがかなり厳格化した•

45

レンタルサーバーやVPSを放置している人もおそらく多い

46

47

48

PHPは過去と未来を繋ぐ言語•

PHPの仕様はCGIの時代から地続き• PerlやRubyはApache mod時代やPost WSGI時代に断絶がある• PHPはpreforkなサーバ上でもCGI互換のシェアードナッシング(すべての状態が隔離され、リクエストごとに初期化される)•

49

汎用プログラミング言語の能力を持ちながら根幹がテンプレートエンジンにあるので、小規模からある程度大規模なアプリケーションにもフィットするWebの世界のトレンド•

シェアを伸張する各言語• Node.js, SPA• パフォーマンスに優れた静的型付き言語•

相対的にPHPの存在感は薄れつつある• このままPHPは滅びるしかないのか…？

50

PHPはどこでも65点がとれる言語•「現代におけるプロダクト開発とPHPを選定するワケ #phpkansai」• By @potato4d (PHPカンファレンス関西2017)•

小難しいことを考えずに簡単にWebアプリを書ける(HTML+α)の言語• なんだかんだいってWEB+DB連携がさくっとできる言語ランタイムとしての存在感は健在•
51

求められているのは素晴らしい言語ではなく簡単に使える言語

PHP先生の雑草のような生命力にご期待ください！
52