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) が立ち上がります!

実行結果

https://gyazo.com/79bdc382beb8ffc747d4a4f27b7c703b

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で定義されたインスタンス変数が渡されます。

実行結果

https://gyazo.com/570cfdbadb1c8bbc2a685ba03bbfd6b1

最後に

ここでは紹介しませんでしたが、rubyの代表的なDB Gemである 「Active Record」 も使いました。今回Sinatraを使うことでDB、ビューの理解が非常に理解が進み、感動しました。

というのも、

ここ一ヶ月 Railsを勉強してなんというか

サービス作るには Rails new して、DB作るには、Rails generate ・・・っていう風に

「コマンドゲー」 ぽい感じで作業していて、 プログラミングに対するモチベーションが 下がっていく一方だったんです。 それもこれも僕が初心者なんで、理解が不十分なまま、使っていたのが起因なんですがm( )m

そんな状況下でSinatraを触ってコードを書いていくと「受け身」にならずに「能動的」にコードを書く事が出来て理解が進むと同時にプログラミングを楽しむことが出来ました。

これからも、gemの試しなどSinatraを積極的に利用していこうと思います!