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 の --tag オプションがこんなに便利だったなんて...
Search
Shogo Kawahara
June 17, 2026
24
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
rspec の --tag オプションがこんなに便利だったなんて...
Shogo Kawahara
June 17, 2026
More Decks by Shogo Kawahara
See All by Shogo Kawahara
strudel-rb について
kawahara
0
19
Google Apps Script で Ruby を動かす
kawahara
0
410
Rubyで音声「データ」を作る
kawahara
0
92
データベースだけじゃないN+1とその対策
kawahara
0
1.4k
CoderDojo 千葉県総武線沿線の取り組み
kawahara
1
440
SendGrid Template Engine 奮闘記
kawahara
0
390
Featured
See All Featured
Groundhog Day: Seeking Process in Gaming for Health
codingconduct
0
350
Why Our Code Smells
bkeepers
PRO
340
58k
Visualizing Your Data: Incorporating Mongo into Loggly Infrastructure
mongodb
49
10k
The Anti-SEO Checklist Checklist. Pubcon Cyber Week
ryanjones
0
230
Become a Pro
speakerdeck
PRO
31
6.2k
コードの90%をAIが書く世界で何が待っているのか / What awaits us in a world where 90% of the code is written by AI
rkaga
63
46k
The Curse of the Amulet
leimatthew05
2
14k
Site-Speed That Sticks
csswizardry
13
1.5k
Connecting the Dots Between Site Speed, User Experience & Your Business [WebExpo 2025]
tammyeverts
11
1k
The untapped power of vector embeddings
frankvandijk
2
1.9k
Mozcon NYC 2025: Stop Losing SEO Traffic
samtorres
1
530
Build your cross-platform service in a week with App Engine
jlugia
234
19k
Transcript
rspec の –tag オプション がこんなに便利だったなんて.. かわはら しょうご @ooharabucyou
[email protected]
kyobashi.rb
2026.06.16
最近の悩み 昨今のAI駆動による成果もあってか コミット量 & Pull Request 量はこんな感じになっている
最近の悩み そして、CI の実行累計時間もこんな感じになっている
最近の悩み • 同じ Repository をいじる人もそこそこ多い & 自動生成ファイルもそこそこあるので GitHub の Merge
Queue を有効にして事故を防いでいる ◦ これは、複数人が同時にマージしようとすると、 GitHub 側でそれぞれが順番にマージされた状態で テストを流し、問題ないものをマージしていくという素晴らしい仕組みである • 結構な頻度で 「CI待ち」が発生する ◦ worktree とかで作業したりするのだが、並列作業にも限度というものがある
ミッション: CIを早くしろ
ボトルネックを探る -> 直す • 目標を定める ◦ まずは目標ありき! X分以内であれば業務を止めないだろうという推測 ◦ コストや、CIの実行範囲
(スコープ) はトレードオフがあるので、それぞれの優先順位度を決めよう • 実は、vCPU を使いきれてなかった ◦ ちょうど 50% で打ち止めになってた。 ◦ 2 vCPU あるから、fork して2並列でプロセス回せばいいよね ◦ rspec なら、parallel_test を使う • CI 自体のマシン並列度の調整 • … (こういう細いのをひたすらこなす) … • 早くなった!!
いっぱいある RSpec にメスを入れる • ともかくいっぱいテストがある ◦ ほぼ100%カバレッジがあるというのはいいことだが、時間はかかるよね • ディレクトリ構成が微妙 ◦
Rails アプリの構成に対応した rspec ディレクトリ構成になっているだけなので、テストに対する意 味としてディレクトリ構成を失っている
テストについての話題に関する本を読んでみよう • 『脳に収まるコードの書き方』(Mark Seemann著) の 12.2.2 スローテストによると (p.189) この節では、データベースが関わるテストを行う概略 を説明します。ただし、問題があります。テストが遅く
なりがちなのです。... ... いろいろやり方はありますが、日々の作業を行う既 存のソリューションの隣に2つめの Visual Studio ソ リューションを作るのが簡単です。
つまり、 • 現状の rspec はデータベースに繋げたり、Contrller のテストのため request spec (実際に Rack
にリクエスト投げて、特定のレスポンスがかえるかテスト) をやってい たりといろんなものが混ざっちゃっている... • クリーンアーキテクチャは前提としているので、ビジネスロジックなんかはデータ ベース・フレームワーク非依存だが、モノによってはDBありきのテストを行ってい る。
理想 少量だが遅い request test 中速 DBが必要な類 高速 DB不要なテスト テスト量 DBに
関わる処理 をカット E2E (別管理) この辺は DBを用意 する 環境ごと用 意する これがディレクトリやワークスペースが別 だったらよかったのになぁ。。
そこで、rspec の tag を使う • https://rspec.info/features/3-12/rspec-core/command-line/tag/ • describe や、it といった構造には「タグ」を付与できる
• rspec コマンドは –tag により、実行条件を指定できる • 構造に対して、タグを利用していた場合 include したりする場合には使っていたも のの、--tag オプションのことを何もしらなかったのだ。 RSpec.configure do |config| config.include SomeHelpers, domain: :something end # describe domain: :something ブロックに対して SomeHelper を include して使えるようにする
意外と充実していた –tag の挙動 • https://rspec.info/features/3-12/rspec-core/command-line/tag/ • 単純なフィルターだけでなく、否定条件や複合条件がある • dbが必要なテストには it
‘something’, db_required: true などとして、rspec . –tag ~db_required などとすると、db_required なものを除外して実行できる • データベースが必要なテストをデータベースセットアップのない環境のジョブに逃が せる
長年使っているツールでもドキュメントを読み直すと発見あるよね • そんなこともあるので、見直しのタイミングでドキュメント読もう