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
お疲れ様でした。