68
スタ~ト Padrino Presentation by Uchio Kondo (@udzura) 2011/10/21(Fri) Preferred Infrastructure Inc. 殿

Start Padrino

Embed Size (px)

DESCRIPTION

presented @ "Start Padrino" meetup held at Hongo, Tokyo

Citation preview

Page 1: Start Padrino

スタ~ト Padrino

Presentation by Uchio Kondo (@udzura)2011/10/21(Fri)

於 Preferred Infrastructure Inc. 殿

Page 2: Start Padrino

近藤うちお(@udzura)

● Rubyist(2年半ほど)

● Groovyに挫折● 現在Haskellを順調に挫折● 富士マガ所属、雑誌を定期購読で買ってね!● カルマ: Rack, Sinatra, Padrinoあたり

Rails3, TDD, Linux, アジャイルとかも興味はあるんですよ……

Page 3: Start Padrino

近藤うちおさんのworks

● ブロッグ http://blog.udzura.jp/

● Padrino 日本語サイト翻訳リーダー● Padrino framework contributor

● 自称、 Padrino framework エバンジェリストJPです● RubyGems: rack-session-dbm● RubyGems: rspec-padrino

● 若干のふざけたウェッブサービス● その他、 http://udzura.jp

Page 4: Start Padrino

今日の構成● 第一章: Sinatra の歴史(独断と偏見篇)● 第二章: What's going on Padrino?

● 第三章: Extending Sinatra in deep ~Sinatra Ecosystem~

● Extra Session: “Blog Tutorial” をやってみよう

Page 5: Start Padrino

第一章● Sinatra の歴史● それは、Padrinoの歴史でもあるのだ……

Page 6: Start Padrino

Sinatra爆誕● 0.0.1 on 2007-09(only on repo)● 0.1.0 on 2007-10● http://rubygems.org/gems/sinatra/versions

Page 7: Start Padrino

シンプル● https://github.com/sinatra/sinatra/blob/0.0.1/lib/sinatra

/dsl.rb

Page 8: Start Padrino

たくさんのフレームワークに影響● Dancer, Mojolitious::Lite● Juno● loli● Scalatra, Graffiti

Page 9: Start Padrino

時は流れ、1.0 was released

● 2010-05

Page 10: Start Padrino

1.0になり、● クラシックスタイルとモジュラ~スタイルが分離した。Sinatra::Baseの誕生

Page 11: Start Padrino

Sinatraの歴史の詳細● gihyo.jp さんへ

● 第41回 Sinatra 1.0の世界にようこそ● 第42回 実世界のSinatra

● http://gihyo.jp/dev/serial/01/ruby/0041

● @tsuyoshikawa 氏渾身の記事

Page 12: Start Padrino

一方その頃● sinatra_more gem

● 2009年後半ごろから開発

Page 13: Start Padrino

sinatra_more moved to Padrino

● Padrino 自体は 2009-11ごろから開発されていたっぽい● 2010-02、sinatra_moreのREADMEに、Padrinoへ移行する旨のコミット

● https://github.com/nesquena/sinatra_more/commit/2ee59c6c709a90c7723a86d62c0542114bd02b09#README.rdoc

● sinatra_more の開発者も Padrino 開発teamにジョイン

Page 14: Start Padrino

Sinatra

● 1.0 2010-03● 1.1.0 2010-10● 1.2.0 2011-03

● 1.2.6 2011-05 長い間の安定版でした● 1.3.0/1.2.7 2011-10(new!)

● 3月と10月に何かが起こる

Page 15: Start Padrino

Padrino

● 0.9.0 2010-02 リリース● 0.9系統は、キャッシュ機能担当のsub gemを新規に追加するなど、改修に次ぐ改修

● 0.10.0 2011-07 リリース● 0.10.3 で Sinatra 1.3 系をキャッチアップ!!● 0.10.4 と 0.10.5 は半日足らずで連続リリース

(...)

Page 16: Start Padrino

最近のSinatra/Padrino情勢[PR]

● 「Sinatra 1.3.0 & Padrino 0.10.3 がリリースされました。ざっくり紹介。」

● (1): http://l.udr.me/oPFtQI ● (2): http://l.udr.me/ruLxHN

● (Sinatra)Stream API, (Padrino)JRuby/Rubiniusサポートなど、Sinatrasta必読の話題です?

Page 17: Start Padrino

その他● big_band, renee など Sinatra 界隈でも色々な動きがあるようですが……

● 続きはググれ!● もしくはudzuraさんがブログを書くかもしれません[PR]

Page 18: Start Padrino

第二章● Padrino とは何か?● 併せて読みたい: http://jp.padrinorb.com

● 併せて読みたい: http://www.padrinorb.com

● この章の各項目について、ちゃんと公式のGuideがあります。今回は概観を。

Page 19: Start Padrino

その前に● Sinatra使ってる?(そもそも論)

Page 20: Start Padrino

Sinatraでアレしてて● Viewやmodelのディレクトリ構造とか、

spec_helper.rbとか、Gemfileつくってbundlerで読み込むとこの処理とか、

● 色々自作してません?

Page 21: Start Padrino

あなたと、

Page 22: Start Padrino

Padrino

● “Sinatraの哲学の上に”、Sinatraを拡張し、楽しく開発できるようにしたフレームワーク

The goal for this framework is to match the essence of Sinatra and make it suitable for increasingly complex applications that require the use of forms, mail delivery, localization, helpers, caching, etc…

For our team, coding is an art form and Sinatra best enables this concept because of these core principles:

* Clean * Compact * Fast * Creative * Concise

The Padrino framework is the perfect solution for your small projects as well as for your larger project requirements!

Page 23: Start Padrino

Sinatraを「正しく」拡張● 2つの安全なAPI

● use● register

● を中心的に用いている。

Page 24: Start Padrino

大きな特徴● Agnostic● Modularity● Light-weight

Page 25: Start Padrino

Agnostic

● ORM● Adapter● Template Engine● Testing Framework/Mocking● JavaScript/CSS Framework

● が、交換可能

Page 26: Start Padrino

Modularity

● 開発者は、Padrinoのすべての機能を使ってもいいし、一部の機能を Sinatra に導入する形で使ってもいい。

● register/useで “Sinatra way” で拡張している強み

Page 27: Start Padrino

Lightweight

● フルスタックPadrinoでも、素のSinatraとほとんど変わらないレスポンスの速さ

* http://www.padrinorb.com/blog/padrino-0-10-0-routing-upgrades-rbx-and-jruby-support-and-minor-breaking-changes

Page 28: Start Padrino

図解● Padrinoの出現以前

Rails

Sinatra

ActiveRecord

ActionController Rspec-Rails

ERB

Hamlほか

Erubis

RSpec

Mongoidほかmochaほか

Page 29: Start Padrino

ゴッドファーザー登場

Rails

Sinatra

ActiveRecord

ActionController Rspec-Rails

ERB

Hamlほか

Erubis

RSpec

Mongoidほか

Padrino

● Sinatra Family 誕生の瞬間

mochaほか

Page 30: Start Padrino

Sinatraから拡張した点● Rails風MVCパターンの導入● 豊富なHelper

● シンプルなメール配信機能● シンプルなキャッシュ機能● 基本的な国際化機能● 見易いロガー● 開発時のリローダー● 管理画面の自動作成● サブアプリケーションの作成/マウント● ジェネレータ含むコマンドラインツール● テストの自動生成

Page 31: Start Padrino

Rails風MVC

● コントローラ相当● Rails – ActionController + routes.rb● Sinatra – Sinatra DSL

● Padrino は、Sinatra DSLをさらに拡張し、擬似的な「コントローラ」を導入、各ルーティングを参照可能にする

→ Padrino::Rouiting

Page 32: Start Padrino

Helper

● Railsっぽい便利ヘルパ~ズ● content_for● form_for● stylesheet_link_tag● Format Helpers

→ Padrino::Helpers

Page 33: Start Padrino

Mailer

● メール定義用のDSL

● deliver メソッドで配信● Mail gemがベースなので、マルチパートをはじめ結構融通が効く

→ Padrino::Mailer

Page 34: Start Padrino

Cache

● 割と最近追加されました● Page cache/Fragment cache

→ Padrino::Cache

Page 35: Start Padrino

ロガ~● Padrino::Logger::Rack

Page 36: Start Padrino

リローダー● 0.10.5 現在、超頭良い● F5駆動開発にぜひ

Page 37: Start Padrino

管理画面● 管理画面担当のサブアプリケーションを簡単に作れる

● どうせScaffoldとか管理画面作ることが多いでしょ?

● ModelのScaffold、というかCRUDを簡単に

Page 38: Start Padrino

サブアプリケーション● ルーティングは共有しないが、Modelはじめ共通ライブラリを使う場合に有利

● Djangoからインスパイアザネクスト

Page 39: Start Padrino

コマンドラインツール● padrino コマンドがあります● 一通りジェネレータあります

● コンソール、サーバ起動など…

Page 40: Start Padrino

padrino rake test

● ジェネレータは、基本的にユニットテストも一緒に作ってくれます。

● テストの基本的な構成物を作ってくれるので、TDDにも向いていたりします。

● また、実は、machinist、capybaraなどのテスト支援ライブラリもちょっとしたコツで使えたりします。

Page 41: Start Padrino

テストの話は● TokyuRubyKaigi 04 で!● 10/29

● 於 神泉近くの某社

http://regional.rubykaigi.org/tokyu04

Page 42: Start Padrino

ここまでのまとめ● Sinatraはシンプル、軽量、素敵● Sinatraはシンプル過ぎるので、「かゆいところに手が届く」Padrinoが出現、Railsとの抗争激化(予定)

● Padrinoは伸縮自在、小規模~大規模OK

● Padrinoはいろんなライブラリと共存する

Page 43: Start Padrino

第三章● Extending Sinatra

as a super-simple Rack-based framework● The Sinatra Ecosystem

● そして伝説へ…

Page 44: Start Padrino

Sinatraを強めるAPI

● use

● Rack Middleware を登録する● register

● Sinatra::Base を拡張したクラスに直接作用し、挙動を変更する

● helpers, set, use, なんかのクラスマクロをセットで呼ぶのがよくある使い方

Page 45: Start Padrino

use

● Rack config DSL

とある簡素な config.ru

Page 46: Start Padrino

Rack準拠アプリケ~ション● App#call(env) を呼び、● [status_code, {“Header” => “foo”}, [bodies]] を返す● ダックタイピング、特定のClass/Moduleを継承する必要なし(奥野氏)

Page 47: Start Padrino

Rack Middleware

● Initialize 時に、第一引数として app を取る● あとは Rack向けアプリケーションと同様

Page 48: Start Padrino

Super Simple Rack Middleware

Page 49: Start Padrino

これは、ねこのおくちです

Page 50: Start Padrino

便利な Rack Middleware 情報です● OmniAuth● Warden● Rack::Rewrite● Rack::Protection

(1.3 よりSinatraが標準で使う)

● Rack::Recaptcha

● Jpmobile::Rack::* (一部機能不可)

● Rack gem 自身にもいくつか添付されています。ベーシック/ダイジェスト認証とかが有名?ですか?

Page 51: Start Padrino

register

● register されたModuleは、`self.registered`フックが呼ばれる

● そのフックで、元アプリのクラスマクロを呼んだりできたりする

Page 52: Start Padrino

そんな難しい話ではないですね

Page 53: Start Padrino

app.class_eval とかが始まると● 暗黒● send :include, send :extend, …

● Padrino::Routingとかは、もともとのSinatraのget/post/put/delete の移譲先、

● Sinatra::Base.route

● を上書きしている!!!!!!

● メタプログラミングは用量を守って正しく

Page 54: Start Padrino

使い分け● Rackに切り出せるものはRackで

● ほとんど何でも切り出せますが……● 一応、例えばRailsで使えるか?とか意識

● たとえばhelperの追加、クラスマクロの追加とかはregisterでどう?● そもそもそういう機能追加ならSinatraへの依存度が高いはず、遠慮なくいっとこう

Page 55: Start Padrino

Sinatraをベースに、● use/registerを駆使して、ビュッフェのごとく欲しい機能を皿に盛ることで、

● ウェッブアプリケ~ションができる!● 疎結合、スモール、読みやすい、高速● post-Railsなウェブ開発を感じさせてくれます

Page 56: Start Padrino

左: Railsを用いたフルスタック開発のイメージ画像右: Sinatra/RackベースのModularな開発のイメージ画像

 

Page 57: Start Padrino

cf.

● cho45先生の発表● ぼくのかんがえたさいきょうのうぇぶあぷりけーしょんふれーむわーく

Page 58: Start Padrino

Sinatra「呼んだ?」● 安全: rack-protection とか色々ある● 読むコード最小:

sinatra/base.rbは1,646行、いける!(...)

● 早い: これは自信あるぞ、高速● 必要なら最低限自分で書く:

前述した二つのAPIの力で、簡単な機能を自作するのもやりやすいですね

Page 59: Start Padrino

Sinatra、いい線行ってる● 行ってると信じてる

Page 60: Start Padrino

Yet Another Extending

● plugin 機構がある●

● Generator の内部DSLと同じものを使っているっぽい。padrino-recipeというところでいくつかレシピが公開されている

https://github.com/padrino/padrino-recipes/tree/master/pluginsPull request welcome!

The Plugin Generator allows you to create Padrino projects based on a template file that contains all the necessary actions needed to create the project. Plugins can also be executed within an existing Padrino application. The plugin generator provides a simple DSL in addition with leveraging Thor to make generating projects a breeze!

Page 61: Start Padrino

こんな感じですね

Page 62: Start Padrino

Rack/Sinatra/Padrinoエコシステム● 成長中と信じてる● 英語圏、けっこう便利Rackミドルウェア~や

Sinatra拡張が多い印象● 日本語情報もどんどん増やそう!

悲しいお知らせの例

Page 63: Start Padrino

一つのヒント● rack-contrib https://github.com/rack/rack-contrib

● sinatra-contrib https://github.com/sinatra/sinatra-contrib

● padrino-contrib https://github.com/padrino/padrino-contrib

● 上記リポジトリでやりたいことはできないか?● 上記リポジトリに入っているライブラリは、gemで簡単に利用できる

● 英語も含めてちゃんとググったか?● いたずらな車輪の再発明より、あるものを使う、あるものにリソースを集中させる方を個人的にすすめて行きたい● そうして、コミュニティが徐々にできていくのでは● 何か目的があって車輪を発明することを咎めるわけではない

Page 64: Start Padrino

最後にPadrinoとSinatraの関係について言っとくか

● PadrinoはSinatraなしでは存在し得ない● PadrinoはSinatraを便利にする道具の一つです● なので、Sinatraをリプレースするものとかじゃないですね。誤解しないでね~。

●協力し、Rails組との抗争に打ち勝とう!

Page 65: Start Padrino

@rails

Page 66: Start Padrino

総括● Sinatra is a fun!● Padrino helps you a lot!

● どんどん使って、どんどん貢献していきましょう(特に Padrino はまだ若いです)

Page 67: Start Padrino

__END__

● ご清聴ありがとうございました

Page 68: Start Padrino

misc

● 今日の資料、と言うかコピペ向けコード● https://gist.github.com/1302918

● スライドシェッア~予定地● http://www.slideshare.net/udzura/startpadrino