Your SlideShare is downloading. ×
0
Using Dancer
Using Dancer
Using Dancer
Using Dancer
Using Dancer
Using Dancer
Using Dancer
Using Dancer
Using Dancer
Using Dancer
Using Dancer
Using Dancer
Using Dancer
Using Dancer
Using Dancer
Using Dancer
Using Dancer
Using Dancer
Using Dancer
Using Dancer
Using Dancer
Using Dancer
Using Dancer
Using Dancer
Using Dancer
Using Dancer
Using Dancer
Using Dancer
Using Dancer
Using Dancer
Using Dancer
Using Dancer
Using Dancer
Using Dancer
Using Dancer
Using Dancer
Using Dancer
Using Dancer
Using Dancer
Using Dancer
Using Dancer
Using Dancer
Using Dancer
Using Dancer
Using Dancer
Using Dancer
Using Dancer
Using Dancer
Using Dancer
Using Dancer
Using Dancer
Using Dancer
Using Dancer
Using Dancer
Using Dancer
Using Dancer
Using Dancer
Using Dancer
Using Dancer
Using Dancer
Using Dancer
Using Dancer
Using Dancer
Using Dancer
Using Dancer
Using Dancer
Using Dancer
Using Dancer
Using Dancer
Using Dancer
Using Dancer
Using Dancer
Using Dancer
Using Dancer
Using Dancer
Using Dancer
Using Dancer
Using Dancer
Using Dancer
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

Using Dancer

6,319

Published on

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

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

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. DancerでWebアプリ再入門 Hokkaido.pm#7 Yoshihiro Sasaki
  • 2. 自己紹介
  • 3. 自己紹介@aloelight
  • 4. 自己紹介@aloelight札幌在住
  • 5. 自己紹介@aloelight札幌在住PerlでWebアプリ開発
  • 6. 自己紹介@aloelight札幌在住PerlでWebアプリ開発サーバ保守・運用
  • 7. まず初めに
  • 8. まず初めに@riywoさん
  • 9. まず初めに @riywoさんお越し頂きありがとうございます!
  • 10. 今回のテーマはWebアプリ再入門
  • 11. Dancer使ってみました
  • 12. AWS Health Info
  • 13. AWS Health Info• Twitterアカウントでログイン
  • 14. AWS Health Info• Twitterアカウントでログイン• AWS Service Healthをチェック
  • 15. AWS Health Info• Twitterアカウントでログイン• AWS Service Healthをチェック• 登録者にお知らせ
  • 16. 間に合いませんでした! てへぺろ☆(・ω<)
  • 17. • 表側のみ作ってあって、裏側の@送信 とかないです
  • 18. • 表側のみ作ってあって、裏側の@送信 とかないです• でも、ドメインを勢いで取ったので後 で実装します
  • 19. • 表側のみ作ってあって、裏側の@送信 とかないです• でも、ドメインを勢いで取ったので後 で実装します• さくらVPSで動かしてます
  • 20. アジェンダ1. Dancerの紹介2. Dancerの基本文法3. AWS Health Infoのソースを読む
  • 21. Dancerの紹介
  • 22. Dancerの特徴
  • 23. Dancerの特徴• Sinatra系のPerl製WAF
  • 24. Dancerの特徴• Sinatra系のPerl製WAF• すっごくシンプル
  • 25. Dancerの特徴• Sinatra系のPerl製WAF• すっごくシンプル• 豊富なプラグイン
  • 26. Dancerの特徴• Sinatra系のPerl製WAF• すっごくシンプル• 豊富なプラグイン• 意外と豊富なドキュメント
  • 27. まずはインストールする
  • 28. $ cpanm Dancer
  • 29. Hello, worlduse Dancer;get / => sub { return Hello, world;};dance;
  • 30. $ ./hello.pl$ curl localhost:5000Hello, world
  • 31. 簡単ですね!
  • 32. もう少し複雑なプロジェクトのときは?
  • 33. $ dancer -a MyApp
  • 34. シンプル
  • 35. シンプル
  • 36. シンプル• 基本は use Dancer するだけ
  • 37. シンプル• 基本は use Dancer するだけ• Dancer.pmがexportする関数を使う
  • 38. シンプル• 基本は use Dancer するだけ• Dancer.pmがexportする関数を使う• クラス構成もシンプル
  • 39. EXPORTSconfig redirectcookie requestdebug send_errorforward setget sessionlayout templateparam uri_forpost その他諸々
  • 40. 豊富なプラグイン
  • 41. 豊富なプラグイン
  • 42. 豊富なプラグイン• Dancer::Plugin 94件
  • 43. 豊富なプラグイン• Dancer::Plugin 94件• Mojolicious::Plugin 102件
  • 44. 豊富なプラグイン• Dancer::Plugin 94件• Mojolicious::Plugin 102件• Catalyst::Plugin 320件
  • 45. 豊富なプラグイン• Dancer::Plugin 94件• Mojolicious::Plugin 102件• Catalyst::Plugin 320件• Amon2::Plugin 12件
  • 46. メジャーなPlugin
  • 47. メジャーなPlugin• Dancer::Plugin::Database
  • 48. メジャーなPlugin• Dancer::Plugin::Database• Dancer::Plugin::DBIC
  • 49. メジャーなPlugin• Dancer::Plugin::Database• Dancer::Plugin::DBIC• Dancer::Plugin::Email
  • 50. メジャーなPlugin• Dancer::Plugin::Database• Dancer::Plugin::DBIC• Dancer::Plugin::Email• Dancer::Plugin::Thumbnail
  • 51. メジャーなPlugin• Dancer::Plugin::Database• Dancer::Plugin::DBIC• Dancer::Plugin::Email• Dancer::Plugin::Thumbnail• Dancer::Plugin::Facebook
  • 52. もっと知りたい方は Dancer plugins ecosystemhttp://advent.perldancer.org/2011/17
  • 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. ドキュメント
  • 55. ドキュメント
  • 56. ドキュメント• Dancer::Introduction
  • 57. ドキュメント• Dancer::Introduction• Dancer::Tutorial
  • 58. ドキュメント• Dancer::Introduction• Dancer::Tutorial• Dancer::Cookbook
  • 59. ドキュメント• Dancer::Introduction• Dancer::Tutorial• Dancer::Cookbook• Dancer::Plugins
  • 60. ドキュメント• Dancer::Introduction• Dancer::Tutorial• Dancer::Cookbook• Dancer::Plugins• Dancer::Deployment
  • 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. Dancerの基本文法
  • 63. Routingget / => sub { return Hello, world;};any [get,post] => / => sub { ...};
  • 64. Routingget /user/:name => sub { my $name = param name;};get /user/* => sub { my ($name) = splat;};
  • 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. 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. Configset tmdpir => /tmp/myapp;get / => sub { my $config = config; return $config->{appname};};
  • 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. 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. Templateset template => ‘template_toolkit’;get / => sub { my $id = param id; template index, { id => $id };};
  • 71. 注意Dancer::Template::Simple IF, LOOPがありません
  • 72. D::T::TemplateToolkitこちらを代わりに使いましょう
  • 73. Databaseuse Dancer::Plugin::Database;get /entry/:id => sub { my $id = param id; my $data = database->quick_select( entry, { id => $id } );};
  • 74. Redirectget /foo => sub { redirect /myaction;};get /bar => sub { # internal redirect forward /myaction;};
  • 75. Loggingset logger => console;set log => debug;get /logging => sub { core foo; debug bar; info baz; warning hoge; error piyo;};
  • 76. AWS Health Infoの ソースを読む
  • 77. ご清聴ありがとうございました

×