Your SlideShare is downloading. ×
0
DancerでWebアプリ再入門    Hokkaido.pm#7    Yoshihiro Sasaki
自己紹介
自己紹介@aloelight
自己紹介@aloelight札幌在住
自己紹介@aloelight札幌在住PerlでWebアプリ開発
自己紹介@aloelight札幌在住PerlでWebアプリ開発サーバ保守・運用
まず初めに
まず初めに@riywoさん
まず初めに     @riywoさんお越し頂きありがとうございます!
今回のテーマはWebアプリ再入門
Dancer使ってみました
AWS Health Info
AWS Health Info• Twitterアカウントでログイン
AWS Health Info• Twitterアカウントでログイン• AWS Service Healthをチェック
AWS Health Info• Twitterアカウントでログイン• AWS Service Healthをチェック• 登録者にお知らせ
間に合いませんでした!  てへぺろ☆(・ω<)
• 表側のみ作ってあって、裏側の@送信 とかないです
• 表側のみ作ってあって、裏側の@送信 とかないです• でも、ドメインを勢いで取ったので後 で実装します
• 表側のみ作ってあって、裏側の@送信 とかないです• でも、ドメインを勢いで取ったので後 で実装します• さくらVPSで動かしてます
アジェンダ1. Dancerの紹介2. Dancerの基本文法3. AWS Health Infoのソースを読む
Dancerの紹介
Dancerの特徴
Dancerの特徴• Sinatra系のPerl製WAF
Dancerの特徴• Sinatra系のPerl製WAF• すっごくシンプル
Dancerの特徴• Sinatra系のPerl製WAF• すっごくシンプル• 豊富なプラグイン
Dancerの特徴• Sinatra系のPerl製WAF• すっごくシンプル• 豊富なプラグイン• 意外と豊富なドキュメント
まずはインストールする
$ cpanm Dancer
Hello, worlduse Dancer;get / => sub {    return Hello, world;};dance;
$ ./hello.pl$ curl localhost:5000Hello, world
簡単ですね!
もう少し複雑なプロジェクトのときは?
$ dancer -a MyApp
シンプル
シンプル
シンプル• 基本は use Dancer するだけ
シンプル• 基本は use Dancer するだけ• Dancer.pmがexportする関数を使う
シンプル• 基本は use Dancer するだけ• Dancer.pmがexportする関数を使う• クラス構成もシンプル
EXPORTSconfig         redirectcookie        requestdebug         send_errorforward       setget           sessionlayout    ...
豊富なプラグイン
豊富なプラグイン
豊富なプラグイン• Dancer::Plugin 94件
豊富なプラグイン• Dancer::Plugin 94件• Mojolicious::Plugin 102件
豊富なプラグイン• Dancer::Plugin 94件• Mojolicious::Plugin 102件• Catalyst::Plugin 320件
豊富なプラグイン• Dancer::Plugin 94件• Mojolicious::Plugin 102件• Catalyst::Plugin 320件• Amon2::Plugin 12件
メジャーなPlugin
メジャーなPlugin• Dancer::Plugin::Database
メジャーなPlugin• Dancer::Plugin::Database• Dancer::Plugin::DBIC
メジャーなPlugin• Dancer::Plugin::Database• Dancer::Plugin::DBIC• Dancer::Plugin::Email
メジャーなPlugin• Dancer::Plugin::Database• Dancer::Plugin::DBIC• Dancer::Plugin::Email• Dancer::Plugin::Thumbnail
メジャーなPlugin• Dancer::Plugin::Database• Dancer::Plugin::DBIC• Dancer::Plugin::Email• Dancer::Plugin::Thumbnail• Dancer::Plu...
もっと知りたい方は      Dancer plugins ecosystemhttp://advent.perldancer.org/2011/17
Pluginの作り方package Dancer::Plugin::LinkBlocker;use Dancer :syntax;use Dancer::Plugin;register block_links_from => sub {    ...
ドキュメント
ドキュメント
ドキュメント• Dancer::Introduction
ドキュメント• Dancer::Introduction• Dancer::Tutorial
ドキュメント• Dancer::Introduction• Dancer::Tutorial• Dancer::Cookbook
ドキュメント• Dancer::Introduction• Dancer::Tutorial• Dancer::Cookbook• Dancer::Plugins
ドキュメント• Dancer::Introduction• Dancer::Tutorial• Dancer::Cookbook• Dancer::Plugins• Dancer::Deployment
httpd.conf<VirtualHost *:80>    ServerName www.example.com    DocumentRoot /srv/www.example.com/public    ServerAdmin you@...
Dancerの基本文法
Routingget / => sub {    return Hello, world;};any [get,post] =>   / => sub {    ...};
Routingget /user/:name => sub {    my $name = param name;};get /user/*     => sub {    my ($name) = splat;};
Request Parametersget / => sub {    my $id = param id;};post / => sub {    my $id   = param id;    my $file = upload(file)...
Request Parameters# GET /entry/foo?id=barget /entry/:id => sub {    my $id = param id;    # $id => foo};# 追記 paramsを使えばデータ...
Configset tmdpir => /tmp/myapp;get / => sub {    my $config = config;    return $config->{appname};};
Cookieget /login => sub {    my $id       = param id;    my $password = param password;    if ( $id       eq cto      && $...
Sessionset session      => YAML;set session_dir => /tmp/sessions;set session_name => sid;# default dancer.sessionget /logi...
Templateset template => ‘template_toolkit’;get / => sub {    my $id = param id;    template index, { id => $id };};
注意Dancer::Template::Simple  IF, LOOPがありません
D::T::TemplateToolkitこちらを代わりに使いましょう
Databaseuse Dancer::Plugin::Database;get /entry/:id => sub {    my $id = param id;    my $data =      database->quick_sele...
Redirectget /foo => sub {    redirect /myaction;};get /bar => sub {    # internal redirect    forward /myaction;};
Loggingset logger => console;set log    => debug;get /logging => sub {    core    foo;    debug   bar;    info    baz;    ...
AWS Health Infoの  ソースを読む
ご清聴ありがとうございました
Using Dancer
Using Dancer
Upcoming SlideShare
Loading in...5
×

Using Dancer

6,398

Published on

Published in: Technology, Art & Photos
0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
6,398
On Slideshare
0
From Embeds
0
Number of Embeds
6
Actions
Shares
0
Downloads
3
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide

Transcript of "Using Dancer"

  1. 1. DancerでWebアプリ再入門 Hokkaido.pm#7 Yoshihiro Sasaki
  2. 2. 自己紹介
  3. 3. 自己紹介@aloelight
  4. 4. 自己紹介@aloelight札幌在住
  5. 5. 自己紹介@aloelight札幌在住PerlでWebアプリ開発
  6. 6. 自己紹介@aloelight札幌在住PerlでWebアプリ開発サーバ保守・運用
  7. 7. まず初めに
  8. 8. まず初めに@riywoさん
  9. 9. まず初めに @riywoさんお越し頂きありがとうございます!
  10. 10. 今回のテーマはWebアプリ再入門
  11. 11. Dancer使ってみました
  12. 12. AWS Health Info
  13. 13. AWS Health Info• Twitterアカウントでログイン
  14. 14. AWS Health Info• Twitterアカウントでログイン• AWS Service Healthをチェック
  15. 15. AWS Health Info• Twitterアカウントでログイン• AWS Service Healthをチェック• 登録者にお知らせ
  16. 16. 間に合いませんでした! てへぺろ☆(・ω<)
  17. 17. • 表側のみ作ってあって、裏側の@送信 とかないです
  18. 18. • 表側のみ作ってあって、裏側の@送信 とかないです• でも、ドメインを勢いで取ったので後 で実装します
  19. 19. • 表側のみ作ってあって、裏側の@送信 とかないです• でも、ドメインを勢いで取ったので後 で実装します• さくらVPSで動かしてます
  20. 20. アジェンダ1. Dancerの紹介2. Dancerの基本文法3. AWS Health Infoのソースを読む
  21. 21. Dancerの紹介
  22. 22. Dancerの特徴
  23. 23. Dancerの特徴• Sinatra系のPerl製WAF
  24. 24. Dancerの特徴• Sinatra系のPerl製WAF• すっごくシンプル
  25. 25. Dancerの特徴• Sinatra系のPerl製WAF• すっごくシンプル• 豊富なプラグイン
  26. 26. Dancerの特徴• Sinatra系のPerl製WAF• すっごくシンプル• 豊富なプラグイン• 意外と豊富なドキュメント
  27. 27. まずはインストールする
  28. 28. $ cpanm Dancer
  29. 29. Hello, worlduse Dancer;get / => sub { return Hello, world;};dance;
  30. 30. $ ./hello.pl$ curl localhost:5000Hello, world
  31. 31. 簡単ですね!
  32. 32. もう少し複雑なプロジェクトのときは?
  33. 33. $ dancer -a MyApp
  34. 34. シンプル
  35. 35. シンプル
  36. 36. シンプル• 基本は use Dancer するだけ
  37. 37. シンプル• 基本は use Dancer するだけ• Dancer.pmがexportする関数を使う
  38. 38. シンプル• 基本は use Dancer するだけ• Dancer.pmがexportする関数を使う• クラス構成もシンプル
  39. 39. EXPORTSconfig redirectcookie requestdebug send_errorforward setget sessionlayout templateparam uri_forpost その他諸々
  40. 40. 豊富なプラグイン
  41. 41. 豊富なプラグイン
  42. 42. 豊富なプラグイン• Dancer::Plugin 94件
  43. 43. 豊富なプラグイン• Dancer::Plugin 94件• Mojolicious::Plugin 102件
  44. 44. 豊富なプラグイン• Dancer::Plugin 94件• Mojolicious::Plugin 102件• Catalyst::Plugin 320件
  45. 45. 豊富なプラグイン• Dancer::Plugin 94件• Mojolicious::Plugin 102件• Catalyst::Plugin 320件• Amon2::Plugin 12件
  46. 46. メジャーなPlugin
  47. 47. メジャーなPlugin• Dancer::Plugin::Database
  48. 48. メジャーなPlugin• Dancer::Plugin::Database• Dancer::Plugin::DBIC
  49. 49. メジャーなPlugin• Dancer::Plugin::Database• Dancer::Plugin::DBIC• Dancer::Plugin::Email
  50. 50. メジャーなPlugin• Dancer::Plugin::Database• Dancer::Plugin::DBIC• Dancer::Plugin::Email• Dancer::Plugin::Thumbnail
  51. 51. メジャーなPlugin• Dancer::Plugin::Database• Dancer::Plugin::DBIC• Dancer::Plugin::Email• Dancer::Plugin::Thumbnail• Dancer::Plugin::Facebook
  52. 52. もっと知りたい方は Dancer plugins ecosystemhttp://advent.perldancer.org/2011/17
  53. 53. Pluginの作り方package Dancer::Plugin::LinkBlocker;use Dancer :syntax;use Dancer::Plugin;register block_links_from => sub { my $conf = plugin_setting(); my $re = join( |, @{ $conf->{hosts} } ); before sub { if ( request->referer && request->referer =~ /$re/ ){ status 403 || $conf->{http_code}; } };};register_plugin;1;
  54. 54. ドキュメント
  55. 55. ドキュメント
  56. 56. ドキュメント• Dancer::Introduction
  57. 57. ドキュメント• Dancer::Introduction• Dancer::Tutorial
  58. 58. ドキュメント• Dancer::Introduction• Dancer::Tutorial• Dancer::Cookbook
  59. 59. ドキュメント• Dancer::Introduction• Dancer::Tutorial• Dancer::Cookbook• Dancer::Plugins
  60. 60. ドキュメント• Dancer::Introduction• Dancer::Tutorial• Dancer::Cookbook• Dancer::Plugins• Dancer::Deployment
  61. 61. httpd.conf<VirtualHost *:80> ServerName www.example.com DocumentRoot /srv/www.example.com/public ServerAdmin you@example.com <Directory "/srv/www.example.com/public"> AllowOverride None Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch Order allow,deny Allow from all AddHandler cgi-script .cgi </Directory> RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^(.*)$ /dispatch.cgi/$1 [QSA,L] ErrorLog /var/log/apache2/www.example.com-error.log CustomLog /var/log/apache2/www.example.com-access_log common</VirtualHost>
  62. 62. Dancerの基本文法
  63. 63. Routingget / => sub { return Hello, world;};any [get,post] => / => sub { ...};
  64. 64. Routingget /user/:name => sub { my $name = param name;};get /user/* => sub { my ($name) = splat;};
  65. 65. Request Parametersget / => sub { my $id = param id;};post / => sub { my $id = param id; my $file = upload(file); # Dancer::Request::Upload object $file->copy_to(/path/to/flie);};
  66. 66. Request Parameters# GET /entry/foo?id=barget /entry/:id => sub { my $id = param id; # $id => foo};# 追記 paramsを使えばデータソース別に取れます# perldoc Dancer::Request# Fetching_only_params_from_a_given_source
  67. 67. Configset tmdpir => /tmp/myapp;get / => sub { my $config = config; return $config->{appname};};
  68. 68. Cookieget /login => sub { my $id = param id; my $password = param password; if ( $id eq cto && $password eq onagatani ) { cookie logged_in => 1; redirect /; }};
  69. 69. Sessionset session => YAML;set session_dir => /tmp/sessions;set session_name => sid;# default dancer.sessionget /login => sub { my $id = param id; my $password = param password; if ( $id eq cto && $password eq onagatani ) { session user => { name => onagatani }; redirect /; }};
  70. 70. Templateset template => ‘template_toolkit’;get / => sub { my $id = param id; template index, { id => $id };};
  71. 71. 注意Dancer::Template::Simple IF, LOOPがありません
  72. 72. D::T::TemplateToolkitこちらを代わりに使いましょう
  73. 73. Databaseuse Dancer::Plugin::Database;get /entry/:id => sub { my $id = param id; my $data = database->quick_select( entry, { id => $id } );};
  74. 74. Redirectget /foo => sub { redirect /myaction;};get /bar => sub { # internal redirect forward /myaction;};
  75. 75. Loggingset logger => console;set log => debug;get /logging => sub { core foo; debug bar; info baz; warning hoge; error piyo;};
  76. 76. AWS Health Infoの ソースを読む
  77. 77. ご清聴ありがとうございました
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×