Sinatraに出会った
初体験
先日Sinatraというフレームワークを触ってみたので頭の整理がてらカキコします。
Sinatraとは
Rubyのフレームワークです。フレームワーク ≒ Railsと捉えられやすいですが、 SintraもRuby界では有名なようですね(失礼!)
第一印象
「え、これってフレームワークなんですか??」っていうぐらいの簡素です。 Sinatra公式とRails公式を比較すると、 非常に簡素なのがわかりますね!
Sinatraの魅力は簡素なため、しっかりと理解しないと コードがかけないという利点(苦笑)があります。
以下ではSinatraを題材にして紹介を行っていきます。 環境設定はググるといっぱいあるので、説明は割愛します!
ビューの表示方法
Sinatraはルーティングが非常に大切です。
Railsでもありますが、 ルーティングとは HTTPメソッドとURLマッチングパターン(パス) が一致した際に行うアクションを規定したものです。
ルーティングは以下のような形で記述します。
get / do #getメソッドパスは「/」 処理 end
※HTTPメソッドとはクライアント(ブラウザ)が行いたいアクション (Get、Postなど)をサーバーに伝えることです。
※URLマッチングパターンとあるように正規表現を使ったり、 ワイルドカードを使うことも出来ます。
※ルーティングには2つの記述方法があるようですが、 シンプルなクラシックスタイルで記述しています。
HTTP GETメソッド 個人メモ
yahoo.co.jpをみたいとしたらchrome(もしくはIE、もしくはFireFoxもしくはsafari)さんにhttp://www.yahoo.co.jp と入力し、「enter」を押します。
これはブラウザを通して、GETメソッドとしてサーバー側にリソースの取得をお願いしていることです。 で、ブラウザ上でホームページが見れるのはサーバーさんがビュー表示をブラウザさんに返しているということ。
Hello World
手軽なものを実行してみます。
hello-world.rb
require 'sinatra' get '/' do erb :hello end
順に説明します。
require 'sinatra'
と記述することでHTTPメソッドが使える+実行すると、Webrick実行(サーバー立ち上げ)してくれます。
get '/' do erb :hello end
クライアント側が/method get(リソースの取得リクエスト)を 行った際のアクションを記述しています。 上記は / のアクセスをした際にerb形式のhello.erb(シンボルで表記するので「:」を付け加える)を出力しろと記述しています。
./view/hello.erb
<!DOCTYPE html> <html lang="ja"> <head> <meta charset="UTF-8"> <title>hello</title> </head> <body> hello sinatra </body> </html>
実行は当該ディレクトリで
ruby hello.rb
するだけでサーバー(Webrick)
が立ち上がります!
実行結果
get、post(Params)
次にget、postメソッドを使ってみます
form.rb
post '/form' do @post_name = params[:post_name] erb :form end get '/form?:get_name?' do @get_name = params[:get_name] erb :form end
get、post形式で、パラメータを渡す際はparamsで受け渡しが行われます。 Railsでもおなじみですね。
view(抜粋)ですが、以下のようにしときます。
./view/form.erb
<h1>シナトラ</h1> <form action="" method="post">ポスト <input type="text" name = "post_name"> <input type="submit"> </form> <form action="" method="get">ゲット <input type="text" name="get_name"> <input type="submit"> </form> <% if @get_name %> <div> ゲットしました。<br> こんにちわ<br> <%= @get_name %>さん </div> <% elsif @post_name %> <div> ポストしました。<br> こんにちわ<br> <%= @post_name %>さん </div> <% end %>
ビューにはform.rbで定義されたインスタンス変数が渡されます。
実行結果
最後に
ここでは紹介しませんでしたが、rubyの代表的なDB Gemである 「Active Record」 も使いました。今回Sinatraを使うことでDB、ビューの理解が非常に理解が進み、感動しました。
というのも、
ここ一ヶ月 Railsを勉強してなんというか
サービス作るには Rails new して、DB作るには、Rails generate ・・・っていう風に
「コマンドゲー」 ぽい感じで作業していて、 プログラミングに対するモチベーションが 下がっていく一方だったんです。 それもこれも僕が初心者なんで、理解が不十分なまま、使っていたのが起因なんですがm( )m
そんな状況下でSinatraを触ってコードを書いていくと「受け身」にならずに「能動的」にコードを書く事が出来て理解が進むと同時にプログラミングを楽しむことが出来ました。
これからも、gemの試しなどSinatraを積極的に利用していこうと思います!