MENU

Sinatraとは|Rubyで書く軽量Web DSLの設計思想

Sinatra アイキャッチ
Sinatra

Sinatraは2007年にBlake Mizeranyが発表したRuby製の軽量Webアプリケーションフレームワークである。Railsのようなフルスタック構成を取らず、HTTPメソッドとパスに対するブロックを直接記述するDSLでアプリケーションを組み立てる点が特徴で、わずか数行でWebサーバが立ち上がる手軽さからプロトタイプや小規模API、社内ツールの実装に広く採用されてきた。本稿ではSinatraの成り立ちと中核となるルーティング機構、テンプレート連携、運用上の配置パターンまでを順に整理する。

目次

この記事の目次

  1. Sinatra登場の背景と設計哲学
  2. ルーティングとリクエスト処理の流れ
  3. 本番運用で組み合わせる周辺要素
  4. 他フレームワークとの位置づけ
  5. まとめ

Sinatra登場の背景と設計哲学

Sinatra登場の背景と設計哲学

Sinatraが公開された2007年当時、Rubyの世界ではDavid Heinemeier Hanssonが2004年に公表したRuby on Railsが急成長していたが、Railsが提供する規約と層構造はAPIサーバや単機能アプリには重く感じられる場面が増えていた。Blake Mizeranyはこの空白を埋める目的で、Rack仕様の上に薄く乗るDSLとしてSinatraを設計し、起動から応答までの最短経路を提供することを最優先に据えた。

設計の核は「規約より明示」と「拡張より組み合わせ」である。GETやPOSTなどHTTP動詞ごとのメソッドがそのままDSLの語彙となり、ハンドラはブロックで記述する。フレームワーク本体には認証やORMといった重い機能を持たせず、Rackミドルウェアや別途のgem、たとえばSequelやActiveRecordを組み合わせて拡張する方針が貫かれている。この潔さがSinatra系フレームワークの源流となり、Node.jsのExpressやPythonのFlaskにも影響を与えた。

ルーティングとリクエスト処理の流れ

ルーティングとリクエスト処理の流れ

Sinatraのアプリケーションは、トップレベルでget '/users/:id' do ... endのように記述するとそのままルーティング表に登録される。リクエストが届くとRackがエントリポイントを呼び出し、Sinatraは登録順にパスパターンを照合する。:idのような名前付きパラメータはparamsハッシュに格納され、ワイルドカードや正規表現マッチにも対応するため、REST的なURL設計を短い記述で表現できる。

ハンドラ内ではビューテンプレートとしてERBやHaml、Slimを呼び出せるほか、JSONを返すだけのAPIにも適している。before/afterフィルタを使えば認証チェックや共通ヘッダ付与をまとめられ、エラー処理はerror 404 do ... endのように宣言する。クラシックスタイル(トップレベル記述)とモジュラースタイル(Sinatra::Baseを継承)の二系統があり、規模拡大に応じて後者へ移行する運用が一般的である。

本番運用で組み合わせる周辺要素

本番運用で組み合わせる周辺要素

Sinatra単体は開発用にWEBrickやPumaを起動できるが、本番ではアプリサーバとリバースプロキシを分離する構成が定番である。PumaやUnicornをRackアプリとして起動し、その前段にNginxやCaddyを配置してTLS終端と静的ファイル配信を任せる。rackup設定ファイルconfig.ruからアプリを読み込ませることで、Heroku、Render、各種PaaSへ素直に乗せられる。

ロギングはRack::LoggerやSemantic Loggerを差し込み、データベース接続はSequelやActiveRecordを別途構成する。ジョブはSidekiqやResqueへ分離し、Webプロセスは応答だけに集中させる。テストにはRack::Testを用いてHTTPレイヤを擬似的に叩く方式が長年使われており、CI上でも軽量に走るためTDDサイクルを短く保てる。

他フレームワークとの位置づけ

他フレームワークとの位置づけ

RailsはMVC、ActiveRecord、Action Cableなどを束ねたフルスタックで、画面とDB処理を一気通貫で組むのに向く一方、起動時間やメモリ使用量はSinatraより重い。Hanamiは2014年にLucca Guidaらが立ち上げたクリーンアーキテクチャ志向のフレームワークで、ドメイン分離を強く意識しており、Sinatraの薄さとRailsの規約の中間に位置する。

近年は同じくRack上に乗るRoda(Jeremy Evans作)がツリー型ルーティングと高性能を武器に台頭しており、Sinatraからの移行例も増えている。それでもSinatraは初学者の教材、社内ツールのモック、マイクロサービスの一部として選ばれ続けており、Rubyエコシステムにおける「最短距離でWebを書く道具」としての地位を保っている。

まとめ

SinatraはRubyの表現力をそのままWeb DSLに転写した結果として生まれた軽量フレームワークであり、薄さと自由度を維持しながらRack資産を活用できる点が今も変わらない強みである。規模やチーム構成に応じてRailsやHanamiへ橋渡しすることも難しくないため、適材適所で選択肢に入れておく価値がある。

※本記事はIT用語辞典の手書きドラフトです。公開前に最新情報・出典を確認のうえ加筆修正してください。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

コメント

コメントする

目次