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
1
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
57
データベースだけじゃないN+1とその対策
kawahara
0
1.3k
CoderDojo 千葉県総武線沿線の取り組み
kawahara
1
420
SendGrid Template Engine 奮闘記
kawahara
0
370
Featured
See All Featured
Making the Leap to Tech Lead
cromwellryan
135
9.9k
B2B Lead Gen: Tactics, Traps & Triumph
marketingsoph
0
140
The SEO identity crisis: Don't let AI make you average
varn
0
490
How to Create Impact in a Changing Tech Landscape [PerfNow 2023]
tammyeverts
55
3.4k
So, you think you're a good person
axbom
PRO
2
2.1k
Typedesign – Prime Four
hannesfritz
42
3.1k
30 Presentation Tips
portentint
PRO
1
320
Neural Spatial Audio Processing for Sound Field Analysis and Control
skoyamalab
0
330
The agentic SEO stack - context over prompts
schlessera
0
810
AI Search: Implications for SEO and How to Move Forward - #ShenzhenSEOConference
aleyda
1
1.3k
Tips & Tricks on How to Get Your First Job In Tech
honzajavorek
1
540
Ethics towards AI in product and experience design
skipperchong
2
310
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 なものを除外して実行できる • データベースが必要なテストをデータベースセットアップのない環境のジョブに逃が せる
長年使っているツールでもドキュメントを読み直すと発見あるよね • そんなこともあるので、見直しのタイミングでドキュメント読もう