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
AI Search: Implications for SEO and How to Move Forward - #ShenzhenSEOConference
aleyda
1
1.4k
個人開発の失敗を避けるイケてる考え方 / tips for indie hackers
panda_program
123
22k
The Impact of AI in SEO - AI Overviews June 2024 Edition
aleyda
6
1.2k
Amusing Abliteration
ianozsvald
1
330
Pawsitive SEO: Lessons from My Dog (and Many Mistakes) on Thriving as a Consultant in the Age of AI
davidcarrasco
0
250
Creating an realtime collaboration tool: Agile Flush - .NET Oxford
marcduiker
35
2.6k
ピンチをチャンスに:未来をつくるプロダクトロードマップ #pmconf2020
aki_iinuma
128
56k
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
35
3.8k
The Director’s Chair: Orchestrating AI for Truly Effective Learning
tmiket
1
320
GitHub's CSS Performance
jonrohan
1033
470k
Understanding Cognitive Biases in Performance Measurement
bluesmoon
32
3k
Skip the Path - Find Your Career Trail
mkilby
1
240
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