Skip to content

Perlの幻影に育てられてきた俺たちは

公開日:

に東京都港区六本木の株式会社メルカリで開催された『YAPC::Tokyo 2026 キックオフ!』でライトニングトーク(5分)として発表しました。

Download PDFPDF

スライドテキスト

Page 1

Perlの幻影に育てられてきた

俺たちは

Raised by the Phantom of Perl

pixiv Inc.

USAMI Kenta

2026-10-01 #yapcjapan YAPC::Tokyo 2026 キックオフ!

Page 2

お前誰よ

  • うさみけんた (@tadsan) / Zonu.EXE / にゃんだーすわん
  • ピクシブ株式会社 Platform Div > WebTechnology Team PHPer
  • 2012年末から現職、APIとかCIとかいろいろなところを見つめてきました
  • 最近チームが再編されてインフラっぽい仕事もしてます
  • Emacs PHP Modeを開発しています (2017年-)
  • プログラミング言語にちょっとこだわりのある素人 (spcamp2010)

Page 3

PHPとかEmacs Lispをやらせていただいてます

Page 4

Page 5

YAPC::Asia Tokyo

2012-2015 YAPC::Hokkaido 2016 SAPPORO builderscon 2017-

Page 6

Page 7

Page 8

Page 9

わたしとパール

Page 10

時は2003年くらい

Page 11

HTML/Web標準に興味がある学生

Page 12

人生で初めて買った技術書

Page 13

Page 14

これはCSSの本だと誤解してもおかしくないのでは…?

Page 15

ど素人すぎる

Page 16

よくわからんがKENT WEBは便利

Page 17

SNSがない時代俺たちはレンサバに掲示板を設置して交流を図っていた

Page 18

たぶん現代でそれが可能なのはほぼPHP

Page 19

Perlに強い影響を受けて設計された言語を使い続けてきた

Page 20

Perlの間接的なユーザーの立場で見守ってきた

Page 21

それぞれの言語がPerlから継いだ要素が三者三様すぎる

Page 22

なぜPerlが重宝されたのか

Page 23

Perlのキラーコンテンツ

Page 24

CGI

Page 25

Common Gateway Interface

  • HTTPサーバーがリクエストを受ける度にプロセスを起動する
  • リクエストヘッダが環境変数に、リクエストボディがstdinに入力される
  • プログラムがstdoutに出力したものがヘッダ・ボディになる
  • 標準入出力と環境変数さえ読み書きできれば言語はなんでもいい
  • 現代でもAWKとかBashとかでCGIを書く人がいたりする

Page 26

C言語でWeb開発したくない

Page 27

Webは本質的に入出力テキスト処理

Page 28

単純な好みだけでなくCでメモリ安全な文字列処理は難しい

Page 29

Perlはもともとテキスト処理に向いていた

Page 30

リクエストごとにプロセスを起動するのでパフォーマンスの問題(時間/メモリ/C10K)

Page 31

CGIスクリプティング言語としてのPerlを先鋭化させたのがPHP

Page 32

CGI言語としてのPerl/PHP

  • CGI処理に求められているのは本質的にはHTTPヘッダとボディ出力
  • Perl: cgi-lib.pl や CGI.pm などのライブラリでの「出力サポート」
  • 気をつけて使わないとHTTPヘッダが壊れる
  • PHP: HTTP出力そのものが言語コアに統合されている
  • 言語ランタイムがHTTPメッセージの入出力を担保してくれる
  • CGIではない環境でもCGIスタイルのスクリプトが基本

Page 33

レンタルサーバにファイル転送するだけでデプロイ完了(CGI Perl, PHP)

Page 34

Web言語としてのインターフェイス

  • CGIはリクエストごとにプロセスをフォークするのでパフォーマンスが出ない
  • リクエストごとに状態がすべてリセット、グローバル変数などは問題がない
  • 90年代のアプローチ: Apacheモジュールとして組み込む
  • mod_perl, mod_ruby: デフォルトでは同じプロセスで動き続ける
  • mod_php: リクエストごとに状態が破棄されるCGI互換モードがデフォルト

Page 35

プロセス内サーバインターフェイス

  • CGIのようなstdin/stdoutではなく、同じ言語の関数レベルの仕様
  • 2003年 WSGI (Python) | 2007年 Rack (Ruby)
  • 2009年 PSGI / Plack (Perl) @YAPC::Asia 2009 miyagawa
  • CGI世代の「スクリプト」と「フレームワーク/アプリケーション」の分水嶺
  • 分離するとユニットテストが書きやすくなるなどのメリットは大きい
  • PHPにも共通インターフェイスはあるが、必須ではなく断絶を経験しない

Page 36

言語としてのPHP表面的に似ているのは$ と ; くらい

Page 37

Perlが普及させたもの

Page 38

Hash正規表現cpan (リポジトリ)

Page 39

意外とPerlの前からある気がする…?

Page 40

ハッシュ (連想配列)

  • ハッシュテーブルというデータ構造はPerl以前からあった
  • 連想配列(っぽいもの)を実現するデータ構造はハッシュ以外にもあった
  • Lisp系は連結リストベースの連想リスト・プロパティリストというものがある
  • ライブラリやユーザー定義のデータ構造として流行らせたのはPerlでは…?
  • 現代ではJSON(object)を経て、どんな言語でも扱えることが普通

Page 41

正規表現

  • 正規表現はPOSIX基本正規表現、POSIX拡張正規表現がある…が、Perl正規表現はPOSIX系と互換性がない?
  • 記号の意味が大きく違うというわけではないが、\ エスケープが反転
  • 現在普及している多くの『正規表現』は多かれ少なかれPerl風
  • Perlの全機能が網羅されているものはないが、しばしば実用される範囲での互換性はあると思う / PCREはPerl完全互換ではない

Page 42

CPAN (Comprehensive Perl Archive Network)

  • Perlで書いたライブラリを共有する仕組み
  • ざっくりRubyGems, NPM, PyPI, crates.ioなどに繋がるもの
  • READMEに書くべき内容やテストの標準化など今も尊ばれるべきもの
  • Perl界隈でCPANオーサーがリスペクトされる文化が大好き

Page 43

先行するテキスト処理言語

Page 44

sed, awk, shellからPerlが受けた影響

Page 45

Perlと同世代の言語との比較

Page 46

Perl vsオブジェクト指向

Page 47

GuidoはPerl 5の何を嫌ったのか

Page 48

Perl 6は結局なんだったのか

Page 49

どこかで話したい!!

(20分でも明らかに足りない)

Page 50

採択されませんでした

Page 51

ご静聴ありがとうございました