← 前へ: Phase 3.3 | 目次 | 次へ: Phase 4.2 →
実行前に共通セットアップと各Phaseの確認手順を確認してください。演習コードはwork/で前のPhaseから引き継ぎます。
このフェーズでは、あえてフレームワークを使わずに素のRackアプリだけで少し大きめのWebアプリケーションを実装します。
その中で、
「なぜフレームワークが必要なのか」
を自分の手で体験します。
以下を説明できる状態になること:
- Rackだけでアプリを書くと何がつらいのか
- フレームワークが解決している問題は何か
- 抽象化が必要になる理由
- 素のRackアプリで複数ページを持つアプリを実装する
- コードがどのように複雑化するかを観察する
- 問題点を言語化できる
- Phase 3.1(Rack理解)完了
以下の仕様を満たすアプリケーションをRackのみで実装してください。
※ Sinatra / Rails 等のフレームワークは使用禁止
簡易的な「ユーザー一覧アプリ」を作成します。
GET /
- シンプルなHTMLを表示
GET /users
- ユーザーの一覧を表示(配列でOK)
GET /users/:id
- 指定IDのユーザー情報を表示
POST /users
- パラメータを受け取り、配列に追加
- Sinatra
- Rails
- ルーティングライブラリ
- テンプレートエンジン(ERBも禁止)
- Rack
- Ruby標準ライブラリ
case env["PATH_INFO"]
when "/"
...
when "/users"
...
endbody = "<h1>Hello</h1>"req = Rack::Request.new(env)
req.params実装しながら以下を意識してください:
- pathごとの条件分岐が増える
- 見通しが悪くなる
- 可読性が落ちる
- 変更がつらい
- ヘッダ設定
- レスポンス生成
- どこに何を書くべきか不明確
まずは動くものを作る
/users → /users/:id → POST と増やす
以下を考える:
- どこがつらいか?
- 何が繰り返されているか?
- Rackアプリ一式
以下を列挙してください:
- 書いていてつらかった点
- 将来的に問題になりそうな点
以下を自分の言葉で説明:
「なぜフレームワークが必要なのか」
- 問題を正しく認識できているか
- 抽象化の必要性に気づいているか
- 「つらさ」を具体的に説明できているか
- Rackの仕様確認
- HTTPの確認
- 実装の生成
→ あえて汚くなってOK
→ それが学び
→ まずはベタに書く
→ 少し規模を大きくすることが重要
この課題のゴールは:
「つらさ」を体験すること
このフェーズで出てきた問題をもとに、
次のフェーズでは:
- ルーティング
- コントローラ
を導入していきます。
フレームワークは最初から存在したわけではありません。
「つらさ」から生まれています
その原点を、このフェーズで体験してください。