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
Sponsored
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
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
130
Automatically generating types by running tests
sinsoku
4
18k
滅・サービスクラス🔥 / Destruction Service Class
sinsoku
8
2.8k
テストを書かないためのテスト/ Tests for not writing tests
sinsoku
1
300
ドメインの本質を掴む / Get the essence of the domain
sinsoku
2
350
"型"のあるRailsアプリケーション開発 / Typed Rails application development
sinsoku
10
3k
Let's get started with Ruby && Rails Tips
sinsoku
0
500
LTの敷居を下げる / Lower the threshold for LT
sinsoku
2
440
CircleCIの高速化🚀 / CircleCI faster
sinsoku
3
1.5k
Other Decks in Technology
See All in Technology
自宅LLMの話
jacopen
1
580
LayerX コーポレートエンジニアリング室におけるサプライチェーンセキュリティへの取り組み / Supply Chain Security at LayerX Corporate Engineering
yuyatakeyama
1
280
スキルと MCP ツール、責務をどう分けるか? AI が迷わないインターフェース設計の戦略
cdataj
1
1.1k
Claude Codeをどのように キャッチアップしているか
oikon48
12
8k
AIのReact習熟度を測る
uhyo
2
560
入門!AWS Blocks
ysuzuki
1
120
AIネイティブな開発のサプライチェーンリスク対策 〜激動の開発現場でリスクに立ち向かう〜【ZennFes】
cscengineer
PRO
2
130
やさしいA2A入門
minorun365
PRO
12
1.9k
新しいUbuntu/GNOMEが使いたいからXからWaylandへ移行頑張ってるの巻 2026-06-20
nobutomurata
0
100
FDE という解 ― 暗黙知と明示知をつなぐ、伴走型エンジニアリング ―
otanet
0
160
AIはどのように 組織のアジリティを変えるのか?
junki
3
790
エンジニアリング戦略の作り方 / Crafting Engineering Strategy
iwashi86
21
6.9k
Featured
See All Featured
SEOcharity - Dark patterns in SEO and UX: How to avoid them and build a more ethical web
sarafernandez
0
200
State of Search Keynote: SEO is Dead Long Live SEO
ryanjones
0
200
The AI Search Optimization Roadmap by Aleyda Solis
aleyda
1
5.9k
jQuery: Nuts, Bolts and Bling
dougneiner
66
8.5k
Highjacked: Video Game Concept Design
rkendrick25
PRO
1
390
Building the Perfect Custom Keyboard
takai
2
790
The untapped power of vector embeddings
frankvandijk
2
1.8k
Measuring & Analyzing Core Web Vitals
bluesmoon
9
860
YesSQL, Process and Tooling at Scale
rocio
174
15k
Public Speaking Without Barfing On Your Shoes - THAT 2023
reverentgeek
1
420
Kristin Tynski - Automating Marketing Tasks With AI
techseoconnect
PRO
0
270
HDC tutorial
michielstock
2
710
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