りゅうじの学習blog

学習したことをアウトプットしていきます。

2021年9月15日 パーフェクト Ruby on Rails 第3章押さえておきたいRailsの基本機能

3-2 Rack

Rackは、RubyでWebアプリケーションを開発するための、最小限でモジュール化された適応性の高いインターフェースを提供します。HTTPのリクエストとレスポンスを可能な限りシンプルな方法でラップすることで、ウェブサーバー、ウェブフレームワーク、そしてその間にあるソフトウェア(いわゆるミドルウェア)のAPIを単一のメソッドコールに統一して抽出します。

その詳細はRack仕様に記載されており、すべてのRackアプリケーションはこれに準拠する必要があります。

元々はPythonWSGI(Web Server Gateway Interface)という企画を元に提案されたものです。 RackはwebサーバーとRubyで作られたフレームワークアプリケーションをつなぐ インターフェイス)です。 (Rubyで作られた、という点が大事です。Railsだけではありません)
参照のgithubの意図からすると、例えば「PHPでもRackと呼ぶのか?」という疑問に対しては「NO」と言えるでしょう。

アプリケーションサーバ

Railsを動かすためのサーバーです。webサーバーとのリクエストやレスポンスの処理が出来ます。
Railsのデフォルトのアプリケーションサーバーーは"puma" rails new したらGemfileに書いてある 他にも"webrick"などがある。但しpumaより遅い。

Rackの規約

  • callメソッドを定義する
  • callメソッドは慣例的にenvあるいはenvironmentと命名する引数を一つ受け取る
  • callメソッドは次の値を配列型で戻り値として返す必要がある
  • HTTPのステータスコードを表す数値オブジェクト
  • HTTPヘッダーを表すハッシュオブジェクト
  • レスポンスボディとなる文字列を含んだ配列風オブジェクト

Rackに対する現時点での見解

pumaとか他にもあるアプリケーションサーバrailsなどのフレームワークをつなぐインターフェースであり、もし今後、pumaより早いアプリケーションサーバが登場したとして、それをrailsにも使えるようにしてくれる、インターフェースがRackなのかなと思う。 Rackがあるおかげで相性が悪いから使えないとか発生しない。

学習した上で残る疑問点

自作のRackを作らなければならない状況がわからないです。

ひとこと

現段階では一言で言えません🙇‍♂️

参照

Rack github
アプリケーションサーバー
Rackでwebフレームワークを自作する
【Ruby on Rails】アプリケーションサーバ「Puma」について