Sinatraを使ってWebアプリケーションを作成した
フィヨルドブートキャンプの課題でSinatraを使ってメモアプリを開発しました。
いきなりRuby on Railsの学習に入るよりもシンプルなフレームワークであるSinatraでルーティングや画面描画の仕組みを学んだことで、処理の流れが具体的にイメージできるようになったと思います。
Sinatraとは?
ん・・・どういうこと?
DSLとは? を読んでみると以下の説明があります。
DSL(Domain Specific Language)は、ドメイン固有言語と訳されてます。DSLは、Java、C#などの汎用言語とは違い、ある特定の種類の問題に特化したコンピュータ言語です。
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
ただ、上記のブロックのみで処理を実装しようとすると、インスタンス変数の値を保持して渡せなかったり、同じ処理を繰り返し書かなければいけなかったりでちょっと都合が悪いです。
その際はbefore
フィルタや helpers
を使うと便利です。
beforeフィルタ
before
フィルタを定義するとルーティングの各リクエストの前に評価され、フィルタ内でセットされたインスタンス変数にルーティングからアクセスすることができるようになります。
before do @greeting = 'Hello!!' end
URLのパターンマッチをさせたい場合はbefore
と do
の間に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アプリの開発の流れやポイントを理解することができると思います。
もしブログの内容におかしな点がある場合は、コメントでお知らせいただけると幸いです!