Sinatraまとめ

Sinatraを使ってWebアプリケーションを作成した

フィヨルドブートキャンプの課題でSinatraを使ってメモアプリを開発しました。

いきなりRuby on Railsの学習に入るよりもシンプルなフレームワークであるSinatraでルーティングや画面描画の仕組みを学んだことで、処理の流れが具体的にイメージできるようになったと思います。

Sinatraとは?

SinatraREADMEには以下の説明があります。

Sinatraは最小の労力でRubyによるWebアプリケーションを手早く作るためのDSLです。

ん・・・どういうこと?

DSLとは? を読んでみると以下の説明があります。

DSLDomain Specific Language)は、ドメイン固有言語と訳されてます。DSLは、JavaC#などの汎用言語とは違い、ある特定の種類の問題に特化したコンピュータ言語です。

DSLは、メタプログラミングで使われます。メタプログラミングとは、ロジックを直接コーディングするのではなく、あるパターンをもったロジックを生成する高位ロジックを定義する方法のこと。

現時点の自分の言葉で説明するならば

Webアプリケーションを開発する際に必要なロジックパターンの実装を補助してくれるもの

かなと思っています。

Sinatraではどんなアプリケーションが作れるのか

Sinatraでは、ルーティングはHTTPメソッドとURLマッチングパターンがペアになっていて、RESTなURI設計を意識したWebアプリケーションの開発が可能です。 ※RESTについての詳細な言及はここではしません。

HTTPメソッド(GET、POST、PUT、DELETE)とURLを以下のようにブロックと結びつけ、その中に処理を書いていきます。

get '/' do
  .. 何か見せる ..
end

post '/' do
  .. 何か生成する ..
end

put '/' do
  .. 何か更新する ..
end

delete '/' do
  .. 何か削除する ..
end

SinatraREADMEより

ただ、上記のブロックのみで処理を実装しようとすると、インスタンス変数の値を保持して渡せなかったり、同じ処理を繰り返し書かなければいけなかったりでちょっと都合が悪いです。

その際はbefore フィルタや helpers を使うと便利です。

beforeフィルタ

before フィルタを定義するとルーティングの各リクエストの前に評価され、フィルタ内でセットされたインスタンス変数にルーティングからアクセスすることができるようになります。

before do
  @greeting = 'Hello!!'
end

URLのパターンマッチをさせたい場合はbeforedo の間にURLを指定します。 以下のようにワイルドカードも利用可能です。

before 'example/:id*' do
  @greeting = 'Hello!!'
end

ヘルパーメソッド

ヘルパーメソッドを使うと繰り返し使う処理をまとめて、ルーティングのブロック内で呼び出すことができます。

helpers do
  def output(name)
    puts "#{name}さん"
    end
end

get '/' do
  output(maimu)
end
    

まとめ

Sinatraを使うと小さなWebアプリをRuby on Railsよりも簡単に作ることが可能です。 私はRailsの学習を始めた頃に、学ぶ範囲が広すぎて全然分からない状態になったため、プログラミングを始めたばかりのタイミングはシンプルなSinatraでWebアプリの開発の流れやポイントを理解することができると思います。

もしブログの内容におかしな点がある場合は、コメントでお知らせいただけると幸いです!