まさ@ブログ書き込み中

まさ@ブログ書き込み中

まさの旅、英語、プログラミング、プライベートについて、色々記録しています。

東京暑いからRailsとSinatraの違いについて熱く語る

f:id:masaincebu:20170708161825p:plain

引用元:http://sparkmasterflex.com/singing-a-ruby-on-rails-ditty-with-sinatra/

 

こんにちは、まさです。

 

朝5時半起きで7時半の飛行機に乗って、10時過ぎに成田空港に着きました。

 

12時前の京成バスで東京駅まで約1時間。そこから次の予定のために渋谷に着き、カフェ見つけられたの今が14時という、移動で半日使った衝撃に戸惑いを隠せないです。

 

さらにキツイのは今日の東京、めっちゃ晴れててめっちゃ暑いということ。

f:id:masaincebu:20170708141312p:plain

 

というわけで、この熱気に負けないくらいの熱量で今回は僕が二日前からハマってたRuby on Railsについて、今まで使ってたSinatraと比較しながら整理していきたいと思います。

 

 

RailsSinatraのちがい

よく言われている(ように思われる)のは

  • RailsRubyを人気にさせた功績者。比較的用意に学べて、開発速度が速い。
  • SinatraDSL*を使い、小規模なアプリケーションを簡潔に記述することを目指したフレームワーク

* DSLDomain-Specific Language、つまり特定の目的に特化した言語

 

といったところでしょうが、もう少し両者の違いを補足しておきます。

 

Ruby on Railsだけじゃない!Rubyフレームワーク6選によると、Ruby on railsの二つの原則を以下のように紹介している。

 

Ruby on Railsでは、多くのプログラマーがより素早く、カンタンにサービスを開発できるように作られた。と考えられた結果として開発されたため、以下のふたつの大原則がある。

DRY(Don't Repeat Yourself)

「同じことを繰り返さない」ということを意味している。同じコードや似たようなコードを何度も書くのは、効率が悪いし、変更に弱い為やめるべきだという発想だ。

誰しもが理解できる拡張性の高いコードも同じようにDRYなコード記述によって生まれる。これが原則になっている。

COC(Convention Over Configuration)

これは、プログラマーの意思よりも「規約(決められたルール)を優先する」ということを意味している。Railsはどんな風にアプリケーションを開発することが最善の方法がであるかを、ある程度事前に決めてくれている。

これが「規約」であり、この規約を守り抜くことを前提としてフレームワークが構築されている。規約というレールに乗ることで、最速でアプリケーション開発を行うことができるようになる。初心者の方にとっては有益だろう。

反対に、より自由度の高いプログラミングを組みたいベテランエンジニアはRailsを選ぶよりも、PHPPythonなどで書いたほうがいい。

同サイトによるとSinatraについては

非常に手軽で学習コストも低い。Webアプリケーションとは?を理解する為には使い勝手のいいフレームワークになっている。

とにかく単純なものに使うのをオススメする。例えば数ファイルで終わるコードなどだ。YouTubeのあるチャンネルを自動再生し続けるサイトなど。

反面、複雑なサイトには向いていない。RailsかPadrinoを使ったほうがいいだろう。

他のサイトでもSinatraは以下のように表されています。

小規模なアプリケーションに特化したフレームワークです。Ruby on Railsと比較するとインストールが非常に簡単で、気軽にアプリケーションを作ることができます。一方、手軽な分機能は豊富に使えるわけではありません。そういった便利な機能はRubyのライブラリから自分で拡張する必要があったりします。

 

ここまでくると冒頭に書いた両者の違いは以下のように書き変えられそうです。

  • Railsはとにかく早くしっかりとしたサービスをつくれる。しかし、Railsの便利機能に頼っている分、自由度は低い。
  • Sinatraは簡単なサービスをつくるために作られた、気軽に使えるフレームワーク。ただし、簡単な分しっかりとしたサービスをつくるのには向いてない。

 

RailsSinatraぶっちゃけどっちが仕事で役立つの

Sinatra

 先ほどの分析を鑑みれば、どう考えてもRailsかなーと思ったら、【2017年版】Rubyのフレームワーク6選比較と選ぶ基準|フリエンSinatraを導入している企業や団体について言及してます。

アップル、BBC、イギリス政府、GitHubなどの名だたる企業や団体によって使用されており、RoRの次に人気の高いフレームワークです。

 

まじか。同サイトでは開発効率の点で言えば

 小さな部品を組み合わせて作るスタイルのため、機能を多く持つシステムを作成する時に優先度の高いものから順番に着手することが可能なため、開発の効率も上がります。

 

と評価しています。

 

Rails 

とは言ってもかの有名な侍エンジニア塾さんは 大人気フレームワーク「Ruby on Rails」とは?概要などを簡単解説! | 侍エンジニア塾ブログ | プログラミング入門者向け学習情報サイト で

RubyにはMerb, Sinatra, Waves, Ramaze と呼ばれるような他のWEBフレームワークも存在しています。

しかし、実質開発で使われているフレームワークはほとんどがRuby on Railsです

Ruby on Railsは多くの人に使われているので、事例のある技術として安心して使うことが出来ます。

また、エンジニア求人で「Rubyエンジニア募集」と書かれている案件は、そのほぼすべてが「Ruby on Railsを使える人」を指しています

スクリーンショット_2016-03-13_11_47_25

 

と紹介しています。

 

 

 実際につかってみた感想

まさはProgateの豊富なRuby on rails講座を約半分ほど終わらせて、Twitter風アプリケーションをRailsで作りました。

 

また、6月にはLINE風アプリケーション「MINE」をSinatraで書いたことがあります。

 

両方のフレームワークを使って感じたことをまとめてこの記事を締めくくりたいと思います。

 

Railsは全部やってくれる

以前から「Railsは便利だ」という話を樹理さんから聞いていたのですが、どう便利なのかあまりイメージ出来ていませんでした。

 

実際に触ってみるて驚いたのですが、Railsはそもそも作業ファイルの作成から手伝ってくれます。

 

例えば rails new (アプリ名) で開発に必要なフォルダやファイルをつくり、別のターミナルで rails server をすればサーバが簡単に立ち上がります。

 

rails generate controller (コントローラー名) (ページ名)でController側とそれに対応したViewが作られます。ページを作成していくにあたっては生成されたそれぞれのファイルをいじればいいだけです。

 

Sinatraは一々書くけど学びやすいし直感的につくりやすい

僕はRailsが簡単だし、便利でイケてる思っています。

※余談ですが、僕のはてなブログじゃどのテーマをつかってもツイートが綺麗に埋め込まれず、上のような引用分的な表示になってしまいます・・・誰か解決策ありましたら連絡ください。 

 

それは最初にSinatraで一々ルーティングを意識したり、params変数やget、postメソッドを意識して書いていたからだと思います。

 

SinatraRailsであればルーティングとコントローラーで分けてやる作業を一つに書くことになります。

#ルーティング

get "/top" do

 #アクション(メソッド定義)

 @post = Post.all 

 erb: top

end 

 

また、Railsのビュー側でつかえるlink_toやform_tagなどの便利なメソッドもありません(flashはあります)。

 

ただ、その分Webアプリケーション制作の基礎を理解しながら一つひとつ作っていくことができます。

 

Ruby学ぶならやっぱSinatraRailsが良いと思う

我らがコーチさぼさんのはからいで、僕はSinatraからRubyの世界に入り、Webの本を読んで来たという経緯があります。

 

さらに遡れば、僕は遊びでHTML&CSSだけを学んでいた時期もありました。

MINEを使った時にはMySQLをまず学びつつも見よう見まねでActiveRecordやMigrationをいじってきました。

 

それがあってこそ、今のRuby on Railsをいじったら何がどう便利に置き換えられているかがほぼわかっています。

 

逆にいうと、Railsからプログラミングの勉強をしてしまうと、何がどうなっているのかわからないままで終わってしまうのではないでしょうか。

 

というわけで典型的なパターンですが、自分がやってきて満足しているからという理由だけでフレームワークSinatraRailsがいいかなと思ったりしてます。

 

というわけでこの記事はこれで以上。

 

実は、調べていくうちにRackについても興味が出てきたので

今日中にRackについての話を書きたいと思っています。

 

ではまた。

 

 

追記 

我らがコーチさぼさんからメッセンジャーで以下のような指摘を受けました。

 

Rails, 自由度が低いというのはちょっと語弊があって、Railsの提供する機能を知る必要があるから学習コストが高い、覚えるといろいろやってくれて便利、そこからカスタマイズしていくと場合によっては途端に難しくなる、という感じ。俗にいうレールから外れるというと大変というやつ
Rails wayに乗っかってる時は楽
徳元 将義

 

ほむほむ。

 

じゃあActiveRecordってどうなってるんだけ、Controllerってどういう動きするんだっけ、Viewになんで@つければあたい渡せるんだっけ、Request来た時どういう手順で動いてるんだっけ、rails s するとどう動くんだっけ、Assets pipelineとは?Turbolinksとは、ActionCable?Migration? gem?
徳元 将義
 
と機能がてんこ盛りなので全部ある程度理解するまでは時間かかる

 

なるほど。

 

僕は

 

Railsはとにかく早く簡単にしっかりとしたサービスをつくれる。しかしRailsの便利機能に頼っている分、自由度は低い。

 

と書いていましたが、さぼさんの話を考慮するとRailsの機能について理解していればそりゃあ自由に使えるよ、ただ便利になりすぎてそれを理解する学習コストは高いよ、という感じでしょうか。

 

また、さらに一歩進んでカスタマイズということになると一気に難しくなるのですな。

 

やはり学習コストの高いRailsを理解するためにもSinatraから入ることは大切ですし、Rails自体の仕組みというか深い意味を理解する必要があるなと感じました。

 

また、僕とさぼさんの質疑応答は白熱し「深く理解するとは」という話に。

僕が「ではRailsSinatraを理解するとはRubyを理解することなんでしょうか」と聞いてみると、

 

 

Sinatra, RailsでいうとHTTPのアプリケーションなので、SinatraはHTTPのベーシックに基づいた最低限の機能だけ備えたweb frameworkとなるね
徳元 将義
そのレベルですか

 

 とのこと。なるほど、さぼさんの先ほどのメッセンジャーでの言葉を借りれば、よく考えたら何で@をつければ変数が保持できるのか、リクエストはどんな手順できているのか。アクティブレコードってどうなっているのか。すべてはHTTPのベーシック(またはさらにその下のベーシック)の理解に依るのですな。