Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
RSpecの実行速度を3.5倍にした話
Search
Naomichi Yamakita
June 23, 2015
20
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
RSpecの実行速度を3.5倍にした話
Naomichi Yamakita
June 23, 2015
More Decks by Naomichi Yamakita
See All by Naomichi Yamakita
現場で試したAI駆動開発
naomichi
0
81
ClickHouse活用によるパフォーマンス改善について
naomichi
0
260
SRE が駆動するプロダクト品質と アーキテクチャ進化の仕組み
naomichi
0
250
今こそ聞きたい!ガバメントクラウド
naomichi
0
73
AWSにおける横断的なログ分析と コストの管理
naomichi
1
7.3k
失敗から始まるリアーキテクト: SREの実践例で見る改善の道筋
naomichi
0
950
プロダクト横断で可視化する ダッシュボードの開発
naomichi
0
430
第一回ライブラリ開発について考える会
naomichi
0
170
Serverless Application Repositoryでトイルを削減する
naomichi
0
380
Featured
See All Featured
SEOcharity - Dark patterns in SEO and UX: How to avoid them and build a more ethical web
sarafernandez
0
300
How to make the Groovebox
asonas
2
2.5k
Bash Introduction
62gerente
615
220k
The Curious Case for Waylosing
cassininazir
1
560
Getting science done with accelerated Python computing platforms
jacobtomlinson
2
520
Skip the Path - Find Your Career Trail
mkilby
1
250
How to audit for AI Accessibility on your Front & Back End
davetheseo
0
580
A Soul's Torment
seathinner
8
3.7k
SEO Brein meetup: CTRL+C is not how to scale international SEO
lindahogenes
2
2.9k
Digital Projects Gone Horribly Wrong (And the UX Pros Who Still Save the Day) - Dean Schuster
uxyall
1
3.3k
Leveraging LLMs for student feedback in introductory data science courses - posit::conf(2025)
minecr
1
420
VelocityConf: Rendering Performance Case Studies
addyosmani
331
25k
Transcript
RSpecの実行速度を3.5倍にした話 Shinjuku.rb #26 2015/6/23 株式会社メタップス プロダクト統括部 SPIKE戦略推進チーム 山北 尚道
None
SPIKEとは • テクノロジーでお金の在り方を変える o 決済サービス § 決済手数料のかからない決済サービス o SPIKEコイン §
保有額に対して年間1%の割合で増えるプリペ イド型の電子マネー o SPIKEマーケット § SPIKE会員様を対象とした商材の優待販売
SPIKEにおけるRSpecの勘所 • コントローラやモデル、ライブラリクラス 単位でテストケースを作成 • Spring (Application preloader) を併用 •
Circle CIによるテストの自動化 • テストカバレッジは一定の割合以上を維持
開発者の環境
最近の課題 テストが遅い
何故時間がかかるのか? 1. Gem読み込みすぎ? 2. テストコードの書き方? 3. Docker? 4. I/O? 5.
MySQL? 6. SQLiteにしてみるとか?←今ココ
ベンチマークを取ってみることに • テスト対象: コントローラクラス o フォームウィザードを提供するクラス(入力→確認 →完了) o HTTP通信、DBアクセス (I/O)
のコードが含まれる • テスト数: 10
結果 テスト環境 検証結果 (実行時間 - 初期化時 間) MySQL+ Redis on
Docker 61.97s MySQL + Redis on localhost 48.75s SQLite + Redis on localhost 17.69s ※各検証における初期化時間は約16秒 約3.5倍高速化!
テストコードをSQLiteに対応させる施策1 # ERROR: Index name 'fk_xxx...xxx_idx' on table 'xxx' is
too long; the limit is 62 characters… # BEFORE: add_index "fk_xxx...xxx_idx", ["is_valid"], name: "yyy", using: :btree # AFTER: add_index "fk_xxx_idx", ["is_valid"], name: "yyy", using: :btree インデックス名が長いとエラーが発生
テストコードをSQLiteに対応させる施策2 # 大文字で'USD'という値を登録 INSERT INTO xxx(code) VALUES('USD'); # MySQL (※BINARY属性なし)
xxx.where(code: 'usd').count > 1 # SQLite xxx.where(code: 'usd').count > 0 レコードの大文字・小文字は区別される
テストコードをSQLiteに対応させる施策3 # MySQL: pry(#<xxx::xxx::xxxController>)> orders.first[0] => Sun, 10 Nov 2013
# SQLite: pry(#<xxx::xxx::xxxController>)> orders.first[0] => "2013-11-10” エイリアスカラムが日付として認識されない SELECT DATE(xxx_at) AS xxx_at
テストコードをSQLiteに対応させる施策4 # MySQL pry(#<xxx::xxx::xxxController>)> ActiveRecord::Base.connection.select('SELECT * FROM users') => #<ActiveRecord::Result:0x007fe681252ff0
# SQLite pry(#<xxx::xxx::xxxxController>):1> ActiveRecord::Base.connection.select('SELECT * FROM users') NoMethodError: protected method `select' called for # 一部のメソッドがサポートされていない (!)
SQLite版RSpecの実行 デモ
以上です ご清聴ありがとうございました。 github.com/naomichi-y