PerlでWebAppの開発に必要なN個のこと

あるプログラミング言語で実際にWebAppを開発できるようになるまで、何が必要だろうか。言語仕様の習得は終えているとしよう。おそらく、最低限以下のような知識が必要だと思われる。とりあえずPerlについて知っていることを書いた。

パッケージマネージャ

まずライブラリの管理。モジュールをインストールし、可能であればバージョンを固定し、適切にロードする機能が必要だ。Perlの場合は cpanm というCPANクライアントでライブラリをインストールする。バージョンの固定とライブラリパスの設定は carton で行う。

アプリケーションサーバ

Webサーバへのインターフェイスとしては、PSGIという仕様がある。PSGIに準拠したツールキットとしてPlackがあり、開発はPlack付属のサーバで行う。本番環境ではprefork serverのStarletを使っておけば間違いはない。PSGIベースで開発していると多彩なミドルウェアも使えるので、たとえCGIで運用するとしてもPSGIベースにしておくと開発が捗るだろう。

リクエストパラメータの処理

Perlでは昔からCGI.pmが使われていたが、もはや使うこともないだろう。Plackを使って開発するなら同梱されているPlack::Requestがあれば事足りる。

ルーティング

サーバにきたリクエストを適切なコントローラに振り分ける機能だ。これはRouter::Simpleを使えばいい。ルーティング機能はWAFに組み込みのこともある。

データベース

Perlでは昔からDBIというRDBMSへのインターフェイスが使われる。DBIはある程度抽象化されているのでそのまま使うこともあるし、ORM経由で使うこともある。ORMはTengやDBIx::Classが使われる。前者は軽量で後者は重厚だ。日本ではTengが好まれているようである。具体的なDBに接続するためにはDBD::mysqlやDBD::SQLiteなどのデータベースドライバを別途インストールする。

ビューのレンダリング

HTMLの場合はXslateが、JSONの場合はJSON::XSが使われる。

HTTPクライアント

多機能なLWPか、高速なFurlか。WebAppで使うならFurlで事足りる。SSLを使いたければLWPにせよFurlにせよオプショナルである。前者であればLWP::Protocol::https、後者はIO::Socket::SSLを別途インストールすること。

テストフレームワーク

Perlの標準モジュールであるTest::Moreが最もよく使われる。テストスクリプトの実行はproveで行う。

WAF

特に決定版はないが、上記のモジュールの組み合わせである軽量WAFのAmon2がいいか。Xslate, Router::Simple, Plack::RequestはAmon2も利用している。

フルスタックのWAFにであればMVCコンポーネントからHTTPクライアントまで全て入りのMojoliciousも好まれており、その場合上に挙げたモジュールの多くは必要なくなる。

以上。他にもあれば指摘してほしい。