1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Web技術の歴史とRackの正体を理解する - CGIからRuby on Railsまで

Posted at

はじめに

Ruby on Railsを使って開発していると、「なんとなく動いている」状態になりがちですよね。

この記事では、Web技術の歴史を振り返りながら、Rackとは何か、そしてなぜRailsが今の形になったのかを体系的に理解していきます。

対象読者

  • Railsを使い始めたばかりの方
  • 「CGI」「Servlet」「Rack」という言葉を聞いたことはあるけど、違いが分からない方
  • Web技術の全体像を理解したい方

Web技術の進化:静的HTMLから動的Webへ

初期のWeb:静的HTMLのみ

1990年代初頭、Webサイトは静的なHTMLファイルをそのまま返すだけでした。

クライアント → Webサーバー → HTMLファイルを返す → クライアント

問題点:

  • 誰が見ても同じ内容
  • ユーザーごとのカスタマイズ不可
  • データベースと連携できない

CGI(Common Gateway Interface)の登場

CGIは、Webサーバーが外部プログラムを実行して、動的にHTMLを生成する仕組みです。

クライアント → Webサーバー → CGIプログラム実行 → 動的HTML生成 → クライアント

特徴:

  • 初期はPerlがよく使われた
  • リクエストごとにプロセスを起動
  • ユーザーごとに違う画面を表示できる

問題点:

  • 遅い:毎回プロセスを起動するため、パフォーマンスが悪い
  • スケーラビリティに課題

Java Servletの登場

Javaが登場し、Servletという技術が生まれました。

改善点:

  • プロセスを常駐させる(毎回起動しない)
  • 高速化
  • エンタープライズ向けの機能が充実
// Servletの例
public class UserServlet extends HttpServlet {
    protected void doGet(HttpServletRequest request, 
                         HttpServletResponse response) {
        // ユーザー一覧を取得してHTMLを返す
    }
}

問題点:

  • 設定ファイルが複雑
  • 開発の手間が大きい

フレームワーク時代の到来

2000年代に入り、開発を効率化するフレームワークが登場します。

言語 フレームワーク 登場年
Ruby Ruby on Rails 2004年
Python Django 2005年
PHP Laravel 2011年
Java Spring Boot 2014年

Ruby on Railsの革新:

  • Convention over Configuration(設定より規約)
  • 少ないコードで多くのことができる
  • 開発速度の向上

Rackとは何か?

ここで重要な概念がRackです。

Rackの定義

Rack = Ruby用のWebサーバーインターフェース(仕様)

Webサーバー(Nginx/Apache)
        ↓
   【Rack Interface】← これは仕様・約束事
        ↓
Rubyアプリケーション(Rails/Sinatra等)

よくある誤解:「Rackはミドルウェア?」

答え:NO!

Rackは**ミドルウェアではなく、インターフェース(仕様)**です。

ミドルウェアとインターフェースの違い

項目 ミドルウェア インターフェース
性質 動作するソフトウェア 仕様・プロトコル
Nginx、MySQL、Redis USB規格、HTTP、Rack
役割 実際に処理を行う 接続方法の標準規格

比喩で理解する

  • USB規格 = Rack(接続の標準仕様)
  • USBケーブル = PumaやUnicorn(実装)
  • パソコンと周辺機器 = WebサーバーとRailsアプリ

Rackの役割

Rackは「WebサーバーとRubyアプリケーションをつなぐ標準的な約束事」を定義しています。

Rackがない世界:

Nginx用のRails ❌
Apache用のRails ❌
Nginx用のSinatra ❌
Apache用のSinatra ❌

→ 全部別々に作る必要がある!

Rackがある世界:

どのWebサーバーでも ✅
どのRubyフレームワークでも ✅
自由に組み合わせOK!

RackとJava Servletの比較

項目 Java Ruby
インターフェース仕様 Servlet API Rack
アプリケーションサーバー Tomcat、Jetty Puma、Unicorn
フレームワーク Spring、Struts Rails、Sinatra

どちらも「Webサーバーとアプリケーションをつなぐ仕様」という点で同じです。

Rackを使っているRubyエコシステム

Rackに準拠したフレームワーク

  • Ruby on Rails
  • Sinatra
  • Hanami
  • Grape(API専用)

全てRackインターフェースに準拠しているため、同じアプリケーションサーバーで動きます。

Rackに準拠したアプリケーションサーバー

  • Puma(Railsのデフォルト)
  • Unicorn
  • Passenger
  • Thin

どのフレームワークでも動作します。

他の言語の同等技術

Rackと同じような仕組みは、他の言語にも存在します。

言語 インターフェース名
Ruby Rack
Python WSGI (Web Server Gateway Interface)
Perl PSGI (Perl Web Server Gateway Interface)
Node.js Connect/Express middleware

全て「Webサーバーとアプリケーションをつなぐ標準仕様」という同じ役割を持っています。

まとめ

Web技術の進化

静的HTML
  ↓
CGI(動的HTML、でも遅い)
  ↓
Servlet/Rack(高速化、標準化)
  ↓
フレームワーク(開発効率化)

Rackの重要ポイント

  1. Rack = インターフェース(仕様)、ミドルウェアではない
  2. WebサーバーとRubyアプリをつなぐ標準規格
  3. Java の Servlet API と同じ役割
  4. Rackのおかげで、Webサーバーとフレームワークを自由に組み合わせられる

なぜこれを理解すべきか

  • Railsのエラーメッセージが理解しやすくなる
  • デプロイ時の選択肢(Puma、Unicornなど)の意味が分かる
  • Web技術全体の見通しが良くなる

次のステップ

次の記事では、Rails内部のMVCアーキテクチャについて、データがどう流れるのかを図解で学びます!

  • 【記事2】Rails初心者が完全理解すべきMVCアーキテクチャ(準備中)
  • 【記事3】HTTPリクエスト/レスポンスとActiveRecordを理解する(準備中)

参考資料


この記事が役に立ったら、ぜひいいねストックをお願いします!
質問やフィードバックもお気軽にコメントください 😊

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?