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
520
LTの敷居を下げる / Lower the threshold for LT
sinsoku
2
450
CircleCIの高速化🚀 / CircleCI faster
sinsoku
3
1.6k
Other Decks in Technology
See All in Technology
プロダクトエンジニアに必要な「いい感じ」に作る能力 〜たくさん作れる時代に、どこまで作るかの決め方〜
jnishime_dresscode
2
1.4k
Sigmaユーザーのための有用リソース一挙公開 & Sigmaで使えるMCP #sigma_ucj /useful-resources-for-sigma-computing-users-and-mcps-with-sigma
shinyaa31
0
160
V8コントリビュート超入門
riyaamemiya
0
150
10分で知る最近のOmarchy
komagata
0
130
Snowflakeのコスト最適化を支えるアーキテクチャ設計
ktatsuya
0
790
Bet AI Day 2026丨AIによって本質に戻るシステムリスク管理
layerx
PRO
0
1.3k
enechainの内製セルフサービスプラットフォーム
hiyosi
0
140
Where Is JetBrains AI Heading- — Central CLI, Air Alpha, and the Agentic Development Stack
x5gtrn
PRO
0
150
「図書館」という名前のままでいいのか -Code4Lib JAPANカンファレンス2026 アンカンファレンス報告- / Code4Lib JAPAN Conference 2026: Unconference Report
ykiyota
0
110
Screen Lens - 今見てる画面を翻訳する
komagata
0
120
作り直せるコードは迅速に 作り直せないDBは慎重に - AI時代のプロダクトエンジニアが「判断の不可逆性」で開発速度を変える話
kinosuke01
0
280
振り返りこそエンジニアの本領
negima
0
340
Featured
See All Featured
How STYLIGHT went responsive
nonsquared
100
6.3k
From Legacy to Launchpad: Building Startup-Ready Communities
dugsong
0
320
[SF Ruby Conf 2025] Rails X
palkan
2
1.4k
Writing Fast Ruby
sferik
630
63k
The Success of Rails: Ensuring Growth for the Next 100 Years
eileencodes
47
8.3k
Ethics towards AI in product and experience design
skipperchong
2
360
From π to Pie charts
rasagy
0
360
Context Engineering - Making Every Token Count
addyosmani
9
1.1k
Why Our Code Smells
bkeepers
PRO
340
58k
The untapped power of vector embeddings
frankvandijk
2
1.9k
What Being in a Rock Band Can Teach Us About Real World SEO
427marketing
0
1.1k
Bootstrapping a Software Product
garrettdimon
PRO
306
120k
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