Upgrade to PRO for Only $50/Year—Limited-Time Offer! 🔥
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
7.3k
ActiveAdmin Better Practices@関西Ruby会議06
skuroki
0
380
進行中の開発プロジェクトで増えていくテストを自動で回し続けるために行ったいくつかのこと
skuroki
11
45k
Refactoring Ruby Edition in-house reading
skuroki
0
190
Other Decks in Programming
See All in Programming
CSC509 Lecture 14
javiergs
PRO
0
220
Full-Cycle Reactivity in Angular: SignalStore mit Signal Forms und Resources
manfredsteyer
PRO
0
130
30分でDoctrineの仕組みと使い方を完全にマスターする / phpconkagawa 2025 Doctrine
ttskch
3
830
これだけで丸わかり!LangChain v1.0 アップデートまとめ
os1ma
6
1.8k
開発に寄りそう自動テストの実現
goyoki
1
910
S3 VectorsとStrands Agentsを利用したAgentic RAGシステムの構築
tosuri13
6
310
非同期処理の迷宮を抜ける: 初学者がつまづく構造的な原因
pd1xx
1
710
TestingOsaka6_Ozono
o3
0
140
Go コードベースの構成と AI コンテキスト定義
andpad
0
120
20251212 AI 時代的 Legacy Code 營救術 2025 WebConf
mouson
0
120
Github Copilotのチャット履歴ビューワーを作りました~WPF、dotnet10もあるよ~ #clrh111
katsuyuzu
0
100
ローターアクトEクラブ アメリカンナイト:川端 柚菜 氏(Japan O.K. ローターアクトEクラブ 会長):2720 Japan O.K. ロータリーEクラブ2025年12月1日卓話
2720japanoke
0
730
Featured
See All Featured
The Straight Up "How To Draw Better" Workshop
denniskardys
239
140k
Building an army of robots
kneath
306
46k
ReactJS: Keep Simple. Everything can be a component!
pedronauck
666
130k
10 Git Anti Patterns You Should be Aware of
lemiorhan
PRO
659
61k
Visualization
eitanlees
150
16k
Dealing with People You Can't Stand - Big Design 2015
cassininazir
367
27k
GraphQLとの向き合い方2022年版
quramy
50
14k
実際に使うSQLの書き方 徹底解説 / pgcon21j-tutorial
soudai
PRO
196
70k
Put a Button on it: Removing Barriers to Going Fast.
kastner
60
4.1k
KATA
mclloyd
PRO
32
15k
CSS Pre-Processors: Stylus, Less & Sass
bermonpainter
359
30k
Typedesign – Prime Four
hannesfritz
42
2.9k
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を使うのは低コスト ◦ とりあえず使い始めて、徐々に移行していくのがよさげ
おしまい