NAME
Amon2::Manual::Tutorial.ja - Amon2 日本語チュートリアル
チュートリアル
示板をつくってみましょう。
インストール
cpanm にて、Amon2 のサイトからダウンロードしてください。
% cpanm --mirror http://orepan.64p.org/ Amon2
ハローワールド
まずは、アプリケーションの雛形を作成します。今回は、ORM に DBIx::Skinny をつかうので、--skinny オプションをつけておきます。
$ amon2-setup.pl --skinny Hello
$ cd Hello
雛形のディレクトリ構造は以下のようになっています。非常にシンプルでわかりやすい構造です。
.
├── Hello.psgi
├── Makefile.PL
├── config
│ └── development.pl
├── extlib
├── htdocs
│ └── static
│ ├── css
│ │ └── main.css
│ ├── img
│ └── js
├── lib
│ ├── Hello
│ │ ├── ConfigLoader.pm
│ │ ├── DB.pm
│ │ ├── M
│ │ ├── Web
│ │ │ ├── C
│ │ │ │ └── Root.pm
│ │ │ ├── Dispatcher.pm
│ │ │ ├── Request.pm
│ │ │ └── Response.pm
│ │ └── Web.pm
│ └── Hello.pm
├── script
│ ├── cron
│ ├── maintenance
│ ├── make_schema.pl
│ └── tmp
├── sql
│ └── my.sql
├── t
│ ├── 01_root.t
│ └── 02_mech.t
├── tmpl
│ ├── include
│ │ ├── footer.tt
│ │ └── header.tt
│ └── index.tt
└── xt
├── 01_podspell.t
├── 02_perlcritic.t
├── 03_pod.t
└── perlcriticrc
Amon2 のアプリケーションを起動させるには plackup コマンドを利用します。
$ plackup Hello.psgi
Plack::Server::Standalone: Accepting connections at http://0:5000/
とうちこめば、もう http://localhost:5000/ にウェブサーバーがたちあがっているはずです。 なんという簡単さ!
DB との連携
やはりウェブアプリケーションには RDBMS との連携がかかせません。 今回は RDBMS として、セットアップ不要なスタンドアロン型の SQLite をつかいましょう。 というわけで、まずは SQLite の Perl binding である DBD::SQLite をインストールしましょう。
% cpanm DBD::SQLite
sql/sqlite.sql には、とりあえず以下のような内容のスキーマを書きましょう。
DROP TABLE entry;
CREATE TABLE `entry` (
`entry_id` integer NOT NULL primary key,
`body` text
);
これができたら、SQLite のデータベースにスキーマをながしこみましょう。
% sqlite3 hello.db < sql/sqlite.sql
DB の設定を config/development.sql に書きます。
+{
'DBIx::Skinny' => {
dsn => 'dbi:SQLite:dbname=hello.db',
username => '',
password => '',
},
...
};
次に、DB から ORM スキーマを構築します。
% perl script/make_schema.pl
ルーターをかく
なんのサイトかもよくわかりませんが、以下のように、ディスパッチャを設定しましょう。
package Hello::Web::Dispatcher;
use Amon2::Web::Dispatcher::RouterSimple;
connect '/' => 'Root#index';
connect '/post' => 'Root#post';
1;
コントローラをかく
コントローラを定義しましょう。みればわかるとおりですね。
package Hello::Web::C::Root;
sub index {
my ($class, $c) = @_;
my @entries = $c->db->search(
entry => {}, {limit => 10, offset => 0, order_by => {'entry_id' => 'DESC'}}
);
return $c->render(
"index.tt" => {
entries => \@entries,
}
);
}
sub post {
my ($class, $c) = @_;
if (my $body = $c->req->param('body')) {
$c->db->insert(
entry => {
body => $body,
},
);
}
return $c->redirect('/');
}
テンプレート
Amon2 では現在、Text::Xslate の TTerse をデフォルトのテンプレートエンジンとして採用しています。
tmpl/index.tt という名前でファイルを配置してください。
[% INCLUDE 'include/header.tt' %]
<form method="post" action="[% uri_for('/post') %]">
<input type="text" name="body" />
<input type="submit" value="送信" />
</form>
<ul>
[% FOR entry IN entries %]
<li>[% entry.entry_id %]. [% entry.body %]</li>
[% END %]
</ul>
[% INCLUDE 'include/footer.tt' %]
まとめ
このチュートリアルでは、Amon2 の基本的なつかいかたをみました。簡単だったでしょ!