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
[Roppongi.rb#38] RubyによるStrategyパターンの実践
Search
Hoang Duc Quan
January 14, 2026
0
1
[Roppongi.rb#38] RubyによるStrategyパターンの実践
Hoang Duc Quan
January 14, 2026
Tweet
Share
More Decks by Hoang Duc Quan
See All by Hoang Duc Quan
[Roppongi.rb#31]Roda紹介
blazingrockstorm
0
92
[SaigonRB#20] Clean code in Ruby
blazingrockstorm
0
32
[SaigonRB#21] Ruby Silver & Ruby Gold
blazingrockstorm
0
35
[Roppongi.rb#28] Sentiment-aIというgemを作りました
blazingrockstorm
0
160
Featured
See All Featured
Evolution of real-time – Irina Nazarova, EuRuKo, 2024
irinanazarova
9
1.1k
Prompt Engineering for Job Search
mfonobong
0
140
How to Think Like a Performance Engineer
csswizardry
28
2.4k
Chrome DevTools: State of the Union 2024 - Debugging React & Beyond
addyosmani
9
1k
AI: The stuff that nobody shows you
jnunemaker
PRO
1
160
Unlocking the hidden potential of vector embeddings in international SEO
frankvandijk
0
140
sira's awesome portfolio website redesign presentation
elsirapls
0
110
It's Worth the Effort
3n
187
29k
SEOcharity - Dark patterns in SEO and UX: How to avoid them and build a more ethical web
sarafernandez
0
100
A better future with KSS
kneath
240
18k
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
37
6.2k
Sharpening the Axe: The Primacy of Toolmaking
bcantrill
46
2.6k
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