Skip to content

PHPの20年とこれから

公開日:

東京都港区台場docomo R&D OPEN LAB ODAIBAで開催された『Learn Languages 2023』で20分枠として発表しました。

沖縄県那覇市安里ZORKS沖縄で開催された『(非公式)PHPカンファレンス沖縄2023前夜祭LT会』で15分枠として発表しました。

Download PDF

スライドテキスト

Page 1

PHPの20年とこれから

20 years of PHP and beyond

pixiv Inc.
USAMI Kenta

2023-09-15 ZORKS沖縄

(非公式)PHPカンファレンス沖縄2024 前夜祭LT会

Page 2

お前誰よ

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

Page 3

emacs-php

Page 4

このトークの文脈

Page 5

Page 6

毎年開催されている言語横断イベント

Page 7

Page 8

Page 9

2017以降

Page 10

2023年のLLイベントは

Page 11

改めて

Page 12

<?php

Page 13

PHPって
どんな言語?

Page 14

とにかく毀誉褒貶が
激しい言語ランタイム

Page 15

Webトラフィック

Page 16

W3Techs 統計

Page 17

パッケージ数

Page 18

PHPはどこで
使えるのか

Page 19

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

  • HTTP = Webサービス

Page 20

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

  • HTTP = Webサービス
  • それ以外の任意のあらゆること (得意とは言ってない)

Page 21

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

  • HTTP = Webサービス
  • それ以外の任意のあらゆること (得意とは言ってない)
    • CLI
    • GUIもいちおう… (得意とは言ってない)

Page 22

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

Page 23

A

<!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>

Page 24

B

<?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>';

Page 25

C

<?php declare(strict_types=1);

namespace Foo\Http\Controller;

class BooksController extends BaseController {
public function index() {
$books = Books::getAll();

$this->render(compact("books"));
}
}

Page 26

P H P の原作者
ラスマスかく語りき

Page 27

2007年 MySQL Conference

“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 28

2007年 MySQL Conference

には プロパティも
“PHP protected
抽象メソッドもありますよ。計算機科学の
教授が「使え」と言ってるものは全部。

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

(tadsan )

–Rasmus Lerdorf

による超訳

Page 29

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

Page 30

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

Page 31

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

Page 32

PHPは見る人の心を映す

Page 33

改めて2003年

Page 34

PHPの歴史 (LLイベント以前)

  • 1994: PHP Tools 1.0 → SSI風構文のテンプレートエンジン
  • 1996: PHP/FI 2.0 → 汎用言語として使用できるように
  • 1998: PHP 3.0 → クラス構文のサポート
  • 1999: PHP 4.0 → Zend Engine (インタプリタVM化)
  • 2003: PHP 5.0(開発中) → オブジェクト指向構文の刷新

Page 35

‒ PHPの今とこれから

http://ll.jus.or.jp/2003/document/p1-php.pdf

Page 36

‒ PHPの今とこれから2009

https://www.slideshare.net/hirokawa/php2009

Page 37

‒ PHPの今とこれから2009

https://www.slideshare.net/hirokawa/php2009

Page 38

‒ 開発中の PHP 6、UTF-16 化に失敗。開発ブランチも 5.3 系に巻き戻し

https://srad.jp/story/10/03/19/0136250/

Page 39

PHPと文字列

  • string型 = バイト列 (任意のバイナリが格納できる)
    • Ruby 1.8、Python 2.xと同等
  • PHP 6.xでICUと統合してUCS正規化しようとした
    • 規定路線だったので、PHP 5.2(2006年)にbinaryキャストが追加
    • 当時期待されていたパフォーマンス要件を満たせず2010年に断念
  • 文字列以外の機能は5.3(2009年)、5.4(2012年)でリリース

Page 40

‒ Lightweight Language Saturday プログラム

http://ll.jus.or.jp/2003/program.html

Page 41

‒ PHPにおけるオブジェクト指向「的」機能の特徴

http://ll.jus.or.jp/2003/document/p2-php.pdf

Page 42

‒ PHPにおけるオブジェクト指向「的」機能の特徴

http://ll.jus.or.jp/2003/document/p2-php.pdf

Page 43

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

  • PHP 5.0
    • 可視性 (public/protected/private)
    • abstract/interfaceが導入
    • オブジェクトが参照型に (それまではCoW)
  • PHP 5.4: traitが導入
  • PHP 5.6: 定数式 (それまではリテラルしか記述できなかった)

Page 44

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

  • PHP 7.4: 型付きプロパティ
  • PHP 8.0: コンストラクタプロモーション (PHP 8.2)
  • PHP 8.1: readonlyプロパティ
  • PHP 8.2: trait定数宣言
  • PHP 8.3: 型付き定数宣言

Page 45

<?php <?php

class Book { class Book {
/** public function __construct(
* @var string public readonly string $name,
* @readonly ) { */ }
private $name;
...
/** @param string $name */
public function __construct($name) {
$this->name = $name;

...

Page 46

PHPの歴史 (LLイベント以後)

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

Page 47

PHPの開発体制

  • Request for Comments https://wiki.php.net/rfc
    • 言語機能の改廃提案と投票プロセス、リリース周期が明文化
  • 機能提案する人は仕様をまとめてMLで議論、実装も責任を持って用意する
  • PHP原作者のRasmus Lardorfは開発者としての1票しか行使しない
  • PHP 7.0(2015年)以降、11月末〜12月初頭にリリースが定着
    • 品質保障のためのfeature freeze、RC版なども定められた

Page 48

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

Page 49

Page 50

Page 51

Page 52

PHPはどこに行くのか

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

Page 53

おそらく溝は広まりつつある

  • PHPの先進的な言語機能を取り入れて使っているか
  • PHPの品質保障(テスト・静的解析)のトレンドに乗れているか
  • PHP 8.xへのアップデートはかなり大変
    • PHP 7以前よりもエラーがかなり厳格化した
  • レンタルサーバーやVPSを放置している人もおそらく多い

Page 54

Page 55

Page 56

Page 57

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

  • PHPの仕様はCGIの時代から地続き
    • PerlやRubyはApache mod時代やPost WSGI時代に断絶がある
    • PHPはpreforkなサーバ上でもCGI互換のシェアードナッシング
      (すべての状態が隔離され、リクエストごとに初期化される)
  • 汎用プログラミング言語の能力を持ちながら根幹がテンプレートエンジンに
    あるので、小規模からある程度大規模なアプリケーションにもフィットする

Page 58

Webの世界のトレンド

  • シェアを伸張する各言語
    • Node.js, SPA
    • パフォーマンスに優れた静的型付き言語
  • 相対的にPHPの存在感は薄れつつある
    • このままPHPは滅びるしかないのか…?

Page 59

PHPはどこでも65点がとれる言語

  • 「現代におけるプロダクト開発とPHPを選定するワケ #phpkansai」
    • By @potato4d (PHPカンファレンス関西2017)
  • 小難しいことを考えずに簡単にWebアプリを書ける(HTML+α)の言語
    • なんだかんだいってWEB+DB連携がさくっとできる言語ランタイムとして
      の存在感は健在
  • 求められているのは素晴らしい言語ではなく簡単に使える言語

Page 60

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