Slide 1

Slide 1 text

〜RackからみたRailsアプリケーション〜 PumaとUnicornって結局何なん!? 2022.9.20 最近学んだこと

Slide 2

Slide 2 text

自己紹介 1 2 Railsのリクエストサイクル 4 PumaとUnicornの正体 3 Rack 5 目次 まとめ 6 なぜ話そうと思ったのか? おまけ(RailsとRack) 7

Slide 3

Slide 3 text

1 自己紹介

Slide 4

Slide 4 text

・稲井友亮 ・25歳 ・RUNTEQ34期生 ・医者目指してた ・低レイヤ大好き

Slide 5

Slide 5 text

No content

Slide 6

Slide 6 text

2 なぜ話そうと思ったの か?

Slide 7

Slide 7 text

その前に....

Slide 8

Slide 8 text

まずPumaとUnicornって??

Slide 9

Slide 9 text

No content

Slide 10

Slide 10 text

デプロイ時によく見 かける

Slide 11

Slide 11 text

3 PumaとUnicornの正体

Slide 12

Slide 12 text

Rack(の仕様に基づいて動く)サーバー

Slide 13

Slide 13 text

is 何??

Slide 14

Slide 14 text

4 Railsのリクエストサイクル

Slide 15

Slide 15 text

① ②

Slide 16

Slide 16 text

用意してあるリソースしか 返却できない 問題点

Slide 17

Slide 17 text

・ユーザーが投稿したものの最新の10個を表示 ・投稿したもの削除したい ・いいね機能やブックマーク機能も欲しい 例えば...

Slide 18

Slide 18 text

どうすればいい...?

Slide 19

Slide 19 text

・簡単な更新作業程度ならできる ・複雑な作業になってくると限界あり 手動で頑張る

Slide 20

Slide 20 text

プログラムに 任せよ

Slide 21

Slide 21 text

動的 静的 アプリケーション

Slide 22

Slide 22 text

インターフェース

Slide 23

Slide 23 text

No content

Slide 24

Slide 24 text

アプリケーションサー バー 常にプロセスが実行さ れているためCGIより効 率が良い 使い回しモデル Common Gateway Interface リクエストのたびに新 しくプロセスを起動さ せる必要があり非効率 使い捨てモデル CGI APサーバー インターフェースの種類

Slide 25

Slide 25 text

このインターフェースのうちの 1つがRack

Slide 26

Slide 26 text

5 Rack

Slide 27

Slide 27 text

Rackは、RubyでWebアプリケ ーションを開発するための、最 小限の、モジュール化された、 適応性の高いインターフェイス を提供します。 引用元:github.com/rack/rack

Slide 28

Slide 28 text

RackとはサーバーとRubyアプリ がやりとりする際のルール

Slide 29

Slide 29 text

Rackのルール サーバーからアプ リへのリクエスト の通知はメソッド 呼び出しで行う リクエストの内容 は引数で渡す メソッドの戻り値 をサーバー側に返 す。 1 2 3

Slide 30

Slide 30 text

No content

Slide 31

Slide 31 text

Rackアプリケーション

Slide 32

Slide 32 text

Rackサーバー ・rack gemを用いて開発 ・利用したいサーバーに対応した Rack::Handlerにアプリを渡すだけ 

Slide 33

Slide 33 text

マルチプロセス スロークライアント リバースプロキシと 組み合わせて使う Nginx + Unicorn マルチスレッド Railsのデフォルト リクエストのバッファ 可能 スロークライアントに 強い Puma Unicorn Rackサーバーの種類

Slide 34

Slide 34 text

6 まとめ

Slide 35

Slide 35 text

サーバーが動的なリソースを提供する ためにはインターフェースが必要 1 Rackとはそのインターフェースであ り、ルール 2 Rackに沿ってアプリとサーバーを実装 することで、Webアプリケーションを構 築できる。PumaやUnicornはRackに沿 って動くサーバー。 3

Slide 36

Slide 36 text

ありがとうございます times_34期生_inai_yusuke

Slide 37

Slide 37 text

7 おまけ (RailsとRack)

Slide 38

Slide 38 text

bin/rails serverでサーバー立ち上げ 1 bin/rails cでコンソール開く 2 Rails.application.call(env) 4 Rack::MockRequest.env_forでenv取得 3 puts body.join('') 5 やってみよう!