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
rspec の --tag オプションがこんなに便利だったなんて...
Search
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
Shogo Kawahara
June 17, 2026
2
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
Rubyで音声「データ」を作る
kawahara
0
60
データベースだけじゃないN+1とその対策
kawahara
0
1.3k
CoderDojo 千葉県総武線沿線の取り組み
kawahara
1
420
SendGrid Template Engine 奮闘記
kawahara
0
370
Featured
See All Featured
[RailsConf 2023 Opening Keynote] The Magic of Rails
eileencodes
31
10k
The Invisible Side of Design
smashingmag
301
52k
Building Experiences: Design Systems, User Experience, and Full Site Editing
marktimemedia
0
550
How to Grow Your eCommerce with AI & Automation
katarinadahlin
PRO
1
220
Measuring Dark Social's Impact On Conversion and Attribution
stephenakadiri
2
230
New Earth Scene 8
popppiees
3
2.4k
Color Theory Basics | Prateek | Gurzu
gurzu
0
380
Mozcon NYC 2025: Stop Losing SEO Traffic
samtorres
1
270
The Cult of Friendly URLs
andyhume
79
6.9k
Build The Right Thing And Hit Your Dates
maggiecrowley
39
3.2k
Marketing Yourself as an Engineer | Alaka | Gurzu
gurzu
0
250
YesSQL, Process and Tooling at Scale
rocio
174
15k
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 なものを除外して実行できる • データベースが必要なテストをデータベースセットアップのない環境のジョブに逃が せる
長年使っているツールでもドキュメントを読み直すと発見あるよね • そんなこともあるので、見直しのタイミングでドキュメント読もう