Upgrade to Pro — share decks privately, control downloads, hide ads and more …

PHP と TypeScript の型システム比較:AI 時代の「型」は誰のためにあるのか? ...

Avatar for shogogg shogogg
June 06, 2026

PHP と TypeScript の型システム比較:AI 時代の「型」は誰のためにあるのか? #frontend_phpcon_do / frontend_phpcon_do_2026

2026年6月6日に行われたフロントエンド・PHPカンファレンス北海道2026の登壇資料です

Avatar for shogogg

shogogg

June 06, 2026

More Decks by shogogg

Other Decks in Technology

Transcript

  1. About Me 河瀨 翔吾 / Shogo Kawase        エンジニアリングマネージャー PHP

      TypeScript   I LOVE... 妻 / 型安全 / アジャイル / ももいろクローバーZ 麻雀 / F1 / マリオカート / ACE COMBAT shogogg shogogg 2000年(PHP 4.x) 2012年(TypeScript 0.8)〜
  2. 静的型付け vs 動的型付け 静的型付け • すべての変数に型が割り当てられ、コンパイル時に決定 • 型エラーはコンパイル時に検出 • 異なる型の値は変数に代入できない

    • 例: Java, Go, Rust, C/C++, ... 動的型付け • 変数の型が固定されず、実行時に決定 • 型エラーは実行時に検出 • 異なる型の値を同じ変数に代入できる • 例: Perl, Ruby, Python, JavaScript, ...
  3. 強い型付け vs 弱い型付け 強い型付け • あらゆる場面において、厳密に型がチェックされる • 3 - '2'

    はエラーとなり、実行不可 • 例: Java, Go, Rust, Ruby, Python, ... 弱い型付け • 暗黙的な型変換 により、コンパイラやランタイムが「空気を読む」 • 3 - '2' の結果は 1 • 例: Perl, JavaScript, C/C++, ...
  4. 公称型 vs 構造的部分型 公称型 • 型の互換性は型の継承関係など、明示的な宣言に基づいて判断される • 例: Java, Rust,

    C/C++, ... 構造的部分型 • 型の互換性は型の構造やプロパティに基づいて判断される • 例: Go, Python(Protocol), Ruby(RBS), ... ダックタイピング • 呼び出したメソッドや、参照したプロパティが存在すればOK • 例: JavaScript, Perl, Python, Ruby, C++(Template)...
  5. 比較項目 PHP TypeScript 型付け 弱い動的型付け 強い静的型付け 検査タイミング 実行時 トランスパイル時 互換性モデル

    ダックタイピング + 公称型 構造的部分型 実行時の型情報 保持される 一部を除いて消失 PHP vs TypeScript「型」の違い
  6. PHP の「型」 ✅ 限定的な「強い型付け」 • 厳格モードの有効化により、引数や戻り値、プロパティを強い型付けとすることが可能 ✅ Null許容型・交差型・ユニオン型のサポート • Null

    許容型(PHP 7.0〜)や交差型(同8.0〜)、ユニオン型(同8.1〜)もサポート ✅ PHPStan 等による静的解析 • PHPStan 等の静的解析ツールを使えば、実行前に型エラーを検出できる ⚠ 表現力の限界 • 総称型(ジェネリクス)などが(まだ)サポートされていない
  7. TypeScript の「型」 ✅ 圧倒的な表現力 • リテラル型や総称型(ジェネリクス)をサポート • Conditional Type や

    Mapped Type により型を「計算」して生み出すことも可能 ✅ 強力な型推論 • 静的型付け言語の弱点であった「冗長なコード」を強力な型推論によって解決 ✅ 構造的部分型と Object • Object と構造的部分型の組み合わせが、軽量なデータ表現を実現 ⚠ 実行時の「割れ窓」 • トランスパイルによって JavaScript に変換されるため、実行時には型情報を持たない • any 型や as による型アサーションを使われると意図しないコードが実行されてしまう
  8. PHP vs TypeScript「型」の違い:まとめ どちらも十分な型システムを持つ • かつてはゆるふわLL言語の代表格だった PHP も、この10年で堅牢な型システムを獲得 • TypeScript

    は圧倒的な型の表現力で Web 開発を支えて続けている 型エラーのあるコードが「実行されにくい」PHP • 型エラーのあるコードが実行時エラーとなり、意図しないコードの実行を防ぐ • 静的解析ツールも普及し「動かさないとわからない」は過去の話に 型エラーのあるコードが「出荷されにくい」TypeScript • 型エラーのあるコードが静的に検出され、ビルドプロセスにおいてエラーとなる • 実行時には型情報が残らないため、意図しないコードが実行されてしまう場合も
  9. AI 時代の「型」は読み手のためにある 「人間」のため • AI がコードを生成する時代になり、人間がコードを書く量・時間は激減 • コードの生成速度向上に伴い、レビュー=読む量・時間が増えている 「AI」のため •

    AI もコードを読む機会は多く、型の明記が無駄な推論を減らす • もちろん AI がコードを生成する上での「ハーネス」としても型の明記は重要 「コンパイラ」のため • 型が明記されたコードは型推論のオーバーヘッドを減らし、コンパイル時間を短縮 • PHP の JIT が生成するネイティブコードの実行効率も向上
  10. これからの PHP 型システムの強化と関数型のエッセンス • PHP 7 以降、型システムはどんどん強化されており、今後もその傾向は続く見込み • パイプ演算子など、関数型のエッセンスも積極的に導入 「型推論がないこと」がメリットに

    • かつては「型を書かないといけない」ことが書き手にとって手間であり、弱点だった • 今後はむしろ「型を書かざるを得ない」ことが読み手にとってのメリットに 総称型(ジェネリクス)の実現(?) • 実は10年以上前からずっと議論されている • 今年に入って新たな RFC が提案されており、いよいよ実現の可能性が高い
  11. これからの TypeScript TypeScript の「型」は純粋なアノテーション(注釈)へ • TypeScript 7.0 で tsgo が標準化、--outFile

    が廃止 • Node.js / Deno / Bun などが TypeScript の直接実行を標準サポート • 型は「ビルド時の制約」から、実行時には消える純粋なアノテーション(注釈)へ 「型推論」との付き合い方の変化 • かつては型推論を駆使し、書き手の負荷を減らすことが正義であった • 今後は積極的に型を明示し、読み手の負荷を減らすことを重視するべき
  12. 「型」の価値が高い時代 • 型にうるさい言語とゆるい言語があり、時代によって主役は入れ替わってきた • 大規模化・複雑化・ AI化により、今後しばらくは型に厳格な言語の人気は続くだろう PHPとTypeScript、どちらも十分な型システムを持つ • かつてはゆるふわLL言語の代表格だった PHP

    も、この10年で堅牢な型システムを獲得 • TypeScript は圧倒的な型の表現力で Web 開発を支えて続けている AI 時代の「型」は読み手のためにある • 読み手とは人間・AI・コンパイラ • コード上で型を明示することの重要性が増している まとめ
  13. Appendix • PHP RFC: Generic Types and Functions 従来のジェネリクスの議論 •

    PHP RFC: Bound-Erased Generic Types 今年に入って提案されたジェネリクスに関する新しい RFC • Laravel Live Japan – Live from Tachikawa Stage Garden // Day 2 PHP Foundation の Roman Pronskiy 氏が今後の PHP について語っています • Announcing TypeScript 7.0 Beta TypeScript 7.0 のリリースに関する公式アナウンス • Claude Code に向いているプログラミング言語 Ruby コミッターによる言語ごとの「コードの生成効率」に関する記事