1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

MojoliciousAdvent Calendar 2013

Day 17

wallflowerコマンド一発で静的ページを書き出す

Posted at

MojoliciousでMiddleman的なことをする簡易版 - Qiita [キータ] の記事について、tokuhirom氏から「 wallflower 使ったらどうなる?」と意見をもらった。具体的には App::Wallflower モジュールに同封されているコマンドもしくは Wallflower モジュールを指すことになるんだけど、ドキュメント等によると本来動的であるPlackアプリケーションを静的HTMLのサイトに変換することを目的とされている。SongmuさんのRijiの内部でも使われている。詳しくはチュートリアルがあるのでこの辺りを…

で、試した見たところ、MojoliciousはPSGIを簡単に吐いてくれるので wallflower コマンド一発で静的HTMLを見事に書き出してくれた。例えばこんなアプリがある。

lib/MyApp.pm
package MyApp;
use Mojo::Base 'Mojolicious';

sub startup {
    my $self = shift;
    my $r = $self->routes;
    # Rootコントローラはつくらず auto_render でテンプレートを直接レンダリングさせる
    $r->get('/')->to('root#index');
    $r->get('/about.html')->to('root#about');
    $r->get('/news.html')->to('root#news');
}

1;

テンプレート内でリンクを張っているとそこを wallflower が辿ってくれるので、URLをとりわけ明示しなくてもよい。なので共通で使用するレイアウトの部分でメニューを用意した。

templates/layout/default.html.ep
<!DOCTYPE html>
<html>
  <head><title><%= title %></title></head>
  <body>
    <ul id="menu">
      <li><a href="/index.html">Top</a></li>
      <li><a href="/about.html">About</a></li>
      <li><a href="/news.html">News</a></li>
    </ul>
    <%= content %>
  </body>
</html>

あとは個別に

  • index.html
  • about.html
  • news.html

の中身を適当に書く。そしていよいよ wallflower コマンド実行。-a もしくは --application で渡すオプションは mojo generate app MyApp で生成されるスクリプトを指定してみた。

$ wallflower -a script/my_app -d public

200 / => public/index.html [283]
304 /index.html
200 /about.html => public/about.html [287]
200 /news.html => public/news.html [285]

おお、出来た出来た\(^o^)/ 当然「Any Plack Application」に対応しています。「Plack寄せ」ならこうかな!

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?