Webバックエンド - フレームワーク

Sinatra しなとら

RubyWebフレームワークDSLマイクロフレームワークRackREST
Sinatraについて教えて

簡単に言うとこんな感じ!

RubyでWebアプリを作るための「超ミニマルなフレームワーク」だよ!Railsが「全部入りの豪華ホテル」なら、Sinatraは「必要な道具だけ揃ったおしゃれな一人暮らし部屋」って感じ。小さいAPIや軽量サービスをサクッと作るのに最高なんだ!


Sinatraとは

Sinatra(シナトラ)は、Rubyで書かれた軽量Webフレームワークです。2007年に登場し、「必要最小限の機能だけを提供する」という思想のもと設計されました。名前はアメリカの著名な歌手フランク・シナトラに由来しており、「My Way(自分流)」というアルバムタイトルが表すように、開発者が好きなやり方で自由にWebアプリを組み立てられる点が特徴です。

SinatraはDSL(ドメイン固有言語)と呼ばれるスタイルで記述します。DSLとは「特定の目的に特化した、読みやすい記述スタイル」のことで、Sinatraの場合は「URLのパス」と「そのパスにアクセスされたときの処理」をシンプルに対応づけて書けます。たとえば get '/hello' do "Hello, World!" end のように、わずか1〜2行でページを作れてしまいます。

同じRuby製のRuby on Rails(レールズ)が「設定より規約」を重視した大規模開発向けフレームワークであるのに対し、Sinatraはマイクロフレームワークと呼ばれ、小〜中規模のAPIサーバーやシンプルなWebサービスに向いています。近年ではマイクロサービス(アプリを小さな機能単位に分割する設計手法)の1サービスを担う用途でも広く使われています。


Sinatraの基本構造と書き方

Sinatraの最大の特徴は、そのシンプルな記述スタイルです。以下に基本的な構造を示します。

要素説明
ルーティングURLと処理を対応づけるget '/users' do ... end
HTTPメソッドGET・POST・PUT・DELETEなどに対応post '/login' do ... end
パラメータURLやフォームの値を受け取るparams[:name]
テンプレートHTMLを動的に生成するERB・Hamlなど利用可能
フィルター処理前後に共通処理を挟むbefore do ... end
設定ポートや環境などを指定set :port, 4567

実際のコードは驚くほど短くなります:

require 'sinatra'

get '/' do
  'Hello, World!'
end

get '/user/:name' do
  "こんにちは、#{params[:name]}さん!"
end

post '/login' do
  # ログイン処理
  "ようこそ!"
end

覚え方:「HTTPメソッドをそのまま書くだけ」

Sinatraのルーティングは「HTTPメソッド名をそのまま書く」と覚えましょう。getpostputdelete がそのままメソッド名になっているので、HTTPの知識がそのまま活きます。「読む→GET、送る→POST、更新→PUT、消す→DELETE」です。

RailsとSinatraの比較

観点SinatraRuby on Rails
規模感小〜中規模中〜大規模
学習コスト低い高い
セットアップ数行で起動多くのファイル生成
自由度高い(自分で選択)低い(規約に従う)
ORM(DB操作)自分で選ぶActiveRecord が標準
向いている用途API・マイクロサービスフルスタックWebアプリ
ファイル数(最小)1ファイル数十ファイル

歴史と背景

  • 2007年 — Blake Mizerany(ブレイク・ミゼラニー)が最初のバージョンを公開。「Railsは大きすぎる」という声に応えて作られた
  • 2008〜2009年 — Ruby コミュニティで急速に注目を集め、軽量APIサーバーの定番に
  • 2009年Rack(ラック:RubyのWebサーバーインターフェース規格)への対応を強化し、他のライブラリとの組み合わせが容易になる
  • 2010年代前半REST API(WebサービスのAPI設計スタイル)構築の定番ツールとして定着。多くの企業のプロトタイプ開発に活用される
  • 2013年 — Sinatra 1.4.0 リリース。ストリーミングやWebSocketへの対応が改善
  • 2016年 — Sinatra 2.0 の開発が本格化。Ruby 2.x 系との統合が強化
  • 2018年 — Sinatra 2.0 正式リリース。Rack 2対応・パフォーマンス向上
  • 2020年代 — マイクロサービスやサーバーレス環境での軽量ハンドラとして再評価。Padrino(パドリーノ:Sinatraを拡張したフレームワーク)など派生プロジェクトも成熟

RackとSinatraの関係

SinatraはRubyの標準的なWebインターフェースであるRack(ラック)の上に構築されています。Rackとは「WebサーバーとRubyアプリをつなぐ共通の橋渡し役」で、PumaやUnicornなど多くのRuby製WebサーバーがRackに対応しています。

ブラウザ (クライアント) HTTP Webサーバー Puma / Unicorn Rack 共通インターフェース (橋渡し役) Sinatra ルーティング / DSL / レスポンス生成 ミドルウェア 認証・ログ等 アプリコード ビジネスロジック ※ Rack があることで Sinatra は特定のWebサーバーに縛られず動作できる

このRack対応のおかげで、SinatraアプリはPumaでもUnicornでも同じコードで動かせるという利点があります。また、RailsもRack対応のため、SinatraアプリとRailsアプリを1つのRackアプリとして組み合わせることも可能です。


関連する規格・RFC

規格・RFC番号内容
RFC 9110HTTP Semantics — SinatraのルーティングはHTTPメソッドの仕様に基づく
RFC 9112HTTP/1.1 — Sinatraが扱うHTTPメッセージの形式
RFC 3986URI の構文規則 — Sinatraのルートパターン設計の基礎

関連用語

  • Ruby on Rails — Sinatraと同じRuby製の「フルスタックWebフレームワーク」。大規模開発向け
  • Rack — RubyのWebサーバーとアプリをつなぐ標準インターフェース。Sinatraの土台
  • REST API — SinatraでよくつくるAPIの設計スタイル。URLとHTTPメソッドでリソースを操作する
  • DSL — ドメイン固有言語。Sinatraの記述スタイルそのもの
  • マイクロサービス — アプリを小さな機能単位に分割する設計手法。Sinatraがよく使われる場面
  • HTTPメソッド — GET・POST・PUT・DELETEなど。Sinatraのルーティングと直結する概念
  • Puma — SinatraアプリをホストするRuby製WebサーバーのデファクトスタンダードのひとつT
  • FlaskPythonにおけるSinatraのような軽量マイクロフレームワーク