ルートとパラメーター
HTTP を処理します。
「ルートとパラメーター」はCoddyKit上の無料Ruby Academyレッスンです。 これはレッスン2/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはRuby Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Ruby Academyコースには全4レッスンが含まれています。
HTTPリクエストの処理
Webアプリケーションは、ルートを照合し、パラメーターを読み取ってリクエストに応答します。
- パスのセグメントは動的にできます
- クエリ文字列には追加データを含められます
- フォームの本文には送信されたフィールドが含まれます
Sinatraでは、これらすべてを params ハッシュから利用できます。
require 'sinatra'
get '/echo' do
params['msg'].to_s
end名前付きルートパラメーター
パス内のコロンは、パスのセグメントを取得する名前付きパラメーターを定義します。
/users/:idは/users/42に一致します- 取得した値は
params['id']に入ります
require 'sinatra'
get '/users/:id' do
"User ID is #{params['id']}"
end複数のパラメーター
1つのルートに複数の名前付きパラメーターを含められます。
- 各コロン付きセグメントが
paramsのキーになります - アクセスする際は、パス内の順序を意識する必要はありません
require 'sinatra'
get '/posts/:year/:month' do
"Posts from #{params['month']}/#{params['year']}"
endクエリ文字列のパラメーター
? の後に続くクエリ文字列の値も params に入ります。
/search?q=rubyではparams['q'] == 'ruby'になります- 複数のペアは
&で区切ります
require 'sinatra'
get '/search' do
"Searching for: #{params['q']}"
endparams を Hash として扱う
params オブジェクトはRubyのハッシュのように動作します。プレーンなハッシュで練習すると、パターンを明確に理解できます。
- 安全性のため、デフォルト値を指定して
fetchを使用します - キーは慣例として文字列です
params = { 'name' => 'Ada', 'lang' => 'Ruby' }
puts params['name']
puts params.fetch('age', 'unknown')POSTによるフォームデータ
post リクエストでは、送信されたフォームフィールドも params に入ります。
- Sinatraがリクエストボディを自動的に解析します
- クエリパラメーターと同じ方法でアクセスできます
require 'sinatra'
post '/signup' do
"Welcome, #{params['username']}"
endスプラットパラメーター
スプラット(*)は任意の数の文字に一致し、それらを params['splat'] 配列に格納します。
/files/*でパスの残りの部分を取得します- 複数のスプラットを使うと、配列に複数の要素が入ります
require 'sinatra'
get '/files/*' do
"Path: #{params['splat'].first}"
endオプションおよび正規表現ルート
ルートでは、正確に照合するために正規表現を使用できます。
- 取得した値は
params['captures']から利用できます - 数値IDだけに限定する場合などに便利です
require 'sinatra'
get %r{/item/(\d+)} do
"Item #{params['captures'].first}"
endパラメーターのバリデーション
受け取ったparamsは文字列として渡されるため、必ず検証して変換してください。
- 数値には
to_iまたはInteger()を使用します - 必須の値がない場合は、明確なエラーを返します
def parse_id(raw)
id = Integer(raw)
raise 'must be positive' if id <= 0
id
end
puts parse_id('42')デフォルト値
オプションのparamsには適切なデフォルト値を指定し、nilエラーを避けます。
params.fetch('page', '1')- 変換と組み合わせると、安全にページネーションできます
params = { 'page' => nil }
page = (params['page'] || '1').to_i
puts "Page: #{page}"リダイレクト
redirect を使って、クライアントを別のURLへ移動させます。
- デフォルトでは302ステータスを返します
- フォームの送信に成功した後によく使用します
require 'sinatra'
post '/login' do
redirect '/dashboard'
end理解度チェック
ルートとparamsについての理解度を確認します。
まとめ
Sinatraで入力を処理する方法を学びました:
- 名前付きparamsにはパス内で
:nameを使用します - クエリ文字列とフォームフィールドも
paramsに値を設定します - スプラットと正規表現ルートで柔軟なパスを取得できます
- 文字列のparamsは必ず検証して変換します
redirectを使ってクライアントをURL間で移動させます
次は、構造化されたJSONレスポンスを返します。
よくある質問
「ルートとパラメーター」レッスンは無料ですか?
はい。「ルートとパラメーター」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Ruby Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Ruby Academyコースには全4レッスンが含まれています。
「ルートとパラメーター」で何を学びますか?
HTTP を処理します。 ブラウザで直接実行するハンズオンコードでRuby Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
Ruby Academyを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのRuby Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン2/4です。
「ルートとパラメーター」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このRuby Academyレッスンでコードを書いて実行できますか?
はい。すべてのRuby Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- Sinatra の基礎
- ルートとパラメーター
- JSON API
- ミドルウェアと Rack