Kent WebのASKA BBSをMojoliciousを使った実装に移植しました。
Kent WebのASKA BBSをMojoliciousを使った実装に移植しました。
もともとのASKA BBSのページとサンプルはこちらです。
プログラムの利用規定です。Kent Webのものを引き継いでいます。
移植版のASKA BBSは以下のような特徴があります。
特徴
特徴は以下のようになっています。
- WebフレームワークMojoliciousを使った掲示板の実装
- cpanmが内部的には利用され、ワンコマンドで、セットアップが完了
- Perl 5.10.1以上であることだけが要件。
- CGIと組み込みのWebサーバーで実行が可能。たとえば、さくらのレンタルサーバー・スタンダードで動かすことができます。
内部実装の具体的な改善は以下のとおりです。
- WebフレームワークとしてMojoliciousを利用。
- HTTPリクエスの解析、パラーメータの受け取り、クッキーの取得処理
- URLのルーティングの改善、テンプレートの記述を改善、ヘッダ、フッタを部品に
- グローバルなファイルハンドルは利用せずに、レキシカル変数を使用
- 必要モジュールのインストールのシステムとしてcpanmを使用
- Emailの送信にMIME::Liteを使用して簡潔にした
- ページ送りの処理にData::PageとData::Page::Navigationを利用して簡潔にした。
- 文字コードのエンコードにはEncodeモジュールを使用。JCodeの使用をなくした。
- データ保存のときのエンコード処理のロジックを共通化して改善
- CGIに加えて組み込みWebサーバーで起動ができるので、非常に高速でスケーラビリティがある。
- 開発サーバーが利用できるので、開発が非常に楽になった。
目的
このプロジェクトの目的は、古きよきPerl/CGIを、現代的な記述で、記述しなおすことです。レンタルサーバーで、簡単に動かすことができる完成されたWebアプリケーションを、現代的な記述することです。
ひとつのサンプルを示すことによって、それをお手本にして書き直すことで、現代的なPerlの記述を覚えることができます。古きよきPerlの記述と比較することで、どのような部分が、簡潔で改善されたのかを理解することができるでしょう。
改善点の詳細
このプロジェクトにおけるいくつかの改善点を、もう少し説明しておきます。
スケーラビリティ
まずCGIの最大の問題点として、スケーラビリティがないことがあげられます。CGIは、毎回プロセスを起動するので、ある程度のアクセス数が増えてきたところで、パフォーマンスがネックになってきます。
Mojoliciousを使った、今回の実装においては、CGIで利用できますが、パフォーマンスネックがもし現れてきたならば、組み込みサーバーやPlack/PSGI対応サーバーを使って、スケールアップすることができます。
これは、PHPの利点によくにています。まず最初は、PHP/CGIで設置するのですが、もしパフォーマンスネックがあらわれるならば、mod_phpを使って、動かせばスケールアップすることができます。
CGIの欠点は、そう簡単には、スケープアップできないのですが、今回改良されたCGIにおいては、スケープアップを行うことができます。
CPANの利用
CPANはPerlとはきっても切り離せない存在です。Perlのライブラリの宝庫であるCPANという存在を利用できることが、Perlの大きな利点のひとつです。
CGIアプリケーションにおいても、CPANを簡単に利用できたら、どんなにうれしいことでしょう。
現代的なPerlにおいては、cpanmというツールとcpanfileという設定ファイルを利用することで、CPANにあるモジュールを簡単に利用することができるのです。
cpanfileの中には、モジュールの一覧を記述しています。そして、これらのモジュールをcpanmというツールを使って、プロジェクトのディレクトリ以下に簡単にインストールすることができます。
このプロジェクトでは、たとえば、MIME::Liteを使って、メール送信の記述を簡略にしたり、Data::Pageというモジュールを使って、ページ送りの記述を簡潔に記述しています。
文字コードをUTF-8、利用するモジュールをEncodeに
古きよきPerlの時代は、まだUTF-8が存在していませんでしたから、文字コードといえば、EUC-jpやShift_JISでありました。
そして、文字コードの変換処理といえば、Jcodeでした。
けれども、現代的なPerlの記述においては、文字コードはUTF-8を、文字コードの扱いには、Encodeモジュールを使うのが、もっともよいです。
そうすることで、文字列を統一的に扱うことができますし、正規表現も完全に正しく動きます。