Perlは「インターネットのグルー(糊:のり)言語」とも言われ、CGIによる開発がメインだった1990年代から、Webアプリケーション開発に最も関わりのあるプログラミング言語の一つと言ってよいでしょう。2000年代に入っても、Ruby on RailsやPHPなどの他言語からの影響も取り入れながら、Web開発との親和性は依然として高いままです。YAPC::Asiaといったカンファレンスなどでも、Webに関するトラックが数多く見受けられます。
人気のあるPerl Webアプリケーションフレームワークとしては、古くはCGI::Applicationや筆者も開発に関わったSledgeから、Railsブームなどの影響を受けた大規模フレームワークとしてCatalystやJiftyなどが挙げられます。どのフレームワークにもそれぞれ特長やポリシーがあり、どれか1つだけが進化してほかのフレームワークは淘汰されるべき、とは筆者は思いません。Perlのモットーでもある「やり方は一つでない」(There's More Than One Way To Do It)が実現され、いくつも選択肢がある状況が望ましいでしょう。
筆者がPerlプログラミングやWebアプリケーション全般のデザインで悩んだとき、「PythonやRubyではどうしているだろう?」と考え、実装や仕様を見てみることにしています。こうしたWebフレームワークとサーバの分離については、PythonやRubyもフレームワークが乱立して同様の問題を抱えていましたが、PythonではWSGI(Web Server Gateway Interface)、Rubyではそれに影響されたRackというWebフレームワークとWebサーバをつなぐ共通インタフェースを定義することで、多くのフレームワークがコードを重複させることなく、Webサーバ環境に対応することができています。実際に、PythonのDjango、web.py、CherryPy、RubyのRails、Merb、SinatraなどのフレームワークがWSGIやRackに対応しています。
PSGI──Perl版共通インタフェース仕様
これをそのままPerlに持ってこよう、と筆者が始めたのがPSGIです。HTTP::EngineやCatlaystの開発者たちとIRC(Internet Relay Chat)上でブレインストーミングを重ね、2009年10月に1.0の仕様をリリースしました。PSGIはPerl Web Server Gateway Interfaceの略で、もちろんWSGIやRackからインスパイアされたインタフェースとなっています。