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
[Roppongi.rb#38] RubyによるStrategyパターンの実践
Search
Hoang Duc Quan
January 14, 2026
59
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
[Roppongi.rb#38] RubyによるStrategyパターンの実践
Hoang Duc Quan
January 14, 2026
More Decks by Hoang Duc Quan
See All by Hoang Duc Quan
[Roppongi.rb#31]Roda紹介
blazingrockstorm
0
120
[SaigonRB#20] Clean code in Ruby
blazingrockstorm
0
40
[SaigonRB#21] Ruby Silver & Ruby Gold
blazingrockstorm
0
49
[Roppongi.rb#28] Sentiment-aIというgemを作りました
blazingrockstorm
0
190
Featured
See All Featured
Utilizing Notion as your number one productivity tool
mfonobong
4
600
Tips & Tricks on How to Get Your First Job In Tech
honzajavorek
1
780
Helping Users Find Their Own Way: Creating Modern Search Experiences
danielanewman
31
3.4k
The innovator’s Mindset - Leading Through an Era of Exponential Change - McGill University 2025
jdejongh
PRO
1
350
The Pragmatic Product Professional
lauravandoore
37
7.5k
End of SEO as We Know It (SMX Advanced Version)
ipullrank
3
4.4k
SEO in 2025: How to Prepare for the Future of Search
ipullrank
3
3.8k
Prompt Engineering for Job Search
mfonobong
0
460
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
37
6.6k
Accessibility Awareness
sabderemane
1
220
Mobile First: as difficult as doing things right
swwweet
225
10k
Mozcon NYC 2025: Stop Losing SEO Traffic
samtorres
1
560
Transcript
RubyによるStrategyパターンの実践 2025.12.30
⾃⼰紹介 Hoang Quan (ホアン クアン) GitHub: https://github.com/BlazingRockStorm LinkedIn: https://www.linkedin.com/in/hoang-quan-841 8a7155/
クラウドとバックエンドに特化したシステムエンジ ニア Ruby と AWS と Agile が好き 折り紙インスタグラマー、ドラマー‧パーカッショ ニスト © BlazingRockStorm 1
デザインパターンとは 設計における「共通⾔語」と「型」 再利⽤性 検証済みの解決策 保守性 変更に強い構造 共通⾔語 意図の即時共有 © BlazingRockStorm
2
なぜデザインパターンが重要か 特にRubyにおける重要性とメリット 変更への耐性 ロジックを分離し、既存コー ドへの影響を最⼩限に抑えて 機能拡張 が可能になる テストの容易性 各戦略が独⽴しているため、 ユニットテストが極めてシン
プルになる Rubyの柔軟性 動的型付けとブロックを活⽤ し、他⾔語より 簡潔にパ ターンを実装 できる © BlazingRockStorm 3
Strategyパターンとは? 交換可能なアルゴリズムのカプセル化 カプセル化 ⼀連のアルゴリズムを定義し、それぞれを 独⽴したクラス に閉じ込める 交換可能性 アルゴリズムを利⽤側(クライアント)から 独⽴ して切り替え可能にする
コンポジション 継承ではなく オブジェクトの構成 を利⽤し、実⾏時に振る舞いを選択する © BlazingRockStorm 4
Strategyパターンの例 崩壊:スターレイル HoYoverseが開発したターン制 スペースファ ンタジーRPG プレイヤーは 星穹列⾞ に乗り、銀河を旅する 運命 と
属性 に基づいた戦略的な戦闘システ ム 独⾃の戦闘役割を持つ多彩なキャラクターが登 場 © BlazingRockStorm 5
Strategyパターンの例 崩壊:スターレイル - 財貨の抗争 オートチェスにインスパイアされた戦略的なエ ンドコンテンツ 経済 (⾦貨) を管理し、キャラを雇⽤‧アップグ レードする
「出撃」(4)と「待機」(6)の役割を持つ10⼈の チーム編成 絆 と 投資戦略 によるダイナミックなバフ効 果 例:Belabog(2,4,6), Xianzhou(3,5,7,10) © BlazingRockStorm 6
ソースコード main.rb © BlazingRockStorm 10
財貨の抗争:Strategy実装 Bondのロジックをカプセル化 https://github.com/Viet-CodingStars/ruby-strategy-design-pattern-demo 数値検証(奇数、偶数、連番)のための アルゴリズム群 を定義 これらの振る舞いを 交換可能なStrategyクラス にカプセル化 絆(コンテキスト)は、特定のStrategyを選択して振る舞いを決定
メインロジックから複雑な if-elsifの連鎖 を排除 開放閉鎖の原則 : 既存コードを汚さずに新しい絆のルールを追加可能 © BlazingRockStorm 7
デモプロジェクトの構成 「絆」と「検証ロジック」の分離 BaseStrategy (イン ターフェース) 具体的Strategy (奇 数/偶数/連番) Bondクラス (Strategyを継承)
Main実⾏部 (実⾏時 の選択) © BlazingRockStorm 8
デモの主要構成要素 パターンの役割とコードの対応 Strategies Odd/EvenNumbersStrategy 。 検証アルゴリズム をカ プセル化 Bonds ベロブルグ、巡狩。特定の振
る舞いを持つ ゲーム内の概 念 を表現 Application main.rb。実⾏時に絆を特定 し、 選択されたStrategy を実⾏ © BlazingRockStorm 9
プロジェクトのファイル構造 StrategyとBondの整理 ├── lib/ │ ├── strategies/ │ │ ├──
base_strategy.rb │ │ ├── odd_numbers_strategy.rb │ │ ├── even_numbers_strategy.rb │ │ └── sequence_numbers_strategy.rb │ └── bonds/ │ ├── xianzhou_bond.rb │ ├── wolf_hunt_bond.rb │ └── … (etc.) ├── main.rb ├── README.md © BlazingRockStorm 10
ソースコード lib/strategies/even_numbers_strategy.rb © BlazingRockStorm 10
ソースコード lib/bonds/belobog_bond.rb © BlazingRockStorm 10
ソースコード main.rb © BlazingRockStorm 10
デモの実⾏ Strategyベースのロジックを動かす 使⽤法 : ruby main.rb <絆名>,<数値> 例 1 :
ruby main.rb Belobog,3 → “bronze” 例 2 : ruby main.rb Belobog,1 → “none” 例 3 : ruby main.rb Belobog,6 → “gold” アプリが「ベロブルグ」の絆を特定し、 EvenNumbersStrategy(偶数戦略) を使⽤して結果 を出⼒します。 © BlazingRockStorm 11
None