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
7.3k
ActiveAdmin Better Practices@関西Ruby会議06
skuroki
0
390
進行中の開発プロジェクトで増えていくテストを自動で回し続けるために行ったいくつかのこと
skuroki
11
45k
Refactoring Ruby Edition in-house reading
skuroki
0
200
Other Decks in Programming
See All in Programming
2年のAppleウォレットパス開発の振り返り
muno92
PRO
0
180
副作用をどこに置くか問題:オブジェクト指向で整理する設計判断ツリー
koxya
1
270
Vibe codingでおすすめの言語と開発手法
uyuki234
0
160
Kotlin Multiplatform Meetup - Compose Multiplatform 외부 의존성 아키텍처 설계부터 운영까지
wisemuji
0
160
AIによるイベントストーミング図からのコード生成 / AI-powered code generation from Event Storming diagrams
nrslib
1
1k
AI前提で考えるiOSアプリのモダナイズ設計
yuukiw00w
0
210
メルカリのリーダビリティチームが取り組む、AI時代のスケーラブルな品質文化
cloverrose
2
450
AtCoder Conference 2025
shindannin
0
920
PostgreSQLで手軽にDuckDBを使う!DuckDB&pg_duckdb入門/osc25hi-duckdb
takahashiikki
0
230
Navigation 3: 적응형 UI를 위한 앱 탐색
fornewid
1
530
perlをWebAssembly上で動かすと何が嬉しいの??? / Where does Perl-on-Wasm actually make sense?
mackee
0
290
AIで開発はどれくらい加速したのか?AIエージェントによるコード生成を、現場の評価と研究開発の評価の両面からdeep diveしてみる
daisuketakeda
1
530
Featured
See All Featured
The Art of Programming - Codeland 2020
erikaheidi
56
14k
XXLCSS - How to scale CSS and keep your sanity
sugarenia
249
1.3M
Performance Is Good for Brains [We Love Speed 2024]
tammyeverts
12
1.4k
Bootstrapping a Software Product
garrettdimon
PRO
307
120k
Building a Scalable Design System with Sketch
lauravandoore
463
34k
The Illustrated Guide to Node.js - THAT Conference 2024
reverentgeek
0
220
Reflections from 52 weeks, 52 projects
jeffersonlam
355
21k
Technical Leadership for Architectural Decision Making
baasie
0
200
What’s in a name? Adding method to the madness
productmarketing
PRO
24
3.9k
Balancing Empowerment & Direction
lara
5
840
Art, The Web, and Tiny UX
lynnandtonic
304
21k
svc-hook: hooking system calls on ARM64 by binary rewriting
retrage
1
48
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を使うのは低コスト ◦ とりあえず使い始めて、徐々に移行していくのがよさげ
おしまい