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