Kent WebのASKA BBSをMojoliciousを使った実装に移植しました。



  1. Perl




  2. Mojolicious


Kent WebのASKA BBSをMojoliciousを使った実装に移植しました。

ASKA BBS(Mojoliciosu version)

 もともとのASKA BBSのページとサンプルはこちらです。

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の利用

 CPANPerlとはきっても切り離せない存在です。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モジュールを使うのが、もっともよいです。

 そうすることで、文字列を統一的に扱うことができますし、正規表現も完全に正しく動きます。

ルーティングとテンプレートをWebフレームワークで

 ルーティングとテンプレートはMojoliciousというWebフレームワークで行っています。

 古きよき時代のPerlにおいては、ルーティングとテンプレートは、コードに、べた書きということも少なくありません。非常に記述が、複雑なものになっていました。

 ルーティングとテンプレートをWebフレームワークのものを利用することで、記述が簡潔になっています。

 PHPの利点は、HTMLの中にPHPの記述をかけることですが、Mojoliciousのテンプレートを利用すれば、HTMLの中にPerlの記述を行うことができます。

 ぜひコードを読んで、古きよきPerlと、現代的なPerlの差について、学んでみてください。