Windows上でMojoliciousの開発を始めて、さくらのレンタルサーバーで公開するまでの手順
Windows上でMojoliciousというWebフレームワークを使ってWebアプリケーションの開発を行い、さくらのレンタルサーバーのライトプランで公開するまでの手順を書きたいと思います。ライトプランは1ヶ月あたり125円なので気軽にWebフレームワークを試してみることができます。現代的なWebフレームワークを使って、気軽にWebアプリケーションを作成できるのはPerlの良いところですね。
またSQLiteというデータベースも使ってみましょう。
環境構築
ActivePerlにはDBD::SQLiteとDBIが含まれていますから、データベース関連のモジュールをインストールする必要はありません。またさくらのレンタルサーバーでもSQLiteが最初から利用できますので、こちらも何の準備もする必要はありません。
行うことはMojoliciousをダウンロードすることだけです。今回は1.47のバージョンで試してみることにします。
以下のページからMojoliciousをダウンロードしてください。
ダウンロードしたファイルは圧縮されていますので、開発を行うディレクトリに移動して展開してください。今回は「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の使いかたについては以下を参考にしてください。
myappディレクトリ以下をそのまま以下のディレクトリにアップロードします。
/home/ユーザー名/www
注意点として「app.cgi」はアスキーモードで転送する必要があるということです。FFFTPのデフォルトでは「.cgi」で終わるファイルはアスキーモードで転送されると思うのでおそらくだいじょうでしょう。
次に「app.cgi」だけパーミッションを変更する必要があります。「右クリック」→「属性」から755にパーミッションを変更してください。
Webからのアクセス
これで以下のURLからブラウザで見ることができるはずです。
http://ユーザー名.sakura.ne.jp/myapp/app.cgi
お疲れ様でした。
Perlゼミ

