Skip to content

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

公開日:

Download PDF

スライドテキスト

Page 1

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

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

pixiv Inc.
USAMI Kenta

2024-11-30

紅白ぺぱ合戦

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|fioat
*/
function add($a, $b) {
return $a + $b;
}

Page 39

DocCommentとかいう

/**

机上の空論

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

Page 40

DocCommentとかいう

/**

机上の空論

* @param int $a * @param int $b
* @return int|fioat
*/
function add($a, $b) {

コーディング時の
ヒントとして役に立つ…

return $a + $b;

かもしれない

}

Page 41

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

Page 42

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

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

Page 43

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

function add(int $a, int $b): int|fioat
{
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にご期待ください