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メソッド名をそのまま書く」と覚えましょう。get・post・put・delete がそのままメソッド名になっているので、HTTPの知識がそのまま活きます。「読む→GET、送る→POST、更新→PUT、消す→DELETE」です。
RailsとSinatraの比較
| 観点 | Sinatra | Ruby 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に対応しています。
このRack対応のおかげで、SinatraアプリはPumaでもUnicornでも同じコードで動かせるという利点があります。また、RailsもRack対応のため、SinatraアプリとRailsアプリを1つのRackアプリとして組み合わせることも可能です。
関連する規格・RFC
| 規格・RFC番号 | 内容 |
|---|---|
| RFC 9110 | HTTP Semantics — SinatraのルーティングはHTTPメソッドの仕様に基づく |
| RFC 9112 | HTTP/1.1 — Sinatraが扱うHTTPメッセージの形式 |
| RFC 3986 | URI の構文規則 — 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
- Flask — PythonにおけるSinatraのような軽量マイクロフレームワーク