PSGI(Perl Web Server Gateway Interface)とは
PSGIは、
PerlでWebアプリケーションを開発する際に、Webサーバーとアプリケーション間のインターフェースを標準化するための仕様です。この規格により、開発者はWebサーバーの種類や実行環境の違いを気にすることなく、一貫した方法で
Perl製のWebアプリケーションを構築できます。
背景と動機
Perlは古くからWeb開発に用いられており、CGI、FastCGI、mod_perlなど様々な実行環境が存在しました。初期のCGIはシンプルであるものの、リクエストごとにプロセスを起動するためサーバーへの負荷が高く、レスポンスに時間がかかるという欠点がありました。FastCGIやmod_perlといった技術は、プロセスを起動したままにしておくことでパフォーマンスを改善しましたが、これらの環境ごとにインターフェースが異なり、Webアプリケーションフレームワークはそれぞれの違いを吸収するためのコードを実装する必要がありました。
このような状況を改善するために、
PythonのWSGIや
RubyのRackを参考に、PSGIが策定されました。PSGIは、WebアプリケーションとWebサーバー間の通信を抽象化し、特定の実行環境に依存しない開発を可能にしました。
PSGIの仕組みとPlack
PSGIの仕様は、WebアプリケーションとWebサーバー間のインターフェースを定義するだけです。具体的な実装は、Plackというリファレンス実装が担います。PlackはCPANから入手可能で、PSGIアプリケーションを実行するためのサーバーとして機能します。
PSGIを採用することで、開発者は個々のWebサーバーや実行環境の違いを意識せず、アプリケーションのロジックに集中できます。2010年現在、多くの
Perl製WebアプリケーションフレームワークがPSGIに対応しており、
PerlのWeb開発において不可欠な存在となっています。
PSGIアプリケーションの例
以下は、最もシンプルなPSGIアプリケーションの例です。
perl
my $app = sub {
my $env = shift;
return [ '200', [ 'Content-Type' => 'text/plain' ], [ 'Hello, PSGI!' ] ];
};
このコードは、リクエストに対して「Hello, PSGI!」というテキストを返すだけの簡単なアプリケーションです。このコードを`hello.psgi`として保存し、Plackを使って実行するには、コマンドラインで`plackup hello.psgi`と入力します。
PSGIに対応している主なWebフレームワーク
PSGIは、多くの
Perl製Webフレームワークに採用されています。以下は、その一部です。
Catalyst
Jifty
CGI::Application
HTTP::Engine
Dancer
Mason
Squatting
Continuity
Maypole
Tatsumaki
Mojolicious
実行環境
PSGIアプリケーションは、さまざまな実行環境で動作します。具体的な環境は、オペレーティングシステムや使用するWebサーバーによって異なりますが、以下のようなものが挙げられます。
Apache
CGI
FastCGI
SpeedyCGI
mod_perl
uWSGI
lighttpd
CGI
FastCGI
Nginx
uWSGI
FastCGI
Windows
IIS
CGI
ISAPI
Apache
CGI
FastCGI
SpeedyCGI
mod_perl
ISAPI
AN HTTPD
CGI
*
ISAPI
これらの実行環境でPSGIアプリケーションを動作させるには、Plackや、それぞれの実行環境に合わせたPSGI対応のサーバーを使用します。
まとめ
PSGIは
PerlにおけるWebアプリケーション開発の標準インターフェースであり、Webサーバーとアプリケーションを疎結合にすることで、開発者はより柔軟かつ効率的にWebアプリケーションを開発できるようになりました。Plackの存在も相まって、
PerlでのWeb開発は大きく進化しました。