Suche senden
Hochladen
Crafting Rails4 Applications読み回 1. Creating Our Own Renderer
•
Als PPTX, PDF herunterladen
•
2 gefällt mir
•
7,547 views
Masato Mori
Folgen
一部有志で行ったCrafting Rails4 Applicationsの読み回資料です
Weniger lesen
Mehr lesen
Technologie
Melden
Teilen
Melden
Teilen
1 von 32
Jetzt herunterladen
Empfohlen
ISUCON4 予選問題で(中略)、”my.cnf”に1行だけ足して予選通過ラインを突破するの術
ISUCON4 予選問題で(中略)、”my.cnf”に1行だけ足して予選通過ラインを突破するの術
Masahiro Nagano
Reactive Kafka with Akka Streams
Reactive Kafka with Akka Streams
scalaconfjp
第7回 初心者向け Ruby on Rails勉強会 in 門前仲町
第7回 初心者向け Ruby on Rails勉強会 in 門前仲町
剛 羽根
同じサービスをECSとOpsWorksで運用してみた
同じサービスをECSとOpsWorksで運用してみた
Jun Ichikawa
Web Operations and Perl kansai.pm#14
Web Operations and Perl kansai.pm#14
Masahiro Nagano
恐るべきApache, Web勉強会@福岡
恐るべきApache, Web勉強会@福岡
Aya Komuro
Ruby 3.0.0 コネタ集
Ruby 3.0.0 コネタ集
Kazuhiro Nishiyama
Customize CakePHP bake
Customize CakePHP bake
Kazuyuki Aoki
Empfohlen
ISUCON4 予選問題で(中略)、”my.cnf”に1行だけ足して予選通過ラインを突破するの術
ISUCON4 予選問題で(中略)、”my.cnf”に1行だけ足して予選通過ラインを突破するの術
Masahiro Nagano
Reactive Kafka with Akka Streams
Reactive Kafka with Akka Streams
scalaconfjp
第7回 初心者向け Ruby on Rails勉強会 in 門前仲町
第7回 初心者向け Ruby on Rails勉強会 in 門前仲町
剛 羽根
同じサービスをECSとOpsWorksで運用してみた
同じサービスをECSとOpsWorksで運用してみた
Jun Ichikawa
Web Operations and Perl kansai.pm#14
Web Operations and Perl kansai.pm#14
Masahiro Nagano
恐るべきApache, Web勉強会@福岡
恐るべきApache, Web勉強会@福岡
Aya Komuro
Ruby 3.0.0 コネタ集
Ruby 3.0.0 コネタ集
Kazuhiro Nishiyama
Customize CakePHP bake
Customize CakePHP bake
Kazuyuki Aoki
Railsチュートリアルの歩き方 (第4版)
Railsチュートリアルの歩き方 (第4版)
Yohei Yasukawa
Crafting Rails4 Applications読み回 7. Managing Application Events with Mountable...
Crafting Rails4 Applications読み回 7. Managing Application Events with Mountable...
Masato Mori
Building Modelsvwith Active Model
Building Modelsvwith Active Model
Shozo Hatta
非エンジニアのためのこれだけは押さえておきたいWEBサービスの基礎技術
非エンジニアのためのこれだけは押さえておきたいWEBサービスの基礎技術
div Inc
新入社員のための大規模ゲーム開発入門 サーバサイド編
新入社員のための大規模ゲーム開発入門 サーバサイド編
infinite_loop
「スキルなし・実績なし」 32歳窓際エンジニアがシリコンバレーで働くようになるまで
「スキルなし・実績なし」 32歳窓際エンジニアがシリコンバレーで働くようになるまで
Shuichi Tsutsumi
こわくない Git
こわくない Git
Kota Saito
人は1ヶ月でエンジニアになれるのか
人は1ヶ月でエンジニアになれるのか
Yamaura Kiyoto
大規模Perl初心者研修を支える技術
大規模Perl初心者研修を支える技術
Daisuke Tamada
学生時代に知っておきたかったWeb技術の学び方の学び方 | リブセンス
学生時代に知っておきたかったWeb技術の学び方の学び方 | リブセンス
Livesense Inc.
人は一ヶ月でエンジニアになれるのか - 詳細解説
人は一ヶ月でエンジニアになれるのか - 詳細解説
Livesense Inc.
いつやるの?Git入門
いつやるの?Git入門
Masakazu Matsushita
Rails初心者レッスン lesson1 3rd edition
Rails初心者レッスン lesson1 3rd edition
Goh Matsumoto
Rails初心者レッスン lesson4 2edition
Rails初心者レッスン lesson4 2edition
Satomi Tsujita
UnicastWS vol.2
UnicastWS vol.2
Unicast Inc.
Dot netcore multiplatform 2
Dot netcore multiplatform 2
shozon
RubyとDSLと メタプログラミングと
RubyとDSLと メタプログラミングと
xiidec
Application Deployment on AWS
Application Deployment on AWS
Eiji Shinohara
Ruby on Rails 入門
Ruby on Rails 入門
Yasuko Ohba
Ruby で扱う LDAP のススメ
Ruby で扱う LDAP のススメ
Kazuaki Takase
スクリプト言語PHP攻略法
スクリプト言語PHP攻略法
Rui Hirokawa
A HUGE CHANGE RAILS 5 IS APPROACHING FAST
A HUGE CHANGE RAILS 5 IS APPROACHING FAST
Kenichi Tachibana
Weitere ähnliche Inhalte
Andere mochten auch
Railsチュートリアルの歩き方 (第4版)
Railsチュートリアルの歩き方 (第4版)
Yohei Yasukawa
Crafting Rails4 Applications読み回 7. Managing Application Events with Mountable...
Crafting Rails4 Applications読み回 7. Managing Application Events with Mountable...
Masato Mori
Building Modelsvwith Active Model
Building Modelsvwith Active Model
Shozo Hatta
非エンジニアのためのこれだけは押さえておきたいWEBサービスの基礎技術
非エンジニアのためのこれだけは押さえておきたいWEBサービスの基礎技術
div Inc
新入社員のための大規模ゲーム開発入門 サーバサイド編
新入社員のための大規模ゲーム開発入門 サーバサイド編
infinite_loop
「スキルなし・実績なし」 32歳窓際エンジニアがシリコンバレーで働くようになるまで
「スキルなし・実績なし」 32歳窓際エンジニアがシリコンバレーで働くようになるまで
Shuichi Tsutsumi
こわくない Git
こわくない Git
Kota Saito
人は1ヶ月でエンジニアになれるのか
人は1ヶ月でエンジニアになれるのか
Yamaura Kiyoto
大規模Perl初心者研修を支える技術
大規模Perl初心者研修を支える技術
Daisuke Tamada
学生時代に知っておきたかったWeb技術の学び方の学び方 | リブセンス
学生時代に知っておきたかったWeb技術の学び方の学び方 | リブセンス
Livesense Inc.
人は一ヶ月でエンジニアになれるのか - 詳細解説
人は一ヶ月でエンジニアになれるのか - 詳細解説
Livesense Inc.
いつやるの?Git入門
いつやるの?Git入門
Masakazu Matsushita
Andere mochten auch
(12)
Railsチュートリアルの歩き方 (第4版)
Railsチュートリアルの歩き方 (第4版)
Crafting Rails4 Applications読み回 7. Managing Application Events with Mountable...
Crafting Rails4 Applications読み回 7. Managing Application Events with Mountable...
Building Modelsvwith Active Model
Building Modelsvwith Active Model
非エンジニアのためのこれだけは押さえておきたいWEBサービスの基礎技術
非エンジニアのためのこれだけは押さえておきたいWEBサービスの基礎技術
新入社員のための大規模ゲーム開発入門 サーバサイド編
新入社員のための大規模ゲーム開発入門 サーバサイド編
「スキルなし・実績なし」 32歳窓際エンジニアがシリコンバレーで働くようになるまで
「スキルなし・実績なし」 32歳窓際エンジニアがシリコンバレーで働くようになるまで
こわくない Git
こわくない Git
人は1ヶ月でエンジニアになれるのか
人は1ヶ月でエンジニアになれるのか
大規模Perl初心者研修を支える技術
大規模Perl初心者研修を支える技術
学生時代に知っておきたかったWeb技術の学び方の学び方 | リブセンス
学生時代に知っておきたかったWeb技術の学び方の学び方 | リブセンス
人は一ヶ月でエンジニアになれるのか - 詳細解説
人は一ヶ月でエンジニアになれるのか - 詳細解説
いつやるの?Git入門
いつやるの?Git入門
Ähnlich wie Crafting Rails4 Applications読み回 1. Creating Our Own Renderer
Rails初心者レッスン lesson1 3rd edition
Rails初心者レッスン lesson1 3rd edition
Goh Matsumoto
Rails初心者レッスン lesson4 2edition
Rails初心者レッスン lesson4 2edition
Satomi Tsujita
UnicastWS vol.2
UnicastWS vol.2
Unicast Inc.
Dot netcore multiplatform 2
Dot netcore multiplatform 2
shozon
RubyとDSLと メタプログラミングと
RubyとDSLと メタプログラミングと
xiidec
Application Deployment on AWS
Application Deployment on AWS
Eiji Shinohara
Ruby on Rails 入門
Ruby on Rails 入門
Yasuko Ohba
Ruby で扱う LDAP のススメ
Ruby で扱う LDAP のススメ
Kazuaki Takase
スクリプト言語PHP攻略法
スクリプト言語PHP攻略法
Rui Hirokawa
A HUGE CHANGE RAILS 5 IS APPROACHING FAST
A HUGE CHANGE RAILS 5 IS APPROACHING FAST
Kenichi Tachibana
Symfony2でより良いソフトウェアを作るために
Symfony2でより良いソフトウェアを作るために
Atsuhiro Kubo
初めてのPerl
初めてのPerl
arvelt s
Rails解説セミナー: リリースノート解説編
Rails解説セミナー: リリースノート解説編
Yohei Yasukawa
Railsの開発環境作るぞ
Railsの開発環境作るぞ
Yoichi Toyota
Appsody でnodejsのアプリを立ち上げよう!
Appsody でnodejsのアプリを立ち上げよう!
Daisuke Hiraoka
Google I/O 2013 報告会 Android Studio と Gradle
Google I/O 2013 報告会 Android Studio と Gradle
Keishin Yokomaku
Rails解説セミナー: Rails国際化 (I18n) API
Rails解説セミナー: Rails国際化 (I18n) API
Yohei Yasukawa
Rhodes mobile Framework (Japanese)
Rhodes mobile Framework (Japanese)
Yoshi Sakai
Ppl
Ppl
Seizan Shimazaki
Play framework 2.0のちょっとした紹介
Play framework 2.0のちょっとした紹介
Ryo RKTM
Ähnlich wie Crafting Rails4 Applications読み回 1. Creating Our Own Renderer
(20)
Rails初心者レッスン lesson1 3rd edition
Rails初心者レッスン lesson1 3rd edition
Rails初心者レッスン lesson4 2edition
Rails初心者レッスン lesson4 2edition
UnicastWS vol.2
UnicastWS vol.2
Dot netcore multiplatform 2
Dot netcore multiplatform 2
RubyとDSLと メタプログラミングと
RubyとDSLと メタプログラミングと
Application Deployment on AWS
Application Deployment on AWS
Ruby on Rails 入門
Ruby on Rails 入門
Ruby で扱う LDAP のススメ
Ruby で扱う LDAP のススメ
スクリプト言語PHP攻略法
スクリプト言語PHP攻略法
A HUGE CHANGE RAILS 5 IS APPROACHING FAST
A HUGE CHANGE RAILS 5 IS APPROACHING FAST
Symfony2でより良いソフトウェアを作るために
Symfony2でより良いソフトウェアを作るために
初めてのPerl
初めてのPerl
Rails解説セミナー: リリースノート解説編
Rails解説セミナー: リリースノート解説編
Railsの開発環境作るぞ
Railsの開発環境作るぞ
Appsody でnodejsのアプリを立ち上げよう!
Appsody でnodejsのアプリを立ち上げよう!
Google I/O 2013 報告会 Android Studio と Gradle
Google I/O 2013 報告会 Android Studio と Gradle
Rails解説セミナー: Rails国際化 (I18n) API
Rails解説セミナー: Rails国際化 (I18n) API
Rhodes mobile Framework (Japanese)
Rhodes mobile Framework (Japanese)
Ppl
Ppl
Play framework 2.0のちょっとした紹介
Play framework 2.0のちょっとした紹介
Crafting Rails4 Applications読み回 1. Creating Our Own Renderer
1.
Crafting Rails4 Applications 1.
Creating Our Own Renderer
2.
Renderer • render()メソッドによりクライアントに返す形式 を柔軟に変更することができる Post.allの結果をJSONに変換して返す app/views/shared/not_authenticatedで始まる所定の ファイル内容を返し,HTTPレスポンスコード401を返す
3.
Creating Rails Plugins
4.
rails plugin new
pdf_renderer • Rails pluginのgenerator Treeで出したディレクトリツリー ライブラリ本体 テスト用ディレクトリ
5.
testディレクトリ以下の構造 dummy以下にあるのはどうみてもRailsアプリそのものです.本当にありがとうございました
6.
${PLUGIN_NAME}.gemspec • Gemのサマリ情報を書く
7.
Rake tasks • Plugin用のRakeタスクがちょいちょい –
Rake releaseでRubygemsにpushできるらしい – testの実行はrake test
8.
Dummy application • 基本的に普通のRailsプロジェクトと同じ –
アプリケーション名はdummy • rails new dummy でできるファイル群とほぼ同じ – 一応diffしてみたけれども,確かにほとんど同じ
9.
PDF Rendererを作る
10.
actionpack/lib/action_controller/metal/renderers.rb • とりあえず眺めてみると, – ActionController::Renderers::_renderersにSetが入ってい る –
_renderersはActionController::Renderers::add()で追加で きる • add(key, &block)の中では_render_option_#{key}を define_methodしているだけ – デフォルトで:json, :js, :xmlが定義されている • 何気にJSONPのオプション(callback: true)も用意されていた
11.
PDF Renderer作ろうぜ • こういうのを作りたい •
rendererを拡張すれば,Railsの流儀に従ってい い感じにPDF出力できるじゃん!!
12.
Pluginにgemのdependency追加 • Pluginでgemを使う場合,Gemfileではなくgemspecに書く – 書いた後は普通にbundleすればdependしたgemが入る pdf_renderer.gemspec •
この辺の定義はGemfileにあった Gemfile この記述でgemspecのdependencyを読み込んでいるみたい
13.
とりまPrawn irb/pryでかきましょー
14.
振る舞いとテストまで書いてみる
15.
動作確認・開発の方法 • test/dummyにcdすれば,普通にrails sできる –
普通のRailsアプリと同様に開発できるよー lib/pdf_renderer.rb この記述で:pdfをrender()が解釈できるようになる
16.
MIME typeの設定 • テストを見ると,content-type:
application/pdfが勝手に付与されて いるが,これはたまたまPDFの設定がデフォルトであったから Actionpack/lib/action_dispatch/http/mime_types.rb • もしここに設定されていないcontent-typeを指定したい 場合,config/initializers/mime_types.rbに書けば良い Rails newデフォルトのconfig/initializers/mime_types.rb スマホ向けの出し分けなんかで触ったことある人もいるのでは?
17.
Rendererを潜る
18.
Render()の流れ 引数を展開して正規化されたoptions hashを作る Renderのoptionが色々な形式に対応しているのはこの辺がやってる render(:new)とか,render(partial: true)みたいなものを受けて,正しい Action_nameに変換したりする HTTP
bodyに関係の無い部分をoptionsに沿って処理する. status: 401とかそういうの view_renderer.render(view_context, options)を呼び出す view_contextはActionView::Baseのインスタンス
19.
_render_template周り • lookup_contextがformat情報を保持しているっぽい – どのテンプレートが呼び出されるのかの選択に使われる view_renderer view_context
20.
Controller -> Viewへの値渡しについて •
Rails 2.3系まで – ViewがControllerのインスタンス変数を取りに行って いた • Rails 3.0から – ControllerからViewに渡すインスタンス変数を明示的 に指定できるようになった こうするとViewにインスタンス変数が渡らなくなる
21.
拡張するぜ
22.
AbstractController::Layouts • Renderingの_normalize_optionsをoverrideし た ・・・
23.
もっと拡張
24.
ActionController::Rendering • DoubleRenderErrorのチェックとか, status/content_type/location optionの処理
25.
ActionController::Renderers • 特定のsymbol渡しで特殊処理させるための ひな形達
26.
ActionController::Instrumentation • 処理時間の計測
27.
ActionController::Streaming • HTTP/1.1 Chunkedを使ったRailsのStreaming
API
28.
render と render_to_string •
違いは見ればわかるよね? – pdf_rendererみたいにrenderした中身をstring取得したい時には便利 – render_to_stringは,DoubleRenderErrorは発生しない (ActionController::Rendering#renderに実装されているため) – 同じ理由でrender_to_stringはctionController::Instrumentationによっ てベンチマークされない
29.
話を戻すと • render_to_string({}) – _normalize_options()でoptions
= template: ”#{controller_name}/#{action_name}” を生成している
30.
何もしなくても:template optionは使える pdf_renderer.rb
31.
おまけ:ActionController::Base ApplicationController < ActionController::Baseで読み込まれるmodule群
32.
まとめ • PDFフォーマットのファイルを返す pdf_rendererを作る中で,Railsのrendering stackを追ってみたよ • Rendering
stackはモジュール化されているの で,renderや_normalize_optionsなどのエント リポイントで任意の処理を追加することができ るぞ
Jetzt herunterladen