Sinatra の基礎
軽量な Web アプリです。
「Sinatra の基礎」はCoddyKit上の無料Ruby Academyレッスンです。 これはレッスン1/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはRuby Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Ruby Academyコースには全4レッスンが含まれています。
Sinatraとは
Sinatraは、最小限の手間でRubyのWebアプリケーションを構築するための軽量なDSLです。
- Railsのような重い規約がありません
- 1つのファイルにルートを直接定義できます
- 小規模なアプリ、API、プロトタイプに最適です
HTTP動詞とパスを記述し、レスポンスボディを返します。
require 'sinatra'
get '/' do
'Hello from Sinatra!'
endSinatraのインストール
Sinatraはgemです。gem コマンドまたは Gemfile を使ってインストールします。
gem install sinatra- または、Gemfileに
gem 'sinatra'を追加してbundle installを実行します
ruby app.rb でアプリを実行すると、デフォルトではポート4567で提供されます。
# Gemfile
source 'https://rubygems.org'
gem 'sinatra'
gem 'puma'最初のルート
ルートは、HTTP動詞とURLパス、そしてブロックを組み合わせたものです。ブロックの戻り値がレスポンスボディになります。
get、post、put、deleteはHTTPメソッドに対応します- ブロック内の最後の式がクライアントに送信されます
require 'sinatra'
get '/hello' do
'Hello, world!'
end
get '/bye' do
'Goodbye!'
endHTMLを返す
戻り値は単なる文字列なので、生のHTMLを直接返せます。
- テンプレートエンジンを使わずに簡単なページを作る場合に便利です
- 実際のアプリケーションではERBまたはHAMLのビューを使用してください
require 'sinatra'
get '/' do
'<h1>Welcome</h1><p>This is my Sinatra app.</p>'
endプレーンなRubyでレスポンスをモデル化する
HTTPと接続する前に、単純なメソッドを使ってハンドラーが返す値をモデル化できます。これはルートが呼び出すロジックです。
- ビジネスロジックをルートブロックの外に保ちます
- サーバーなしでコードをテストしやすくなります
def greeting(name)
"Hello, #{name}!"
end
puts greeting('Sinatra')HTTP動詞
Sinatraは、一般的なHTTP動詞をすべてルートメソッドとしてサポートしています。
getはデータを読み取りますpostはデータを作成しますputとpatchはデータを更新しますdeleteはデータを削除します
require 'sinatra'
post '/users' do
'Creating a user'
end
delete '/users/:id' do
"Deleting user #{params['id']}"
endステータスコードの設定
status ヘルパーを使ってHTTPステータスコードを制御します。
status 404でNot Foundを設定しますstatus 201でリソースが作成されたことを示します- デフォルトは200 OKです
require 'sinatra'
get '/missing' do
status 404
'Not found'
endset による設定
Sinatraは set、enable、disable で設定します。
set :port, 8080でリッスンするポートを変更しますset :bind, '0.0.0.0'で外部からの接続を受け付けますenable :loggingでリクエストログを有効にします
require 'sinatra'
set :port, 8080
set :bind, '0.0.0.0'
get '/' do
'Configured app'
endbefore フィルター
before フィルターは、一致するすべてのリクエストの前に実行されます。認証やコンテンツヘッダーの設定などの準備処理に適しています。
- ルートと同じコンテキストで実行されます
paramsとレスポンスヘッダーを読み取ったり変更したりできます
require 'sinatra'
before do
content_type :json
end
get '/' do
'{"ok": true}'
endモジュール形式のアプリケーション
大規模なプロジェクトでは、Sinatra::Base をサブクラス化するモジュール形式を使用します。
- 複数のアプリを分離して管理できます
- Rackの下にマウントしやすくなります
run!を呼び出して手動で起動します
require 'sinatra/base'
class MyApp < Sinatra::Base
get '/' do
'Modular Sinatra'
end
end
MyApp.run!ローカルでルーターをシミュレートする
単純なハッシュディスパッチャーを使うと、Sinatraのルーティングロジックを再現して概念を理解できます。
- キーはパス、値はハンドラーのprocです
- 検索するとレスポンスボディが返されます
routes = {
'/' => -> { 'Home' },
'/about' => -> { 'About us' }
}
puts routes['/'].call
puts routes['/about'].call理解度チェック
Sinatraの基本についての理解度を確認します。
まとめ
Sinatraの基本を学びました:
- Sinatraはgemとしてインストールする軽量なWeb DSLです
- ルートはHTTP動詞、パス、ブロックを組み合わせたものです
- ブロックの戻り値がレスポンスボディになります
status、set、beforeフィルターで動作を制御します- モジュール形式のアプリケーションは
Sinatra::Baseをサブクラス化します
次は、動的なルートとparamsを扱います。
よくある質問
「Sinatra の基礎」レッスンは無料ですか?
はい。「Sinatra の基礎」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Ruby Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Ruby Academyコースには全4レッスンが含まれています。
「Sinatra の基礎」で何を学びますか?
軽量な Web アプリです。 ブラウザで直接実行するハンズオンコードでRuby Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
Ruby Academyを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのRuby Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン1/4です。
「Sinatra の基礎」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このRuby Academyレッスンでコードを書いて実行できますか?
はい。すべてのRuby Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- Sinatra の基礎
- ルートとパラメーター
- JSON API
- ミドルウェアと Rack