Sinatraで作る軽量Webアプリケーション
Sinatraは、Rubyで書かれたDSL(ドメイン固有言語)で、最小限の労力で素早くWebアプリケーションを作成するためのライブラリです。Railsのようなフルスタックフレームワークとは対照的に、Sinatraは非常に軽量で、規約よりも設定を重視します。小規模なWebサービス、APIサーバー、プロトタイピングなどに最適なツールです。
Sinatraの哲学
- 軽量かつ最小限: Sinatraは、Webアプリケーションの基本的な機能(ルーティング、リクエスト処理、レスポンス返却)に特化しています。
- 柔軟性: データベース接続、テンプレートエンジン、認証など、必要な機能は自分で好きなGemを選んで組み合わせることができます。
- 学習の容易さ: 覚えるべき規約が少なく、直感的なDSLでアプリケーションを記述できます。
はじめてのSinatraアプリケーション
1. インストール
まず、SinatraのGemをインストールします。
gem install sinatra2. アプリケーションファイルの作成
app.rbという名前でファイルを作成し、以下のコードを記述します。
# app.rb
require 'sinatra'
# ルートURL ("/") へのGETリクエストを処理
get '/' do
"Hello, Sinatra!"
end
# "/about" へのGETリクエストを処理
get '/about' do
"This is a simple web application made with Sinatra."
end
# URLにパラメータを含む場合
# 例: /users/alice
get '/users/:name' do
name = params['name']
"Hello, #{name}!"
endrequire 'sinatra': Sinatraライブラリを読み込みます。get,post,put,delete: HTTPメソッドに対応するメソッドを呼び出し、第一引数にパス、第二引数に処理ブロックを渡します。params: URLのパスパラメータやクエリパラメータが格納されたハッシュです。
3. アプリケーションの実行
ターミナルからRubyでこのファイルを実行します。
ruby app.rbすると、SinatraはデフォルトでPumaやWEBrickなどのRackサーバーを起動します。
== Sinatra (v3.0.0) has taken the stage on 4567 for development with backup from Puma
Puma starting in single mode...
* Puma version: 6.0.0 (ruby 3.1.2-p20) ("Sunflower")
* Min threads: 0
* Max threads: 5
* Environment: development
* PID: 12345
* Listening on http://127.0.0.1:4567
* Listening on http://[::1]:4567
Use Ctrl-C to stopブラウザで以下のURLにアクセスすると、それぞれ対応する文字列が表示されます。
http://localhost:4567/-> "Hello, Sinatra!"http://localhost:4567/about-> "This is a simple web application made with Sinatra."http://localhost:4567/users/Bob-> "Hello, Bob!"
ビュー(テンプレート)を使う
レスポンスとしてHTMLを返す場合、文字列を直接書くのは現実的ではありません。Sinatraは、ERBやHamlなど、さまざまなテンプレートエンジンと簡単に連携できます。
ERB (Embedded Ruby) の利用
app.rbと同じ階層にviewsというディレクトリを作成します。viewsディレクトリの中に、index.erbというファイルを作成します。
<!-- views/index.erb -->
<!DOCTYPE html>
<html>
<head>
<title>My Sinatra App</title>
</head>
<body>
<h1><%= @message %></h1>
<p>The current time is <%= Time.now %>.</p>
</body>
</html>app.rbを修正して、erbメソッドでテンプレートをレンダリングするようにします。
# app.rb
require 'sinatra'
get '/' do
# インスタンス変数を定義すると、テンプレート内で利用できる
@message = "Welcome to my awesome application!"
# :index シンボルを渡すと、views/index.erb を探してレンダリングする
erb :index
endアプリケーションを再起動(Ctrl+Cで停止し、再度ruby app.rb)してhttp://localhost:4567/にアクセスすると、HTMLがレンダリングされて表示されます。
静的ファイルの配信
CSSやJavaScript、画像などの静的ファイルは、デフォルトでpublicという名前のディレクトリから配信されます。
app.rbと同じ階層にpublicディレクトリを作成します。publicディレクトリにstyle.cssを作成します。
/* public/style.css */
body {
font-family: sans-serif;
background-color: #f0f0f0;
}- テンプレートファイル (
views/index.erb) からこのCSSを読み込みます。
<!-- views/index.erb -->
<head>
<title>My Sinatra App</title>
<link rel="stylesheet" href="/style.css">
</head>これで、ページにCSSが適用されるようになります。
config.ru を使った起動
より本格的なアプリケーションでは、rackupコマンドで起動するのが一般的です。そのためにconfig.ruファイルを作成します。
# config.ru
require_relative 'app'
run Sinatra::Applicationそして、rackupコマンドで起動します。
rackup config.ruこの方法を使うと、PumaやUnicornなどのより高性能なRackサーバーの設定を柔軟に行うことができます。
まとめ
Sinatraは、Rubyで手軽にWebアプリケーションを構築するための優れたツールです。
- ルーティング:
get,postなどのメソッドで直感的に定義できる。 - テンプレート:
viewsディレクトリとerbメソッドで簡単にHTMLをレンダリングできる。 - 静的ファイル:
publicディレクトリに置くだけで配信できる。
Railsの学習を始める前のウォーミングアップとして、あるいは小規模なAPIやマイクロサービスのバックエンドとして、SinatraはRubyによるWeb開発の楽しさと本質を教えてくれます。