Perl入門ゼミ

テキスト処理、Linuxサーバー管理、Web開発ならPerl
  1. Perl
  2. Mojolicious

Kent WebのASKA BBSを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の利用

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モジュールを使うのが、もっともよいです。

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

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

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

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

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

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

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