>100 Views
November 14, 25
スライド概要
Professional Ruby and Rails programmer in Tokyo.
知るとレベルアップ!? Rubyを使いこなすための 前提知識 @Roppongi.rb#29
もとつねの日常 @daily_mototsune Ruby on Railsを中心に扱っているフリーランスエンジニア ドメインモデリングからAWSでの運用、スクラム運営やチームビルディ ングなどなど楽しくやらせてもらってます 普段はOmotesando.rbやGinza.rbによくいます 🍷♨✈🏎
松山楽しみですね
宣伝 RubyKaigi 2025 Day4に 道後温泉本館の飛翔の間にいきます 興味ある方は @daily_mototsune まで
今日は私がRubyを使って開発して きた中で早く知っておきたかった内 容の共有です
Rubyといえば
オブジェクト指向言語
全てがオブジェクト *手練れが多ければ小ネタ
オブジェクト指向を知ることでよりRuby を理解することができる
オブジェクト指向言語とは オブジェクト指向言語とは、プログラミング言語のうち、互いに関連するデータ の集合とそれらに対する手続き群をひとまとめにした「オブジェクト」をプログラ ムの基本的な構成単位として扱うことができるもの。 IT用語辞典 e-Words https://e-words.jp/w/オブジェクト指向言語.html
オブジェクト指向の基本概念 ● クラスとオブジェクト : ○ クラスは設計図、オブジェクトはその実体。 ○ 実世界の概念(例:車、銀行口座)を、状態(属性)と振る舞い(メソッド)に分けて表現 する。 ● 状態と振る舞いの統合 : ○ 状態と操作を一体にすることで、データの隠蔽や管理の一元化を実現。 ○ 例:Car クラスが color や model といったデータと、 drive といった動作を持つ。
手続き型言語からオブジェクト指向への進化 ● 手続き型言語( C言語等)の設計 : ○ 当時はデータ(構造体)と手続き(関数)が分離していた。 ○ 構造化設計やモジュール化により業務プロセスを反映していたが、変更時に管理が 難しい面があった。 ● 対してオブジェクト指向は : ○ 実世界の実体を模倣してプログラムに落とし込めるように設計されている。 ○ データと処理を一つにまとめることで、システム全体の一貫性と柔軟性が向上。
手続き型言語
オブジェクト指向言語
#include <stdio.h>
typedef struct {
int width;
int height;
} Rectangle;
int area(Rectangle *r) {
return r->width * r->height;
}
int main() {
Rectangle rect = {4, 5};
int a = area(&rect);
printf("面積: %d\n", a);
return 0;
}
class Rectangle
def initialize(width, height)
@width = width
@height = height
end
def area
@width * @height
end
end
rect = Rectangle.new(4, 5)
puts "面積: #{rect.area}"
なぜオブジェクト指向言語は現実を切り取るのか ● オブジェクト指向設計はそもそもはシミュレーションを行うために開発 されたSimulaという言語が起源 ● 現実世界の実体(分子)をオブジェクトとして表現した方がオブジェクト 間の相互作用や全体の結果を見やすかった
オブジェクト指向言語を使う上で必要なの は適切にモデリングできるスキル
クラス設計とドメインモデリングのコツ ● 実世界の抽象化 : ○ 必要な情報のみを選び出し、その概念に対する振る舞いを実装。 ○ 例:現実の車全体を表現するのではなく、「走る」「止まる」という振る舞いと「色」や「速 度」といった属性を取捨選択する。 ● 単一責任原則( SRP)と高凝集・低結合 : ○ 各クラスは1つの責任に絞る。 ○ オブジェクト間の依存関係を最小限に保つことで、修正時の影響範囲を限定。
例えばUserクラス ● Railsで認証機能を実装する際、 Userクラスにログインに必要な認証情報を持つ場合がよくあ る ● しかしUserクラスはサービスを利用する人間を抽象化したクラスだとすると Userクラスの属性 として認証情報を持たせるのは正しくないと言えるかもしれない ● Userクラスをユーザー認証するためだけに使っているのであれば問題が起きないが、 Userク ラスに機能を追加していくと Userクラスの責務が曖昧になり保守性の低いクラスになってし まう恐れがある
正しく*モデリングすることで 保守性の高いコードが実現できる *正しさは状況により変化する
おすすめのスライド https://speakerdeck.com/moro/identifying-user-idenity
Rubyはオブジェクト指向言語なので 正しくモデリングする知識をつけてレベ ルアップ!