【パーフェクト Ruby on Rails】を読む - その12
3-2 Rack
Rackは、RubyでWebアプリケーションを開発するための、最小限でモジュール化された適応性の高いインターフェースを提供します。HTTPのリクエストとレスポンスを可能な限りシンプルな方法でラップすることで、ウェブサーバー、ウェブフレームワーク、そしてその間にあるソフトウェア(いわゆるミドルウェア)のAPIを単一のメソッドコールに統一して抽出します。
その詳細はRack仕様に記載されており、すべてのRackアプリケーションはこれに準拠する必要があります。
元々はPythonのWSGI(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」について