1. はじめに:Sinatraとは何か
Sinatraは、Rubyで動作する軽量なウェブアプリケーションフレームワークです。Ruby on Railsのような大規模なフレームワークと異なり、シンプルで柔軟性が高く、最小限のコードでウェブアプリを作成できます。Sinatraは「マイクロフレームワーク」と呼ばれ、小規模なプロジェクトやAPI、プロトタイピングに最適です。初心者でも学びやすく、Rubyの持つ表現力を活かしながら、必要な機能だけを組み込めるのが特徴です。
# app.rb
require 'sinatra'
get '/' do
'Sinatraへようこそ!'
end
2. 開発環境の準備
Sinatraを使うには、まずRubyがインストールされている必要があります。次にSinatra本体をインストールしましょう。プロジェクト用ディレクトリを作成し、Gemfileで依存関係を管理するのが一般的です。これにより、複数人での開発や本番環境へのデプロイもスムーズになります。
gem install bundler
bundle init
echo "gem 'sinatra'" >> Gemfile
bundle install
3. Sinatraアプリの基本構造
Sinatraは特定のディレクトリ構造を強制しませんが、一般的にはapp.rb
(メインファイル)、views
(テンプレート)、public
(静的ファイル)を用意します。コードが増えてきたら、lib
やmodels
ディレクトリを作って整理することもできます。
# app.rb
require 'sinatra'
get '/' do
erb :index
end
<!-- views/index.erb -->
<h1>Sinatraの世界へようこそ</h1>
4. ルーティングの基本
Sinatraでは、HTTPメソッド(GET、POSTなど)とパスを組み合わせてルートを定義します。これにより、リクエストに応じた処理を柔軟に記述できます。シンプルなAPIから複雑なウェブアプリまで対応可能です。
get '/hello/:name' do
"こんにちは、#{params[:name]}さん!"
end
5. パラメータとフォーム処理
フォームから送信されたデータはparams
ハッシュで取得できます。POSTメソッドを使うことで、ユーザー入力を受け取り、動的な処理を行えます。
get '/form' do
erb :form
end
post '/submit' do
"あなたの名前は#{params[:name]}ですね!"
end
<!-- views/form.erb -->
<form action="/submit" method="post">
<input type="text" name="name" placeholder="名前を入力">
<input type="submit" value="送信">
</form>
6. ビューとテンプレートエンジン
SinatraはデフォルトでERBテンプレートをサポートしています。erb
メソッドを使って、HTMLテンプレートにRubyコードを埋め込むことができます。レイアウトファイル(views/layout.erb
)を用意すれば、共通のヘッダーやフッターも簡単に管理できます。
<!-- views/layout.erb -->
<!DOCTYPE html>
<html>
<head>
<title>Sinatraサンプル</title>
</head>
<body>
<%= yield %>
</body>
</html>
7. セッション管理
Sinatraではenable :sessions
でセッションを有効化できます。これにより、ログイン状態やユーザー情報の保持が可能です。セッションはsession
ハッシュで操作します。
enable :sessions
post '/login' do
session[:user] = params[:user]
"ログインしました:#{session[:user]}"
end
get '/logout' do
session.clear
"ログアウトしました"
end
8. 静的ファイルの提供
public
ディレクトリにCSSや画像ファイルを置くと、自動的に静的ファイルとして配信されます。特別な設定は不要で、/css/style.css
のようにアクセスできます。
/* public/style.css */
body { background: #f0f0f0; }
<!-- views/index.erb -->
<link rel="stylesheet" href="/style.css">
<h1>スタイルが適用されたSinatra</h1>
9. JSON APIの作成
SinatraはJSONレスポンスも得意です。content_type :json
を指定し、Rubyのハッシュをto_json
で返すだけでAPIが作れます。APIサーバーやフロントエンドとの連携も簡単です。
require 'json'
get '/api/greet/:name' do
content_type :json
{ message: "こんにちは、#{params[:name]}さん!" }.to_json
end
10. データベースとの連携
SinatraはActiveRecordやSequelなど、好きなORMを選んで使えます。ここではActiveRecordを例に、SQLite3データベースと連携する方法を紹介します。
# Gemfile
gem 'sinatra'
gem 'sinatra-activerecord'
gem 'sqlite3'
# app.rb
require 'sinatra'
require 'sinatra/activerecord'
set :database, {adapter: "sqlite3", database: "db.sqlite3"}
class User < ActiveRecord::Base; end
get '/users' do
@users = User.all
erb :users
end
<!-- views/users.erb -->
<ul>
<% @users.each do |user| %>
<li><%= user.name %></li>
<% end %>
</ul>
11. CRUD機能の実装
SinatraでCRUD(Create, Read, Update, Delete)機能を実装するのはとても簡単です。RESTfulなルーティングを意識して、シンプルな掲示板アプリを作ってみましょう。
posts = []
get '/posts' do
erb :posts, locals: { posts: posts }
end
post '/posts' do
posts << { title: params[:title], body: params[:body] }
redirect '/posts'
end
<!-- views/posts.erb -->
<h2>投稿一覧</h2>
<ul>
<% posts.each do |post| %>
<li><strong><%= post[:title] %></strong>: <%= post[:body] %></li>
<% end %>
</ul>
<form action="/posts" method="post">
<input type="text" name="title" placeholder="タイトル">
<input type="text" name="body" placeholder="本文">
<input type="submit" value="投稿">
</form>
12. モジュラー構造による拡張
SinatraはSinatra::Base
を継承して、モジュラー構造でアプリを構築できます。これにより、大規模なプロジェクトでも管理しやすくなります。
# app.rb
require 'sinatra/base'
class MyApp < Sinatra::Base
get '/' do
'モジュラーSinatraアプリへようこそ'
end
run! if app_file == $0
end
13. デプロイとまとめ
SinatraアプリはHerokuやVPS、各種PaaSに簡単にデプロイできます。config.ru
ファイルを用意し、rackup
コマンドで起動すれば本番運用も可能です。Sinatraは小さく始めて大きく育てることができる、Rubyらしい柔軟なフレームワークです。シンプルなコードでウェブ開発を始めたい方に、ぜひおすすめします。
# config.ru
require './app'
run Sinatra::Application
これでSinatraの基礎から応用まで、実践的なコード例とともに一通り解説しました。Rubyでウェブアプリを作りたい方は、まずSinatraから始めてみてはいかがでしょうか。