Railsチュートリアルを済ませて何となくは分かったものの、Railsはまだアイテムレベルが高い気がする。
ので!
とりあえずフレームワークというものを使ってみたいので、Sinatra というRailsとは対照的に極シンプルであるフレームワークがあるらしいから触ってみることに。
環境
Ubuntu 14
ruby 2.1.5
考えてみると、MacBookには叶わないと思うけれど、レンタルサーバーって管理が不要でわりとどこでも開発できる環境なんじゃないか?ということに気付いたが、thinを入れようとしたらeventmashineのインストールでこけたので中止。
追いかけるのは今やるべきじゃないと思うので、ローカルのUbuntuでやる事にした。
おほほ(;^ω^)
インストール
技術評論社のRuby徹底攻略を参考に進めていきます。
$ mkdir sinatra_projects $ cd sinatra_projects
bundle init で Gemfileができるので中身を記述。
$ bundle init $ cat Gemfile source "https://rubygems.org" gem 'sinatra' gem 'thin' $ bundle update $ bundle install
Railsチュートリアルをやったので何となく意味は大丈夫だが、Rubyのことはまだほとんど知らない。
$ vi app.rb require 'sinatra' get '/' do 'Hello, world!' end
起動してみます。オプションは-o 0.0.0.0でもOK。
OKですがどちらかは付ける必要があります。
$ ruby app.rb -e protection == Sinatra/1.4.5 has taken the stage on 4567 for protection with backup from Thin Thin web server (v1.6.3 codename Protein Powder) Maximum connections set to 1024 Listening on 0.0.0.0:4567, CTRL+C to stop
これでアクセスすればHello world!が出る。
出たら準備は完了かね。
何をやるか
端的にシンプルなことならSinatra。DBとリンクしていろいろな処理(ユーザー認証・管理とか?)をするとか複雑な事をさせるアプリだとRailsが楽という書かれ方をしている。
楽という表現になるのはそういう事なのだろうなあ。
今回はAPIを処理する簡単なページを作ろうと思っていたのでSinatraというチョイスは方向性は間違ってはいないようだ。
ちなみにSinatraはUIだけ、CGIの代わりだけといったような用途にも向いているらしい。
irbで実験
ライブラリの読み込み
> require 'open-uri' > require 'json'
DoorKeeperさんのイベントを取得してみます
> url = 'http://api.doorkeeper.jp/events/?ruby' * json = open(url).read => "[{\"event\":{\"title\":\"CS-Cafe@Tsukuba #3\",\"id\":17897,\"starts_at\":\"2014-12-10T09:30:00.000Z\",\"ends_at\":\"2014-12-10T11:30:00.000Z\",\"venue_name\":\"\\u7b51\\u6ce2\\u5927\\u5b66\\u7dcf\\u5408\\u7814\\u7a76\\u68dfB\\u68df1001
JSONライブラリでRubyのオブジェクトに変換します。
> repos = JSON.parse(json) => [{"event"=>{"title"=>"CS-Cafe@Tsukuba #3", "id"=>17897, "starts_at"=>"2014-12-10T09:30:00.000Z", "ends_at"=>"2014-12-10T11:30:00.000Z", "venue_name"=>"筑波大学総合研究棟B棟1001号室", "address"=>"茨城県つくば市天王台", "lat"=>"36.111155", "long"=>"140.09998730000007", "ticket_limit"=>10, "published_at"=>"2014-11-23T13:42:04.283Z", "updated_at"=>"2014-11-23T13:42:04.287Z",
ppライブラリで表示を整えたり。
* require 'pp' => true > pp repos; nil [{"event"=> {"title"=>"CS-Cafe@Tsukuba #3", "id"=>17897, "starts_at"=>"2014-12-10T09:30:00.000Z", "ends_at"=>"2014-12-10T11:30:00.000Z", "venue_name"=>"筑波大学総合研究棟B棟1001号室", "address"=>"茨城県つくば市天王台", "lat"=>"36.111155",
他にも色々ありますが、ただリクエストするだけだったら、だいたいこんな感じです。
勉強会の情報を取得するページを作ってみる
練習ではdoorkeeperさんでしたが、こっちはatndさんでいきます。
あとでgithubにアップするので、たんたんと流れだけ書いてみます。
・ルートとビューから呼べるヘルパーメソッドを作成。
・ルート定義とやら
Railsのコントローラにあたる模様。Railsチュートリアルでは色々なページがあったので複数ならべていましたが、今回は1ページなのでget ‘/’ do のみで良い模様。
ルート定義の中にhtmlを文字列として渡す処理を書き込み、erbメソッドに渡す方法がやりやすいようです。
erbファイルを別に置く場合は、viewsディレクトリ以下に設置して、ファイル名をシンボルとして渡せばよいとのこと。
get '/' do erb :hoge end
こんな感じ。
Railsにあったレイアウト機能も利用可能で、これもviews以下に設置。
基本的なところはほぼ共通なようだ。
views/layout.erb
bodyタグ内で <body> <%= yield %> </body>
みたいな感じ。
スタイルシートはpublic以下に設置すればOK。
では参考書籍にならって、app.rbに打ち込んでいきます。
PHPだとわりとすぐに出来たのにRubyだとうまく書けない・・・
うー うー うー
Bootstrapを使ってみよう
公式からDLしてきてSinatraの作業ディレクトリに展開。
publicにリネームしました。
public ├── css │ ├── bootstrap-theme.css │ ├── bootstrap-theme.css.map │ ├── bootstrap-theme.min.css │ ├── bootstrap.css │ ├── bootstrap.css.map │ └── bootstrap.min.css ├── fonts │ ├── glyphicons-halflings-regular.eot │ ├── glyphicons-halflings-regular.svg │ ├── glyphicons-halflings-regular.ttf │ └── glyphicons-halflings-regular.woff └── js ├── bootstrap.js ├── bootstrap.min.js └── npm.js
そしてそして
やっと出来上がりました!
app.rb 1枚でもいける全然短いコードですが、erbを2枚つかって読み込む感じにしてます。
慣れるためのものなので。
takekentw/sinatra_projects · GitHub:
かわいいは正義!と言うだけあって、見栄えがいいとそこそこ見れる。
最初はこんなのでいいよね~。
viewsとかcontrollerとかに慣れて、もうちょっと大きいものが必要になったらRailsに戻ろう。
イベントサイトを網羅するとなるとDBは必須だろうし、そうなるとRailsが楽らしい。
参考書籍
Ruby 徹底攻略 技術評論社
参考サイト
rails から外れた僕らは sinatra で i did it my way (2) – momota.txt:
セミナー・勉強会・イベント管理ツール | Doorkeeper:
イベント開催支援ツール アテンド : ATND: