Lock in $30 Savings on PRO—Offer Ends Soon! ⏳
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Rubyで階層構造
Search
ryonext
February 20, 2013
Programming
2
990
Rubyで階層構造
Rubyで階層構造を実現するancestryというgemの話
ryonext
February 20, 2013
Tweet
Share
More Decks by ryonext
See All by ryonext
AWS Lambda の Ruby 対応
ryonext
0
240
TwitterのList編集しやすいやつ作った
ryonext
0
1.8k
validationについて
ryonext
1
800
AWS Lambda と API GatewayでRails使わずに済んだ話
ryonext
8
4.3k
capistrano-bundle_rsync使ったらオートスケールが高速化した話
ryonext
8
2.5k
PumaとUnicornで最近自分が理解したこと
ryonext
13
9.5k
Hubot事例
ryonext
1
1.6k
Redisでバッチ処理を冗長化しつつ排他制御
ryonext
0
2.1k
CircleCIとwercker
ryonext
3
1.2k
Other Decks in Programming
See All in Programming
Socio-Technical Evolution: Growing an Architecture and Its Organization for Fast Flow
cer
PRO
0
360
【CA.ai #3】Google ADKを活用したAI Agent開発と運用知見
harappa80
0
320
愛される翻訳の秘訣
kishikawakatsumi
3
330
從冷知識到漏洞,你不懂的 Web,駭客懂 - Huli @ WebConf Taiwan 2025
aszx87410
2
2.7k
AIコーディングエージェント(skywork)
kondai24
0
180
認証・認可の基本を学ぼう後編
kouyuume
0
240
SwiftUIで本格音ゲー実装してみた
hypebeans
0
410
生成AIを利用するだけでなく、投資できる組織へ
pospome
2
350
Go コードベースの構成と AI コンテキスト定義
andpad
0
130
Cap'n Webについて
yusukebe
0
140
俺流レスポンシブコーディング 2025
tak_dcxi
14
8.9k
実はマルチモーダルだった。ブラウザの組み込みAI🧠でWebの未来を感じてみよう #jsfes #gemini
n0bisuke2
3
1.2k
Featured
See All Featured
The Art of Programming - Codeland 2020
erikaheidi
56
14k
Writing Fast Ruby
sferik
630
62k
Designing for humans not robots
tammielis
254
26k
Thoughts on Productivity
jonyablonski
73
5k
Documentation Writing (for coders)
carmenintech
76
5.2k
4 Signs Your Business is Dying
shpigford
186
22k
Rails Girls Zürich Keynote
gr2m
95
14k
What’s in a name? Adding method to the madness
productmarketing
PRO
24
3.8k
GraphQLの誤解/rethinking-graphql
sonatard
73
11k
Chrome DevTools: State of the Union 2024 - Debugging React & Beyond
addyosmani
9
1k
A better future with KSS
kneath
240
18k
Context Engineering - Making Every Token Count
addyosmani
9
520
Transcript
Rubyで階層構造
自己紹介 • Twitter @ryonext • 新横浜の某所から来ました
話の内容 • Rubyで階層構造を実現するancestryという gemの話をします
発端 • デブサミ行きました • t-wadaさんの”SQLアンチパターン”聞きま した • ナイーブツリーの話
親IDだけもつような構造、良くな い • Comments • id • parent_id • comment
• のような設計 • => 深さがどれぐらいになるかわからない し、再起処理でDQNクエリが走る
解決策として • 経路列挙、というのが上げられていた id path comment 1 1/ aaa 2
1/2/ bbb 3 1/2/3/ ccc 4 1/4 ddd
このgem入れれば実装してくれる • https://github.com/stefankroes/ancestry
使い方通りに以下の様なデータを • rails g model group name • Create migration:
rails g migration add_ancestry_to_group ancestry:string • Add index to migration: add_index gruop, :ancestry (UP) / remove_index gruop, :ancestry (DOWN) • Migrate your database: rake db:migrate • Add to app/models/gruop.rb: has_ancestry
こんなデータ作ってみた • 宇宙 • 銀河系 – 太陽系 • 水 •
金 • 地 – 日本 • 関東 • 東京 • 渋谷 • 浅草 • グンマー – アメリカ – イギリス • 火 • 木 • 土 • 天 • 海 • その他 – 冥ちゃん・・・(´;ω;`)
ここで子孫全部取る処理 • 宇宙 < 僕の子孫あつまれー(^o^)ノ • 銀河系 – 太陽系 •
水 • 金 • 地 – 日本 • 関東 • 東京 • 渋谷 • 浅草 • グンマー – アメリカ – イギリス • 火 • 木 • 土 • 天 • 海 • その他 – 冥ちゃん・・・(´;ω;`)
クエリが一個しか発行されない • Group.find_by_name("宇宙").descendants • Group Load (0.4ms) SELECT "groups".* FROM
"groups" WHERE (groups.ancestry like '1/%' or groups.ancestry = '1') • => どの階層でやっても応答速度が同一
Rubyで階層構造 • 階層構造実現したければこれ使えばいいん じゃないでしょうか。 • ファイル/ディレクトリ • 組織階層 • ディスカッションツリー
でも・・・ • 親がよく変わるケース(ディレクトリと か)だと親が変わると鬼update文走るよ ね、ってことを思った。