0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Sinatraで始めるRubyウェブ開発入門

Posted at

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(静的ファイル)を用意します。コードが増えてきたら、libmodelsディレクトリを作って整理することもできます。

# 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から始めてみてはいかがでしょうか。

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?