Page 1
なぜPHPに型がつくのか
All Your PHP Code Are Typed by Us
pixiv Inc.
USAMI Kenta
2025-12-13 #TechGyoza
小山市立 生涯学習センター ギャラリー
公開日:
by USAMI Kenta@tadsan
に栃木県小山市の小山市立 生涯学習センター ギャラリーで開催された『TechGYOZA 2025』でライトニングトーク(5分)として発表しました。
なぜPHPに型がつくのか
All Your PHP Code Are Typed by Us
pixiv Inc.
USAMI Kenta
2025-12-13 #TechGyoza
小山市立 生涯学習センター ギャラリー
お前誰よ
PHPcon新潟
PHPcon新潟
PHPcon広島
TechRAMEN
PHPcon新潟
PHPcon広島
趣味はプログラミング言語
特に動的言語/スクリプト言語が好き
動的言語には無限の可能性()があります
さて
近年の流れ
2000年代は動的言語が大活躍した時代
重厚なIDE…
長大なコンパイル時間…
スクリプト言語はシンプルなエディタで簡単に書ける!
2000年前後
CGIで簡単にWebアプリが書ける
2010年前後
Railsで高機能なものが簡単に書ける
アプリケーションが大規模に「育つ」と収拾がつかなくなってくる
メソッドの実装をわざわざ探してコードを読まなければ引数の種類すらわからん
……
202x年
世界は型の炎に包まれた!
JavaScript
↓
JavaScript
↓
TypeScript
Python
↓
Python
↓
typing module
Ruby
↓
Ruby
↓
Inline RBS
海は枯れ、地は裂け、 全ての型なしが死滅したかのように見えた
だが、PHPは死滅していなかった!
世紀末救世主伝説
<?php
誰でも簡単にホームページが作れるゆるふわ言語
PHPについてのパブリックイメージ
脆弱性 ゆるふわ 弱い型 動的
クソザコ 型なし 意味不明 弱い 自動変換 貧弱 Perlっぽい 適当
PHPについての認識は概ね間違い
脆弱性 ゆるふわ 弱い型 動的
クソザコ 型なし 意味不明 弱い 自動変換 貧弱 Perlっぽい 適当
認識を揃えて おきましょう
動的言語/スクリプト言語
言語としてのPHP
動的言語でも
型を書くことが
広まってきた
ドキュメント
としての型
function add($a, $b) {
return $a + $b;
}
/**
* @param int $a * @param int $b
* @return int|(cid:210)oat
*/
function add($a, $b) {
return $a + $b;
}
宣言の構文内にも
型を書けるようになった
function add(int $a, int $b): int|(cid:210)oat
{
return $a + $b;
}
関数に入出力の
型を書いておくことで
影響を想像しやすく
ここまでは人間が
型を付ける(書く)話
/**
* @param int $a * @param int $b
* @return int|(cid:210)oat
*/
function add($a, $b) {
return $a + $b;
}
DocCommentとかいう
/**
机上の空論
* @param int $a * @param int $b
* @return int|(cid:210)oat
*/
function add($a, $b) {
return $a + $b;
}
DocCommentとかいう
/**
机上の空論
* @param int $a * @param int $b
* @return int|(cid:210)oat
*/
function add($a, $b) {
コーディング時の
ヒントとして役に立つ…
return $a + $b;
かもしれない
}
function add(int $a, int $b): int|(cid:210)oat
{
return $a + $b;
}
intしか渡されないことは
実行時に保証される
function add(int $a, int $b): int|(cid:210)oat
{
return $a + $b;
}
intしか渡されないことは
実行時に保証される
function add(int $a, int $b): int|(cid:210)oat
{
return $a + $b;
}
型宣言に反する値が
返されたら実行時エラー
実際には型宣言を
もとに型を再構築する
PHP
$a = 1;
$b = 2;
$c = $a + $b;
C言語
int a = 1;
int b = 2;
int c = a + b;
PHPでは処理系の外で静的型チェッカーの文明が広がった
型チェッカー
int(1)
$a = 1; $b = 2;
$c = $a + $b;
型チェッカー
int(1)
int(2)
$a = 1; $b = 2;
$c = $a + $b;
型チェッカー
int(1)
int(2)
$a = 1; $b = 2;
int(3)
$c = $a + $b;
型チェッカー
$a = ‘foo’;
$b = rand() === 1 ? ‘foo’ : ‘bar’;
$c = $a + $b;
型チェッカー
'foo'
$a = ‘foo’;
$b = rand() === 1 ? ‘foo’ : ‘bar’;
$c = $a + $b;
型チェッカー
'foo'
'foo'
$a = ‘foo’;
$b = rand() === 1 ? ‘foo’ : ‘bar’;
$c = $a + $b;
型チェッカー
'foo'
'foo' 'bar'
$a = ‘foo’;
$b = rand() === 1 ? ‘foo’ : ‘bar’;
$c = $a + $b;
型チェッカー
'foo'
'foo' 'bar'
$a = ‘foo’;
$b = rand() === 1 ? ‘foo’ : ‘bar’;
$c = $a + $b;
型チェッカー
'foo'
'foo' 'bar'
$a = ‘foo’;
$b = rand() === 1 ? ‘foo’ : ‘bar’;
$c = $a + $b;
'foo'|'bar'
型チェッカー
'foo'
'foo' 'bar'
$a = ‘foo’;
$b = rand() === 1 ? ‘foo’ : ‘bar’;
$c = $a + $b;
'foo'|'bar'
'foofoo'|'foobar'
いろんなところから湧き出す型の特定できないデータ
arrayは無限の可能性を秘める(悪い意味で)
扱う対象が複数になったのに型に反映されない
PHPの組み込みの型機能ではどんなに型推論しても静的に型が定まらない
無限の可能性を秘めたarrayを放置するとコード全体のエントロピーが増大しプロジェクトは熱的死を迎える
TypeScriptにとっての型
PHPにとっての型
動的言語と型
そんなに動的言語を書きたいか
書きたい!
静的型付きと動的の '
良いとこどりができる ゆるふわ言語PHPに
これからもご期待ください
関連リンクがありません。
