インストール
まず、インストールの説明に従って、NanoA をインストールします。インストールが完了すると、こちらの画面が表示されるようになります。
Helloworld の作成
app/hello というディレクトリを作成し、以下のようなファイル (start.mt) を置きます。
こんにちは、<?= $app->query->param('user') ?>さん
続いて、NanoA のトップページをリロードしてみましょう。hello というアプリケーションが増えているはずです (今あなたが書いたアプリケーションです) 。そのアプリケーション名をクリックすると、「こんにちは、さん」と表示されます。
nanoa.cgi/hello/?user=太郎 という URL にアクセスすると、「こんにちは、太郎さん」と表示されます。
クエリパーサについて
NanoA は、クエリパーサとして CGI::Simple を同梱しています。上記の $app->query は、クエリオブジェクトを取得する処理です。リクエストのパースやファイルアップロードの受信、クッキー処理の手法については、CGI::Simple のドキュメントをご参照ください。
テンプレートエンジンについて
NanoA ではテンプレートエンジンに、Mojo::Template をベースにした MENTA::Template を採用し、PHP ライクな記法でテンプレートを書くことができます。文字列は自動でエスケープされるので、XSS 脆弱性を気にすることなく開発を進めることができます。
| 記法 | 意味 |
|---|---|
| <?= $hoge ?> | $hoge を HTML エスケープして出力 |
| <?=r $hoge ?> | $hoge をエスケープせずに出力 |
| <?= $app->render('hello/header') ?> | app/hello/header.mt をインクルード |
| ? for my $row (@rows) { <?= $row->{name} ?> ? } |
リストを表示 |
テンプレートの分離
コードの見通しを良くするために、テンプレートとコントローラのロジックを分離して書くこともできます。Helloworld を分離して書き直すと、以下のようになります。極めて正統的な Perl です。
package hello::start;
use strict;
use warnings;
use utf8;
use base qw(NanoA);
sub run {
my $app = shift;
return $app->render('hello/template/start', {
user => $app->query->param('user'),
});
}
1;
こんにちは、<?= $c->{user} ?>さん
.pm ファイルと .mt ファイルについて
NanoA では、perl ソースコードに .pm 拡張子を、テンプレートに .mt 拡張子を使用するようになっています。NanoA のディスパッチャは、.mt と .pm ファイルを検索し、自動的に実行します。また、$app->render(filename) という呼出を行うことで、.pm の中で .mt ファイルをレンダリングしたり、逆に .mt ファイルの中から .pm ファイルを実行したりすることが可能です。
データベース接続
NanoA は標準で SQLite データベースへの接続機能を提供します。NanoA セットアップ時に自動的にデータベースが生成されるので、アプリケーションの中では、$app->db にアクセスするだけで、データベースハンドルを取得することができます。
# ユーザーテーブルを (なければ) 作成
$app->db->do(
'create table if not exists user ('
. 'user_id integer not null primary key autoincrement,'
. 'user_name text not null'
. )'
);
...
# ユーザーテーブルに行を追加
$app->db->do(
'insert into user (user_name) values (?)',
{},
$app->query->name('user_name'),
);
...
# ユーザーテーブルからクエリした結果をテンプレートに渡す
$app->render('myapp/template/mytemplate', {
all_users => $app->db->selectall_arrayref(
'select user_id,user_name from user',
{ Slice => {} },
),
});
データベースハンドルについて
NanoA のデータベースハンドルは、Perl 標準のデータベースインターフェイスである DBI です。
アプリケーションの設定
アプリケーション全体の共通処理
プラグイン機構
NanoA の動作は、プラグインを使って拡張可能です。詳しくは、プラグインの説明ページをご覧ください。