Perl入門ゼミ

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

Windows上でMojoliciousの開発を始めて、さくらのレンタルサーバーで公開するまでの手順

Windows上でMojoliciousというWebフレームワークを使ってWebアプリケーションの開発を行い、さくらのレンタルサーバーのライトプランで公開するまでの手順を書きたいと思います。ライトプランは1ヶ月あたり125円なので気軽にWebフレームワークを試してみることができます。現代的なWebフレームワークを使って、気軽にWebアプリケーションを作成できるのはPerlの良いところですね。

またSQLiteというデータベースも使ってみましょう。

環境構築

ActivePerlにはDBD::SQLiteとDBIが含まれていますから、データベース関連のモジュールをインストールする必要はありません。またさくらのレンタルサーバーでもSQLiteが最初から利用できますので、こちらも何の準備もする必要はありません。

行うことはMojoliciousをダウンロードすることだけです。今回は1.47のバージョンで試してみることにします。

以下のページからMojoliciousをダウンロードしてください。

Mojolicious-1.47

Download

ダウンロードしたファイルは圧縮されていますので、開発を行うディレクトリに移動して展開してください。今回は「C:\labo」に移動して展開してみましょう。「右クリック」→「すべて展開」で展開することができます。

「C:\labo\kraih-mojo-v1.47-コミット番号」というディレクトリ以下に以下のファイルがあるはずです。

kraih-mojo-コミット番号

このディレクトリ名を今から作成するアプリケーション名に変更しましょう。myappとします。このディレクトリの中にはMojoliciousのすべての機能が含まれており、利用することができます。

myapp

スクリプトの作成

このディレクトリに中に入って「app.cgi」というファイルを作成してください。

myapp - app.cgi

次のスクリプトを作成してみましょう。ひとこと掲示板です。Mojoliciousのフレームワークの中のMojolicious::Liteというモジュールを使って、掲示板を作成しています。このスクリプトはUTF-8で保存してください。

#!/usr/bin/perl

# Mojoliciousを読み込むためのライブラリのパスの設定
use FindBin;
use lib "$FindBin::Bin/lib";

# Mojolicious::Liteの利用
use Mojolicious::Lite;

use utf8;

use DBD::SQLite;
my $sqlite_unicode
  = $DBD::SQLite::VERSION > 1.26
  ? 'sqlite_unicode'
  : 'unicode';

# データベースのためのモジュール
use DBI;

# データベースへの接続
my $database = app->home->rel_file('app.db');
my $dbh = DBI->connect(
  "dbi:SQLite:dbname=$database",
  undef,
  undef,
  {RaiseError => 1, PrintError => 0, AutoCommit => 1,
   $sqlite_unicode => 1}
);

# テーブルの作成
$dbh->do(<<"EOS");
create table if not exists entry(
  id INTEGER PRIMARY KEY,
  message
);
EOS

# トップページ
get '/' => sub {
  my $self = shift;
  
  my $sth = $dbh->prepare(<<"EOS");
select message from entry order by id desc;
EOS

  $sth->execute;
  
  my $rows = [];
  while (my $row = $sth->fetchrow_hashref) {
    push @$rows, $row;
  }
    
  $self->render(rows => $rows);
} => 'index';

# データの登録
post '/register' => sub {
  my $self = shift;
  
  my $param = $self->req->params->to_hash;
  my $message = $param->{message} || '';
  
  if ($message) {
    my $sth = $dbh->prepare(<<"EOS");
insert into entry (message) values (?);
EOS
    $sth->execute($message);
  }
    
    $self->redirect_to('/');
};

# アプリケーションの開始
app->start;

__DATA__

@@ index.html.ep
<html>
  <head>
    <meta http-equiv="Content-type" content="text/html; charset=UTF-8">
    <title>ひとことだけメッセージ掲示板</title>
  </head>
  
  <h1>ひとことだけメッセージ掲示板</h1>
  <body>
    <form method="post" action="<%= url_for '/register' %>" >
      <div>メッセージ <input type="text" name="message"></div>
      <div><input type="submit" value="送信" ></div>
    </form>
    <div>
      % foreach my $row (@$rows) {
        <div><%= $row->{message} %></div>
        <hr>
      % }
    </div>
  </body>
</html>

(参考)FindBin

DBD::SQLiteのバージョンによって推奨されるUNICODEのオプションが異なるので選択的に使い分けています。

ファイルのアップロード

FFFTPの使いかたについては以下を参考にしてください。

FFFTP(さくらインターネット)

myappディレクトリ以下をそのまま以下のディレクトリにアップロードします。

/home/ユーザー名/www

注意点として「app.cgi」はアスキーモードで転送する必要があるということです。FFFTPのデフォルトでは「.cgi」で終わるファイルはアスキーモードで転送されると思うのでおそらくだいじょうでしょう。

次に「app.cgi」だけパーミッションを変更する必要があります。「右クリック」→「属性」から755にパーミッションを変更してください。

Webからのアクセス

これで以下のURLからブラウザで見ることができるはずです。

http://ユーザー名.sakura.ne.jp/myapp/app.cgi

お疲れ様でした。