Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
ActiveDecorator導入の話
Search
KUROKI Shinsuke
September 26, 2012
Programming
5
260k
ActiveDecorator導入の話
札幌Ruby会議に行った勢いで、自分のチームのコードにActiveDecoratorを導入しようとしてみてわかったこと
KUROKI Shinsuke
September 26, 2012
Tweet
Share
More Decks by KUROKI Shinsuke
See All by KUROKI Shinsuke
冴えてるRailsエンジニアの育て方
skuroki
7
11k
伝わるコードレビューのために
skuroki
5
7k
ActiveAdmin Better Practices@関西Ruby会議06
skuroki
0
350
進行中の開発プロジェクトで増えていくテストを自動で回し続けるために行ったいくつかのこと
skuroki
11
45k
Refactoring Ruby Edition in-house reading
skuroki
0
160
Other Decks in Programming
See All in Programming
Boost Your Performance and Developer Productivity with Jakarta EE 11
ivargrimstad
1
1k
労務ドメインを快適に開発する方法 / How to Comfortably Develop in the Labor Domain
yuki21
1
250
RAGの回答精度評価用のQAデータセットを生成AIに作らせた話
kurahara
0
210
ECMAScript、Web標準の型はどう管理されているか / How ECMAScript and Web standards types are maintained
petamoriken
3
370
メモリ最適化を究める!iOSアプリ開発における5つの重要なポイント
yhirakawa333
0
380
Web技術を駆使してユーザーの画面を「録画」する
yukukotani
13
6.3k
これからの時代の新標準!SwiftTestingへの移行とトラブルシューティング
uetyo
0
450
Method Swizzlingを行うライブラリにおけるマルチモジュール設計
yoshikma
0
110
dRuby 入門者によるあなたの身近にあるdRuby 入門
makicamel
4
340
Mergeable Libraryで 高速なアプリ起動を実現しよう!
giginet
PRO
1
1.9k
プログラマのための音楽入門
cheebow
5
550
Rubyのobject_id
qnighy
6
1.3k
Featured
See All Featured
Fireside Chat
paigeccino
31
2.9k
Making the Leap to Tech Lead
cromwellryan
128
8.8k
What’s in a name? Adding method to the madness
productmarketing
PRO
21
3k
Git: the NoSQL Database
bkeepers
PRO
425
64k
Build your cross-platform service in a week with App Engine
jlugia
228
18k
How to Create Impact in a Changing Tech Landscape [PerfNow 2023]
tammyeverts
42
2k
Building Adaptive Systems
keathley
36
2.1k
Adopting Sorbet at Scale
ufuk
72
8.9k
Statistics for Hackers
jakevdp
793
220k
Cheating the UX When There Is Nothing More to Optimize - PixelPioneers
stephaniewalter
278
13k
Building a Modern Day E-commerce SEO Strategy
aleyda
35
6.8k
Robots, Beer and Maslow
schacon
PRO
157
8.1k
Transcript
札幌Ruby会議に行った勢いで ActiveDecoratorを 導入しようとしてみた
[email protected]
誰? • 黒木慎介といいます • AimingでRailsとJS(Backbone.js/CoffeeScript) でブラウザゲームを作る仕事をしています
提供 We're hiring rubyists!
札幌Ruby会議に 行って来た
None
閑話休題
実践的な2つのセッション • 松田明さんと豪華ゲスト陣による 「Rails3レシピブック外伝」 • 浦嶌啓太さんによる 「Ruby on Rails: The
Bad Parts」
両方の発表に登場した "ActiveDecorator"
何? (このスペースはそれを説明するには狭すぎるので ホワイトボードに書きます)
少し前のこと "これは、やっていることとしては完全にビューヘル パー(最後に文字列をhtml_safeしているし)なの で、引数を調整してヘルパーに引っ越せません か?"
ActiveDecoratorは まさにこの問題を解決するのではないか?
しかし、事は慎重に • 自分がいるチームのサービスは既に稼働してい る • 内部で何をしているかわからないものをいきな り導入するのはリスクが高すぎる • 中のコードをちゃんと確認して動作を把握してか ら導入したい
というわけで コードを読んでみた (間違いや不備があったら教えて下さい)
コード読んでみた(1) ActiveDecorator::Decorator#decorate • 引数に取ったオブジェクトに対応したdecorator をextendさせる • "#{クラス名}Decorator"という名前のクラスを自 動的にdecoratorとして扱う • decoratorはActiveDecorator::Helpersをinclude
し、viewの文脈で呼び出せる各種メソッドを利用 可能にする • オブジェクトがActiveRecord::RelationやArrayの インスタンスだった場合、その中の各要素を decorateする • decorateされるオブジェクトに特に制限はない
コード読んでみた(2) decorateはいつ何に対して行われるのか? 1. controllerのrenderの中で a. assignされた各オブジェクトに対して 2. viewのrender partialの中で a.
localに渡した各オブジェクトに対して
動作の把握ができたところで 実際に組み込んでみた
実際に組み込んでみた(1) 直面した問題 • @user.team.link_with_name → MethodMissing • @userはdecorateされるが @user.teamはされない
実際に組み込んでみた(2) 解決策 • 答えは松田さんのスライドの中に • 「関連先をdecorateしたい時は」→関連先を参 照する部分をpartialに切り出す • やってみると、各templateのファイルがすっきり する
• 最初は正直「必要な実装が漏れてるんじゃない の?」と思ったけど、実際やってみて設計意図を 理解した
実際に組み込んでみた(3) やってみての印象 • 現在helperに存在するメソッドをdecoratorに移 行するのは割と大変 ◦ 先述の問題のため ◦ 切り出す必要があるtemplateが1つであるとは限らない •
helperお役御免、ではない ◦ 移行が難しかったり、helperにあるのが妥当であるメソッ ドはある • 新規実装でdecoratorを使うのは低コスト ◦ とりあえず使い始めて、徐々に移行していくのがよさげ
おしまい