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
⚡️Ruby、オブジェクト指向、デザイン / Ruby, OOP, Design
Search
Takumi Shotoku
November 05, 2020
Technology
1.8k
5
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
⚡️Ruby、オブジェクト指向、デザイン / Ruby, OOP, Design
Omotesando.rb #56
https://omotesandorb.connpass.com/event/192551/
Takumi Shotoku
November 05, 2020
More Decks by Takumi Shotoku
See All by Takumi Shotoku
TypeProf 開発レポート 2026-05 / TypeProf Dev Report 2026-05
sinsoku
1
140
Automatically generating types by running tests
sinsoku
4
19k
滅・サービスクラス🔥 / Destruction Service Class
sinsoku
8
2.9k
テストを書かないためのテスト/ Tests for not writing tests
sinsoku
1
310
ドメインの本質を掴む / Get the essence of the domain
sinsoku
2
360
"型"のあるRailsアプリケーション開発 / Typed Rails application development
sinsoku
11
3.1k
Let's get started with Ruby && Rails Tips
sinsoku
0
510
LTの敷居を下げる / Lower the threshold for LT
sinsoku
2
450
CircleCIの高速化🚀 / CircleCI faster
sinsoku
3
1.6k
Other Decks in Technology
See All in Technology
Software Supply Chain Attackからクラウド環境を守るためにできること
lhazy
2
290
英語が話せなくてもKubeConスタッフに参加した話
yusuke427
1
1k
Adding Right-to-Left support to your web application with CSS logical properties — Lessons from Redmine
vividtone
0
160
Android skills に学ぶ
kokiko
0
130
平文パスワードはログに“残り” ── 肝心の侵入は“痕跡すら残らない”
kuroneko13
0
110
【GCC2026】TrueHDRIを用いたルックデブ環境とライティングテクニック
bandainamcostudios
PRO
0
140
【GCC2026】鉄拳8でのVFX開発事例
bandainamcostudios
PRO
0
150
その“隠したつもり”が命取り ── 自前と平文をやめて「正解」に委ねる
kuroneko13
0
140
なぜ Temporal の大小比較には compare しかないのか / Why Does Temporal Only Have compare() for Comparisons
kazukihayase
1
190
AIコーディングの次。コードレビューと理解負荷を解消して組織の開発生産性を高める
moongift
PRO
2
2.7k
国家プロジェクトを支える「さくらONE」 大規模LLM開発におけるGPU障害を乗り越えるクラスター運用戦略
gpuunite_official
0
180
同じWAFが、攻撃の“形”は弾く── 正当な“形”の不正は通す
kuroneko13
0
260
Featured
See All Featured
A Tale of Four Properties
chriscoyier
163
24k
How To Speak Unicorn (iThemes Webinar)
marktimemedia
1
540
I Don’t Have Time: Getting Over the Fear to Launch Your Podcast
jcasabona
35
2.8k
Building Applications with DynamoDB
mza
96
7.2k
ピンチをチャンスに:未来をつくるプロダクトロードマップ #pmconf2020
aki_iinuma
128
56k
Building AI with AI
inesmontani
PRO
1
1.1k
JAMstack: Web Apps at Ludicrous Speed - All Things Open 2022
reverentgeek
1
570
Measuring Dark Social's Impact On Conversion and Attribution
stephenakadiri
2
260
Why Your Marketing Sucks and What You Can Do About It - Sophie Logan
marketingsoph
0
390
RailsConf 2023
tenderlove
30
1.5k
30 Presentation Tips
portentint
PRO
1
370
Winning Ecommerce Organic Search in an AI Era - #searchnstuff2025
aleyda
1
2.1k
Transcript
⚡ Ruby、オブジェクト指向、設計 Omotesando.rb #56 2020/11/05 1
自己紹介 • 名前: 神速 • 会社: メドピア株式会社 • 所属: CTO室SRE
• GitHub: @sinsoku (画像右上) • Twitter: @sinsoku_listy (画像右下) 2
⚠ ちゃんと学びたい人は ! をたくさん読んでください。 3
オブジェクト指向について • プログラミングの設計手法 • データと処理をまとめる • Rubyのすべてはオブジェクト • 純粋なオブジェクト指向言語 4
オブジェクト指向は設計手法 プログラミング言語には依存しない 5
C言語でも(頑張れば)OOPできる1 #include <stdio.h> struct user_data { char name[20]; }; char
*name(struct user_data *this) { return this -> name; } char first(struct user_data *this) { return this -> name[0]; } struct user_class { struct user_data obj; char *(*name)(struct user_data *this); char (*first)(struct user_data *this); }; int main() { struct user_data this = { "foo" }; struct user_class u = { this, name, first }; printf("%s\n", u.name(&this)); printf("%c\n", u.first(&this)); } 1 普通はやらないと思う 6
Rubyだと簡単 class User attr_reader :name def initialize(name) @name = name
end def first name[0] end end u = User.new("foo") puts u.name puts u.first 7
オブジェクト指向な設計とは? 8
9
オブジェクト指向 • 設計に正解は存在しない • UserLogin, User#login のどちらでも良い • 他メンバーが読みやすいかどうか •
名前から処理を予想できるか? • ビジネスの用語とズレがないか? 10
オブジェクト指向のSOLID • 単一責任の原則 • 解放閉鎖の原則 • リスコフの置換原則 • インターフェース分離の原則 •
依存性逆転の原則 11
12
普段そこまで考えてない 13
コードは短く、読みやすく書く2 • 短いコードは正義 • クラスやモジュールを作り過ぎない • 最初は単純なメソッドで済ませる • メタプロで短くするのは控える •
パフォーマンスは後で考える " 2 去年の銀座Railsのスライドから引用 14
考えていること 15
get_xxx を避ける Rubyだとgetterは名詞を使うことが多い。 class User # bad # def get_items;
end # good def my_items; end end 16
! 英語にして違和感がない3 クラスを名詞、メソッドを動詞にして違和感ないか? class User # user login def login;
end # user search by word def search_by(word); end end メソッドが長い場合、クラスを抽出できる可能性がある。 3 Railsのメソッド名を参考にする事が多い。 17
インスタンス変数を使うようにする ! な例 class Shop def total_price(item, coupon: nil) if
coupon item.price - coupon.discount else item.price end end end 18
インスタンス変数を使うようにする ! な例。インスタンス変数の分だけ短くなる。 class Item def total_price(coupon: nil) if coupon
price - coupon.discount else price end end end 19
脳内メモリを使わない foo -> bar -> buz -> piyo の ような呼び出しだと変数の値
を覚えるのが大変。 class A def foo bar end def bar buz end def buz piyo end end 20
脳内メモリを使わない 一度に覚えておくことを減ら したい。 class A def foo x = bar
y = buz z = piyo end end 21
イミュータブル ! 引数を破壊したり、ループを使っている。 def cool_items(items, service_charge) items.each do |item| next
if item.xxx? item.price += service_charge end items end 22
イミュータブル ! 関数型プログラミング的 def cool_items(items, service_charge) items.select { |item| item.xxx?
} .map { |item| Item.new(price: item.price + service_charge) end end 23
まとめ? • 設計の用語はコミュニケーション用 • みんな普段そこまで考えているの・・・? • 短いコードを書こうとすると良い感じになる • 気がする 24