Skip to content

俺のPHPが合戦で 負けるわけがない

公開日:

神奈川県小田原市栄町おだわら市民交流センター UMECO 会議室1〜3で開催された『紅白ぺぱ合戦』でライトニングトーク(5分)として発表しました。

Download PDF

スライドテキスト

Page 1

俺のPHPが合戦で

負けるわけがない

There's No Way My PHP Could Lose in a Battle

pixiv Inc.

USAMI Kenta

2024-11-30

1

紅白ぺぱ合戦

Page 2

お前誰よ

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

Page 3

Page 4

ぺとぱで戦えと言われた……

Page 5

Perlは魂の故郷

Page 6

tadsanは動的言語が大好き

Page 7

なぜtadsanはPHPを書いているのか

Page 8

YAPCで就職したから(本当)

Page 9

こないだもこういう話をした

Page 10

僕がPHP界隈で偉そうに話してるネタはYAPCとかビルコンの二番煎じだ!(本当)

Page 11

大切なことはYAPCで教わった

Page 12

tadsanとPHPはビジネスの関係

Page 13

プロフィールにも書いてる

Page 14

PHPについてのパブリックイメージ

脆弱性 ゆるふわ 弱い型 動的クソザコ 型なし 意味不明 弱い自動変換 貧弱 Perlっぽい 適当

Page 15

PHPについての認識は概ね間違い

脆弱性 ゆるふわ 弱い型 動的クソザコ 型なし 意味不明 弱い自動変換 貧弱 Perlっぽい 適当

Page 16

そんなわけで

Page 17

お前をPHPerにしてやろうか

Page 18

PHPとPerlの関係

Page 19

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

Page 20

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

Page 21

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

Page 22

PHPは見る人の心を映す

Page 23

Perlが捨てたCGIの末裔

Page 24

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

  • PHPの仕様はCGIの時代から地続き
  • PerlやRubyはApache mod時代やPost WSGI時代に断絶がある
  • PHPはpreforkなサーバ上でもCGI互換のシェアードナッシング

(すべての状態が隔離され、リクエストごとに初期化される)

  • 汎用プログラミング言語の能力を持ちながら根幹がテンプレートエンジンに

あるので、小規模からある程度大規模なアプリケーションにもフィットする

Page 25

そういうことは結構どうでもいい

Page 26

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

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

の存在感は健在

  • 求められているのは素晴らしい言語ではなく簡単に使える言語

Page 27

Perl以上に雑に使える初心者向けWeb言語

Page 28

それでいいのか?

Page 29

俺のPHPがこんなに

静的なわけがない

There's No Way My PHP is so static

pixiv Inc.

USAMI Kenta

2024-11-30

紅白ぺぱ合戦

Page 30

PHPは静的型付き言語

Page 31

Statically typed?

Page 32

int n = 1;int m = n + 2;printf("%d\n");

Page 33

こんな当たり前の型をちんたら書いてられないと思った人たちが作った言語がPerl(という認識)

int n = 1;

int m = n + 2;

printf("%d\n");

Page 34

時代は型推論

Page 35

Page 36

型なんて人間が書かなくてもコードを解析すれば一意に定まるじゃん、ワロス

Page 37

PHPでも型宣言?とかできますけど…

Page 38

/*** @param int $a* @param int $b* @return int|float*/function add($a, $b) {return $a + $b;}

Page 39

DocCommentとかいう机上の空論

/*** @param int $a* @param int $b* @return int|float*/function add($a, $b) {return $a + $b;}

Page 40

DocCommentとかいう机上の空論

コーディング時のヒントとして役に立つ…かもしれない

/*** @param int $a* @param int $b* @return int|float*/function add($a, $b) {return $a + $b;}

Page 41

function add(int $a, int $b): int|float{return $a + $b;}

Page 42

intしか渡されないことは実行時に保証される

function add(int $a, int $b): int|float{return $a + $b;}

Page 43

intしか渡されないことは実行時に保証される

function add(int $a, int $b): int|float

{

return $a + $b;

}

型宣言に反する値が返されたら実行時エラー

Page 44

そうだけどそれだけじゃないんだ

Page 45

Page 46

Page 47

Page 48

可能な限り定数型が保存される!(TSでは1, number)

Page 49

Page 50

Page 51

可能な限り定数型が保存される!(TSではstring)

Page 52

Page 53

Page 54

分岐などのフローも解析して型を絞り込んでくれる!!

Page 55

その辺の静的言語とは別の方向に尖りつつあるPHPにご期待ください