Plack

最終更新日時:2011-12-02 18:53:51
Perl

概要


Plack は、PSGI に則った実装の1つです。
Perlモジュールの他に、plackup のような PSGI 対応の Web サーバも含まれます。

PSGI(Perl Web Server Gateway Interface Specification) は、Web サーバと Web アプリケーション(フレームワーク)との間のインターフェイス仕様です。

Plack を利用することにより、アプリケーション作成側としては Web サーバの違いを気にする必要がなくなるので、効率的に開発することが出来るようになります。
また、このレイヤーはこれまではフレームワークの方で吸収していたので、フレームワークごとに Web サーバとのインターフェースの実装方法はマチマチでした。
この部分を PSGI という規格のもとに統一できるので、フレームワーク自体を作成しやすくなるというメリットがあります。

なお、きちんと調べていないのですが、Plack(もしくは PSGI)は、Perl のアプリケーションサーバに相当するデーモンを立ち上げることが前提となっているので、通常の Perl CGI と比較すると、プロセスの fork がない分高速です。


インストール


以下のようにCPAN からインストール可能です。

 % cpanm Plack



実装方法


Plack 自体の概念は非常にシンプルです。
「HTTP のリクエスト内容をハッシュのリファレンスとして受け取り、レスポンスは配列のリファレンスとして返す」というサブルーチンのリファレンスを返す形式となります。
日本語で書くとややこしいですが、実際には以下のように至ってシンプルです。

 my $app = sub {
     my $env = shift;
     return ( [ 200, 
                ['Content-Type' => 'text/html'],
                ['Hello World!', 'Bye' ]
              ]
            );
 };


レスポンスの配列の内容は、

・HTTPのリターンコード
・HTTPヘッダの配列のリファレンス
・コンテンツ内容のリファレンス

となります。


実行方法


Plack には plackup という PSGI 対応の Web サーバが付属されており、これを使うことで簡単に Web サービスが作成できます。
本サービス前の開発環境等では非常にお手軽に用意できるので重宝します。

Plack を用いて作成した(PSGI に則った)コードを xxx.psgi とすると、以下のようにして Web サービスとして実行できます。

 % plackup xxx.psgi


デフォルトでは 5000 番ポートを使用して Web サービスが起動されます。


その他補足等


Plack 自体はあくまでも Web サーバとフレームワークの間を取り持つシンプルな機能しかありませんが、様々なプラグインがあるようです。
また、PSGI に対応していさえすれば、Web サーバはなんでもOKですので、全体の構成としては様々な選択肢が取れることになります。
この辺り、まだまだ分からないことだらけなので、随時情報を入手していく予定です(/_\*)

お問い合わせは 掲示板 にて。