$30 off During Our Annual Pro Sale. View Details »
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
食べログで動いている自作ライブラリのお話
Search
Tsukasa OISHI
December 10, 2009
Programming
0
310
食べログで動いている自作ライブラリのお話
Tsukasa OISHI
December 10, 2009
Tweet
Share
More Decks by Tsukasa OISHI
See All by Tsukasa OISHI
怖くないメモリ肥大化
tsukasa_oishi
1
99
SLI/SLO をストリーム アラインドチームに導入した話
tsukasa_oishi
0
190
JITをたどるとそこはYARVの中
tsukasa_oishi
0
580
The Cacher in the Rye
tsukasa_oishi
1
5.9k
ISeqで遊ぼう
tsukasa_oishi
0
5.2k
Rubyを30倍速くした話
tsukasa_oishi
0
1.2k
はてブ砲をくらったときのお話
tsukasa_oishi
0
2.2k
奥さんとプログラミングを両立させる方法
tsukasa_oishi
0
86
MiyazakiResistanceを作ってみたよ
tsukasa_oishi
0
1k
Other Decks in Programming
See All in Programming
Tinkerbellから学ぶ、Podで DHCPをリッスンする手法
tomokon
0
130
Microservices rules: What good looks like
cer
PRO
0
1.5k
マスタデータ問題、マイクロサービスでどう解くか
kts
0
110
Integrating WordPress and Symfony
alexandresalome
0
160
AtCoder Conference 2025「LLM時代のAHC」
imjk
2
510
ローターアクトEクラブ アメリカンナイト:川端 柚菜 氏(Japan O.K. ローターアクトEクラブ 会長):2720 Japan O.K. ロータリーEクラブ2025年12月1日卓話
2720japanoke
0
730
組み合わせ爆発にのまれない - 責務分割 x テスト
halhorn
1
150
DevFest Android in Korea 2025 - 개발자 커뮤니티를 통해 얻는 가치
wisemuji
0
150
UIデザインに役立つ 2025年の最新CSS / The Latest CSS for UI Design 2025
clockmaker
18
7.5k
tsgolintはいかにしてtypescript-goの非公開APIを呼び出しているのか
syumai
7
2.2k
AIの誤りが許されない業務システムにおいて“信頼されるAI” を目指す / building-trusted-ai-systems
yuya4
6
3.7k
Claude Codeの「Compacting Conversation」を体感50%減! CLAUDE.md + 8 Skills で挑むコンテキスト管理術
kmurahama
0
290
Featured
See All Featured
I Don’t Have Time: Getting Over the Fear to Launch Your Podcast
jcasabona
34
2.6k
RailsConf 2023
tenderlove
30
1.3k
A designer walks into a library…
pauljervisheath
210
24k
Typedesign – Prime Four
hannesfritz
42
2.9k
Visualization
eitanlees
150
16k
Speed Design
sergeychernyshev
33
1.4k
GraphQLの誤解/rethinking-graphql
sonatard
73
11k
Java REST API Framework Comparison - PWX 2021
mraible
34
9k
Making the Leap to Tech Lead
cromwellryan
135
9.7k
Fantastic passwords and where to find them - at NoRuKo
philnash
52
3.5k
GitHub's CSS Performance
jonrohan
1032
470k
No one is an island. Learnings from fostering a developers community.
thoeni
21
3.6k
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!