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
41
[SaigonRB#21] Ruby Silver & Ruby Gold
blazingrockstorm
0
49
[Roppongi.rb#28] Sentiment-aIというgemを作りました
blazingrockstorm
0
190
Featured
See All Featured
How To Stay Up To Date on Web Technology
chriscoyier
790
250k
How to Grow Your eCommerce with AI & Automation
katarinadahlin
PRO
2
330
<Decoding/> the Language of Devs - We Love SEO 2024
nikkihalliwell
1
360
Tell your own story through comics
letsgokoyo
1
1.1k
Color Theory Basics | Prateek | Gurzu
gurzu
1
490
From Legacy to Launchpad: Building Startup-Ready Communities
dugsong
0
360
Why You Should Never Use an ORM
jnunemaker
PRO
61
10k
Sam Torres - BigQuery for SEOs
techseoconnect
PRO
0
580
Context Engineering - Making Every Token Count
addyosmani
9
1.2k
KATA
mclloyd
PRO
35
16k
Scaling GitHub
holman
464
140k
実際に使うSQLの書き方 徹底解説 / pgcon21j-tutorial
soudai
PRO
203
77k
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