Page 1
やわPHP カタPHP
Al Dente PHP: Finding the Perfect Resilience
pixiv Inc.
USAMI Kenta
2026-05-09 #phpconkagawa
香川県高松市 玉藻公園内 披雲閣
公開日:
by USAMI Kenta@tadsan
に香川県高松市の玉藻公園内 披雲閣で開催された『PHPカンファレンス香川2026』でレギュラーセッション(30分)として発表しました。
やわPHP カタPHP
Al Dente PHP: Finding the Perfect Resilience
pixiv Inc.
USAMI Kenta
2026-05-09 #phpconkagawa
香川県高松市 玉藻公園内 披雲閣
お前誰よ
PHP界隈で型の話を
始めて10年くらい
レガシープロジェクトの
ウィークポイントは
圧倒的な「未定義挙動」
型… ドキュメント…
設計意図…
あらゆる情報が足りない
せめて型を固めておけば
静的型付き言語に
移植
しやすくなるのでは…?
そろそろ現実が見えてきた
🗓🫠
今回のお題
型で消耗しないように
今回は具体的な
tipsより
考えの話がメイン
…………
202x年
世界は生成AIの炎に
包まれた!
あらゆるコードが生成され
テストは自動化され
すべてのコーディングが
駆逐されたかに見えた
だがプログラマは
死滅していなかった!
世紀末救世主伝説
<?php
……
ほんとうに?
もう墓穴に足をつっこんでる
自覚がないだけでは?
🪦
PHPStan Lv.maxで
消耗してませんか?
生成AIによる開発は
1年前とは信じられない
ほど前進した
2025年2月
大規模言語モデル
生成AI万歳!
業務時間中ほとんど
コードを書いていない
という話も珍しくない
人間が書かないなら
別に良い言語が あるのでは…?
かっこいい言語には
枚挙に暇がない
世界には良い言語はいっぱいある
Rust…
C#…
PowerShell…
JavaScript…
Common Lisp…
Java…
Ruby…
F#…
TypeScript…
Python…
Haskell…
Go…
Swift…
Kotlin…
Java…
Smalltalk…
Clojure…
Scheme…
今後使うべき
プログラミング言語
#とは
言語選択の 重要な要素
実行速度が速い?
簡単に書ける?
いままでは採用が
開発のボトルネック
○○言語を書ける
人が採用市場にいない
PHPを書ける人は 割とあちこちに居る
書けるがキャリアアップの ためにPHP案件を好んで 請ける人が減ってる…?
AIエージェントの力を
借りれば別に詳しくなくても
メンテできる時代に
なってしまった…
2025年2月
mametterさんの実験
mametterさんの結果考察
厳密な計測はできてないが
PHP/PHPStanも
似た傾向を示している
型は全部捨てろ!
PHPStanやめろ!
これが21世紀の
AIファースト開発
😇
完
……
これでよかったの
だろうか…
そもそもPHPは
どんな場面で
使われてきたのか
私見
重厚長大な
コンパイル言語
IDEのアンチテーゼ
LL言語を使えば
シンプルなエディタで
サクサク書けるよ!
Perl Python
Ruby PHP
型宣言?
そんな機能ないよ?
型なんて変数名見れば
わかるだろ…
常識的に考えて
スクリプト言語!
アジャイル!
そういう時代も
ありました
現実は甘くない…
2006年のPHP特集誌
正直つっこみどころ
だらけだが…
われわれは20年後の
技術を使いこなす
チート未来人である
この記事が
示唆するものは多い
欲しかったのは
ガードレール
「ありえない」状態を
食い止めるのが
ガードレール
動的解析
実行してみて
エラーが出ないか
静的解析
コードを分析して
怪しいところがないか
ユニットテスト
vs
型チェック
「ありえない」状態を
どちらかで食い止めたい
「ありえない」状態は
すみやかにしばく
過去の定説
型なし言語は
静的検査と相性が悪い
型がついている
#とは
型推論規則に従って
すべての項に矛盾なく
型が割り当てられた状態
…ですが何か?
型チェッカー
int
int
$a = 3; $b = 2;
$c = pow($a, $b);
引数ok
引数ok
int
PHP処理系はそういう チェックをしないので
「型なし」と呼ばれる
型チェックをしたとしても 実用的な推論結果にならない
mixed
型チェッカー
string欲しいんだけど…
$json = $_POST['json'];
$a = json_decode($json);
var_dump($a[‘name']);
このキーあるの…?
?array|int|float|string|bool
つまり
そのため動的言語では
テストの重要性が
高かった
だが… 今は違う!
ギュッ
TypeScript
PHPStan
単なる
「型書けるようにした版」
ではない
型理論
計算機科学の結晶
型は「ありうる」
状態を記述する言語
適切に推論できれば
テストを書くまでもなく 変なコードが炙りだせる
むかしのことを
思い出してみよう
型なんて変数名見れば
わかるだろ…
常識的に考えて
ちっちゃいスクリプト /書き捨てのコードを
書く分には
型なんていらなかった
型はコードの規模が
長大になると効く
「型なんていらない」の
サイズの閾値が
大きく変わってしまった
コード生成ベンチマークは
仕様と受け入れテストが 最初からゴールまで明確
型なしRubyの
生成コストが低いのは
非常に理にかなっている
生成する段階では
型はいらないというのは
非常に理にかなってる
最近ふわっと考えてる仮説
生成されたコードに ガードレールとして
追加で型を敷設する方が
効率がいい?
さらなる仮説
コード上に書く型は
型宣言だけに留めた方が
トークン効率が 良いのでは…?
このあたりの話題は
もうちょっと探究したい ので、そのうちどこかで
ともあれ
普通にコードを書けば 自然に型がついている
状況が理想
さて
大規模言語モデル
得意不得意が
はっきりしている
決定論的な処理は
苦手だし
圧倒的に非効率
決定論的
=
入力に対して答えが
定められる問題
計算はAIに直接
返答させるのではなく コード生成させて実行
生成AIにスペースや
改行位置を細かく指示 するのは圧倒的非効率
フォーマッターを実行して
常に同じスタイルに
整形されるようにする
非決定的な問題を
決定的な土俵に持ち込む
型推論規則に従って
すべての項に矛盾なく
型が割り当てられた状態
…ですが何か?
型推論は典型的な
決定論的な計算
型のことは
型チェッカーに
やらせる
静的解析ツール いろいろある
拡張を書きましょう
型推論ロジックを記述できる
複雑な型を
書きまくるのが 型付けではない
PHPStanは
普通にコードを書いて
警告が増加しない
レベルが適正
そこからレベルを
上げるには
拡張で解決したい
お使いのAIさんと
相談しながらサクっと
作れる時代になった
やるなら今
LLMにとって
プログラミング言語と
人間の言語は同列
流暢なコードは
効率よく処理しやすい
コードに@varを
書いてる場合ではない
理想的な変数名は
名前から内容が
自然に想像できて
期待に反しない
コードは少ないほど
見通しがよくなる
見通しがよいコードほど 人間もAIも理解しやすい
ややこしい構造や 紛らわしい名前は
人間もAIも混乱する
リーダブルコードが輝く時代
蘇鉄の間
桐の間
