Skip to content

Latest commit

 

History

History
362 lines (204 loc) · 6.42 KB

phase-5-9.md

File metadata and controls

362 lines (204 loc) · 6.42 KB

Phase 5.9: ORMの限界とActiveRecordの理解

← 前へ: Phase 5.8 | 目次 | 次へ: Phase 6.1 →

概要

実行前に共通セットアップと各Phaseの確認手順を確認してください。演習コードはwork/で前のPhaseから引き継ぎます。

このフェーズでは、これまで自分で構築してきたORM(Model / BaseModel)を振り返り、

  • どこまでできているのか
  • どこが足りないのか
  • なぜ本物のORMは複雑なのか

を分析します。

ここでは新しい機能はほとんど実装しません。

代わりに、

「自分で作ったものを壊すように分析する」

ことが目的です。


このフェーズの目的

以下を説明できる状態になること:

  • 自作ORMの限界
  • ORMが解決している問題の本質
  • ActiveRecordの設計意図
  • フレームワークの複雑さの理由

到達目標

  • 自作ORMの弱点を具体的に説明できる
  • ActiveRecordの機能が「なぜ必要か」説明できる
  • ORMのトレードオフを理解できる
  • フレームワークを批判的に読める

前提

  • Phase 5.8(BaseModel)完了
  • 自作ORMが動作している

演習課題


Step 1: 自作ORMの機能一覧を整理する

まずは、自分のORMが何をできるかを整理します。

課題

以下を書き出してください:

  • できること
    • 例:all / find / where / save / destroy / validation
  • できないこと
    • 例:複雑なクエリ、関連など

Step 2: 「簡単なはずなのに難しいこと」を探す

次に、「実装してみると難しそうなこと」を探します。

問い

以下を実現しようとするとどうなるか考えてください:

  • 複数テーブルを結合する(JOIN)
  • 条件を組み合わせる
  • 並び替え(ORDER BY)
  • ページネーション

気づき

「Queryは思ったより複雑」


Step 3: N+1問題を理解する

課題

以下のようなコードを想像してください:

users = User.all

users.each do |user|
  posts = Post.where(user_id: user.id)
end

問い

  • SQLは何回発行されるか?
  • なぜ問題なのか?

気づき

「ORMは簡単に見えてパフォーマンス問題を隠す」


Step 4: Transactionの必要性を考える

問い

以下のケースを考える:

  • ユーザー作成
  • 投稿作成

途中で失敗した場合どうなるか?

気づき

「複数操作は一貫性を保つ必要がある」


Step 5: ActiveRecordのコードを読む

ここで初めて本物を見ます。

対象:

  • ActiveRecord の Model
  • save, where, find

課題

以下を観察してください:

  • メソッドの多さ
  • 内部構造の複雑さ
  • 抽象化のレベル

問い

  • なぜこんなに複雑なのか?

Step 6: 自作ORMとActiveRecordを比較する

課題

以下の観点で比較してください:

観点 自作ORM ActiveRecord
機能数
柔軟性
学習コスト
可読性
パフォーマンス

Step 7: ORMのトレードオフを理解する

問い

ORMは何を解決しているか?

  • SQLを書かなくてよい
  • オブジェクトで扱える

しかし同時に:

  • パフォーマンスが見えにくい
  • 魔法が増える

気づき

「便利さと透明性はトレードオフ」


Step 8: 「ORMを使うべきか?」を考える

問い

  • すべてORMでよいか?
  • 生SQLを書くべき場面は?

Step 9: フレームワークの価値を再定義する

問い

Railsは何を提供しているのか?

  • ただの便利ツールか?
  • 設計の集合体か?

Step 10: 自分の設計を振り返る

課題

以下を振り返る:

  • どこで設計が良かったか
  • どこで苦しんだか
  • どこをもう一度作り直したいか

最終課題(最重要)


自作ORMの限界レポートを作成する

以下を含めたレポートを作成してください:

1. 自作ORMの機能一覧

2. 足りない機能

3. 実装が難しかった部分

4. ActiveRecordとの差分

5. ORMのメリット・デメリット

6. ORMを使うべき場面 / 使うべきでない場面


発展課題


課題1: associationを設計する

user.posts

→ どう実装するか?


課題2: eager loadingを考える

→ N+1をどう防ぐか?


課題3: Queryオブジェクトを作る


提出物


1. レポート(最重要)

ORMの理解をまとめる


2. サンプルコード

必要に応じて


レビュー観点

  • 抽象的でなく具体的に語れているか
  • 自作と既存を比較できているか
  • トレードオフを理解しているか
  • 批判的に考えられているか

よくある失敗


❌ 「ActiveRecordすごい」で終わる

→ なぜすごいかを説明する


❌ 自作を過小評価する

→ 学習価値は非常に高い


❌ 表面的な比較になる

→ 内部構造に踏み込む


このフェーズの本質

このフェーズで得るべき理解は:

フレームワークとは魔法ではなく、 「現実の複雑さを隠すための設計の積み重ね」である


カリキュラムの総まとめ

あなたはここまでで:

  • HTTPサーバを実装し
  • Webフレームワークを構築し
  • ORMを自作した

これはつまり:

「Webアプリケーションの構造を自分の言葉で説明できる」

状態です。


最後に

この研修の目的は、

  • Railsを使えるようになることではなく
  • Railsを理解すること

です。

そして最終的には、

「AIが生成したコードの良し悪しを判断できるエンジニアになること」

です。

ここまでの経験が、その基盤になります。


← 前へ: Phase 5.8 | 目次 | 次へ: Phase 6.1 →