まさ@ブログ書き込み中

自由に生きるための英語、プログラミング、考えごとについて色々書いています。

【Rubyのフレームワーク入門】SinatraとRailsの違いを説明します【コードで紹介】

f:id:masaincebu:20180819212230j:plain

 Rubyを勉強してWebアプリケーションを作れるようになりたい。RubyのフレームワークではSinatraやRailsが有名らしいけど、どっちがいいんだろう。具体的にこの2つの違いを知りたいな。

 

こういった人に向けて記事を書きます。

 

僕は大学四年生の頃からRubyを勉強し始めて、Webアプリケーション制作の経験を積むためにSinatraでアプリケーションを作成し、そのあとにRailsを使って仕事をした経験があります。

 

今回はSinatraとRailsの違いをまとめていきたいと思います。どのフレームワークを使うか考える際の参考になれば幸いです。

 

また、今回はコードを載せたり細かい内容に触れますが、わかりやすさを重視して大雑把に説明しているのでご了承ください。

 

この記事のポイント

  • Sinatraはシンプル、Railsは複雑だけど便利

  • SinatraとRailsのコード例で違いを見てみよう

  • 初心者にはSinatraから触ることをおすすめします

 

Sinatraはシンプル、Railsは複雑だけど便利

f:id:masaincebu:20180819214724j:plain

まず、簡単に「フレームワーク」の意味から説明したいと思います。

 

プログラミング言語はコンピューターに命令をするコードを書くことでコンピューターに処理をさせることができますが、実際にアプリケーションをつくるときには多くのコードを書く必要が出てきます。

 

その中には、どんなアプリケーションでも必要になってくる共通の処理というのが出てきます。それを毎回いちいちやっていたら時間がもったいないですよね。

 

そこでフレームワーク(枠組み)が役に立ちます。フレームワークは、よく使われるような必要な処理をひとまとめにして簡単に使えるようにしてくれます。RubyでWebアプリケーションを作るときには、色々なフレームワークがありますが、SinatraやRailsが有名です。

 

このSinatraとRailsの違いについては僕が以前書いたこの記事に詳しいです。

東京暑いからRailsとSinatraの違いについて熱く語る - まさ@ブログ書き込み中

 

上の記事の内容をざっくりまとめると、Sinatraは小規模なアプリケーションをつくることに適していて、最低限の機能だけを実装しています。一方、Railsは複雑なアプリケーションをつくることに適していて、たくさんの機能を実装しています。

 

シンプルなSinatra、複雑だけど便利なRailsと覚えておくといいと思います。

 

SinatraとRailsのコードで違いを見てみよう

f:id:masaincebu:20180819214148j:plain

とても簡単なコードを通してSinatraとRailsの違いを少し見てみましょう。 以下のコードは、URLの内容を使って文字をブラウザに表示させるためのコードです。

Sinatra

Sinatraでは、sinatra_sample.rbの中身だけで「どのURLがきたら」「どんなことをするのか」が書かれています。コードの1行目のgetから始まるURLがそうです。ここでは「"/"の後に何か書いてあるURLでGETリクエストが送られたら」「その文字を使ってHelloを言う」ということになっています。

 

例えば、このSinatraアプリケーションに相対パスで"/Masa"と送れば、"Hello, Masa!"となるわけです。このシンプルな処理でも、同じことをRailsでやろうとすると違いがうまれます。

Rails 

まず、ファイルが2種類という点でSinatraと内容が違います。routes.rbというファイルはSinatraのコードにもあった「どのURLがきたら」を決める内容が書かれたファイルです。ちなみに、これをルーティングと言います。

 

ここでは、該当のURLが来たら「MessagesControllerのshowアクションに処理を渡すよ」と書いてあります。ここでは意味がよくわからなくても問題ありません。要するに、もう1つのファイルに書かれたコードへ処理を託すのです。

 

そしてもう1つのファイルにはSinatraの例と似たような処理が書かれています。

 

さて、SinatraとRailsのコードを見てもらいましたが、この中にはパッと見ただけではわからないような両者の違いが表れています。

 

例えば、Railsをうまく使いこなすにはMVC(ファイルを色々わけて、処理を分けるというデザインパターン)やRESTful(URLとリクエストの種類によって処理を分けるさいに従うべき考え方)などの概念を知る必要があります。

 

Railsのコードで書かれたファイル「routes.rb」では相対パスで"/messages/:content"というURLでGETリクエストが飛んできたらmessages#showに処理を渡すとルーティングを定義していますが、これはRailsのRESTfulな考え方に則っています。

 

SinatraとRailsの違いはもっとたくさんありますが、とにかくSinatraとRailsには違いがあって「Sinatraの方がシンプルな気がする」と感じ取ってもらえれば幸いです。

 

初心者はSinatraから触ることをおすすめします

f:id:masaincebu:20180819215421j:plain

冒頭に紹介した僕のSinatraとRailsの比較記事の結論でも言っていますが、Rubyのフレームワークの初心者の方であれば、Sinatraをまず触ってみることをおすすめします。僕自身もそうやって勉強しました。

 

RailsはRails的な考え方が結構あって、それを覚えることに時間がかかりますが、SinatraはよりピュアなRubyに近い書き方で色んなことができます。

 

Sinatraの公式ホームページでは「Sinatra is a DSL for quickly creating web applications in Ruby with minimal effort」と言っています。「最小限の努力で素早くRubyでWebアプリケーションを作成できる」ということです。

 

実際、Sinatraを書いて起動するまでのスピードは圧倒的に早いです。Macの方は以下のファイルを作成してください。

 

そしてターミナルでhello_sinatra.rbがあるディレクトリ(フォルダ)で「gem install 'sinatra'」と打って、「ruby hello_sinatra.rb」と打ってみてください。しばらくまってターミナルのログの出力が終わったらブラウザのURLのところに「localhost:9292」と打ってみると、文字が確認できます。

 

今回はここまでです。記事が長くなってしまうので深入りはできませんでしたが、SinatraとRailsは違ってて、Railsの方が覚える内容が多そうだというのはわかっていただけのではないでしょうか。今回の内容が皆さんが使うフレームワークを考える際の判断材料になれば幸いです。