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
食べログで動いている自作ライブラリのお話
Search
Tsukasa OISHI
December 10, 2009
Programming
320
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
食べログで動いている自作ライブラリのお話
Tsukasa OISHI
December 10, 2009
More Decks by Tsukasa OISHI
See All by Tsukasa OISHI
怖くないメモリ肥大化
tsukasa_oishi
1
120
SLI/SLO をストリーム アラインドチームに導入した話
tsukasa_oishi
0
210
JITをたどるとそこはYARVの中
tsukasa_oishi
0
590
The Cacher in the Rye
tsukasa_oishi
1
6k
ISeqで遊ぼう
tsukasa_oishi
0
5.3k
Rubyを30倍速くした話
tsukasa_oishi
0
1.3k
はてブ砲をくらったときのお話
tsukasa_oishi
0
2.3k
奥さんとプログラミングを両立させる方法
tsukasa_oishi
0
110
MiyazakiResistanceを作ってみたよ
tsukasa_oishi
0
1.1k
Other Decks in Programming
See All in Programming
Signal Forms: Details & Live Coding @enterJS 2026 in Mannheim
manfredsteyer
PRO
0
160
例外の正しい扱い方 そのエラー try-catchして大丈夫?
jinwatanabe
0
260
Spring Security 実践 ─ GraphQL APIで実務に役立つ 認証・認可 を学ぶ
wagyu
0
250
Oxcを導入して開発体験が向上した話
yug1224
4
320
エンジニアと一緒にテストコードの設計と実装を改善した話
mototakatsu
0
200
Snowflake Summitでの新機能 CoCo / CoWork / snowflake-summit-2026-overall-what-new-coco
tatsuhiro
1
150
並列実装の現場、2ヶ月間実務でAIを使い倒したAIもPCも私も限界が近い
ming_ayami
0
130
LLMによるContent Moderationの本番運用の裏側と品質担保への挑戦
suikabar
3
710
不変条件と整合性境界—ビジネスが決める設計判断と実現パターン / Invariants and Consistency Boundaries
nrslib
14
5.5k
気づいたらRubyで100作品 ー クリエイティブコーディングが生活の一部になるまで / 100 Ruby Sketches Later: How Creative Coding Became Part of My Life
chobishiba
3
590
Webフレームワークの ベンチマークについて
yusukebe
0
170
その問い、本当に正しいですか?AI時代のエンジニアに必要な哲学と認知科学 / ai-philosophy-cognitive-science
minodriven
11
5.8k
Featured
See All Featured
What the history of the web can teach us about the future of AI
inesmontani
PRO
1
620
HU Berlin: Industrial-Strength Natural Language Processing with spaCy and Prodigy
inesmontani
PRO
0
410
Improving Core Web Vitals using Speculation Rules API
sergeychernyshev
21
1.5k
Navigating Team Friction
lara
192
16k
Keith and Marios Guide to Fast Websites
keithpitt
413
23k
The innovator’s Mindset - Leading Through an Era of Exponential Change - McGill University 2025
jdejongh
PRO
1
200
Dominate Local Search Results - an insider guide to GBP, reviews, and Local SEO
greggifford
PRO
0
200
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
35
3.5k
Distributed Sagas: A Protocol for Coordinating Microservices
caitiem20
333
22k
Gemini Prompt Engineering: Practical Techniques for Tangible AI Outcomes
mfonobong
2
440
Chrome DevTools: State of the Union 2024 - Debugging React & Beyond
addyosmani
10
1.2k
Building Adaptive Systems
keathley
44
3.1k
Transcript
食べログで動 食べログで動 いている自作 いている自作 ライブラリの ライブラリの お話 お話
おおいしつかさ tsukasa_oishi@twitter http://www.kaeruspoon.net/ 食べログ iPhone
自作ライブラリ
既存のものではダメなのか ・必要な機能を持つライブラリがない ・食べログのニーズに微妙に合わない ・開発が止まっている
自作 ・必要な機能を持つライブラリがない →ないなら作ればいい ・食べログのニーズに微妙に合わない →欲している仕様にぴったり ・開発が止まっている →開発者が自分、または同僚
食べログで動いている 自作ライブラリ ActsAsReadonlyable改 ActsAsS tateMachine改 TabelogThread MiyazakiResistance TabelogA sync DrySumpException Disgu iseToBusinessCode WordScoop TcHash EnhancedColumnType ExceptionLogger
食べログで動いている 自作ライブラリ ActsAsReadonlyable改 ActsAsS tateMachine改 TabelogThread MiyazakiResistance TabelogA sync DrySumpException Disgu iseToBusinessCode WordScoop TcHash EnhancedColumnType ExceptionLogger
ActsAsReadonlyable改
ActsAsReadonlyableとは master slave2 slave1 CUD R R AP
障害が起こると master slave2 slave1 CUD R AP
Webサーバーが死んでも大丈夫 APサーバが死んでも大丈夫 DBサーバが死ぬとサービスに影響あり
Webサーバーが死んでも大丈夫 APサーバが死んでも大丈夫 DBサーバが死んでも大丈夫 当然こうしたい
障害が起こると master slave2 slave1 CUD R AP
自動切り離し MySQL::ConnectionError発生 コネクションプール群から該当 サーバのプールを除外 リトライ
運用も楽に メンテナンス等でも 気軽にDBを落とせる ようになった
TabelogAsync
TabelogAsyncとは ▪非同期処理ライブラリ ・backgroundrbが暴走する ・Mongrelを通したくない ・堅牢性はそれほど必要ない ▪仮名のまま ・公開するときはカッコいい名前に
Rails側 TabelogAsync::Thrower.send( :class => :async_log, :args => “good” ) lib/worker
class AsyncLog < TabelogAsync::WorkerBase def do_work(args) logger.info args end end
当初の設計思想 軽くてすぐに終わって同期する必要のない 大量の処理をさばく 重い処理は従来通りbackgroundrbで
いつの間にか 気軽に使えるので重い処理も回すように なった シングルスレッドなので遅延が数時間レベ ルにまで拡大 いくら非同期でも遅れすぎ
Rails Rinda TabelogAsync normal heavy Rinda
WordScoop
WordScoopとは ▪キーワード検索ライブラリ ・はてなダイアリーキーワード ・高速 ・軽量 ・HTML対応 ▪命名 ・奥さん
登録 5 μs 検索 3 ms
高速 ▪キーワード登録 1.399998 s (1語 : 0.000005 s) ▪キーワード検索(1000回) 3.519995
s (1回 : 0.003520 s) 軽量 インデックス構築後 56Mバイト キーワード数 262380語 検索対象文字数 8789字
使い方
キーワード登録 Index = WordScoop.new(['クリスマス', '鍋']) キーワード追加 Index << 'はくさい' キーワード検索
index.search(“クリスマスは鍋にしようか。鍋には はくさいだよね”)
キーワード登録 Index = WordScoop.new(['クリスマス', '鍋']) キーワード追加 Index << 'はくさい' キーワード検索
index.search(“クリスマスは鍋にしようか。鍋には はくさいだよね”) #=> ['クリスマス', '鍋', '鍋', 'はくさい']
HTML変換URLの登録 index.link_url = %Q|<a href="http://cookpad.com/レシピ/%s">%s</a>| HTML文章への自動リンク付与 index.filter_html(“クリスマスは鍋にしようか”)
HTML変換URLの登録 index.link_url = %Q|<a href="http://cookpad.com/レシピ/%s">%s</a>| HTML文章への自動リンク付与 index.filter_html(“クリスマスは鍋にしようか”) #=> %Q|<a href=”http://cookpad.com/レシピ/クリスマス”>
クリスマス</a>は<a href=”http://cookpad.com/レシピ/鍋“> 鍋</a>にしようか|
gem install word_scoop
今後の機能追加予定 ▪検索をさらに高速に ・HTMLの自動リンクアルゴリズム の改良 ・AhoCorasick(エイホ-コラシック)法 の採用 ▪さらに軽量に
・DoubleArrayの採用
まとめ
自作 ・必要な機能を持つライブラリがない →ないなら作ればいい ・食べログのニーズに微妙に合わない →欲している仕様にぴったり ・開発が止まっている →開発者が自分、または同僚
ライブラリが充実すると、開発・運用 ともに楽になる 作る課程も楽しい この世界に貢献ができる ライブラリを作ると みんなが幸せになる
コミットログは英語で
おしまい thanks!