Ruby on Rails(通称:Rails)とは、Rubyエンジニアを名乗るのであれば、絶対に知っておきたいフレームワークの1つです。
WebアプリケーションをRubyで開発する場合、必ずといっていいほど「Rails」が候補に上がってきます。
今回は、そんなRailsの概要や、Rails環境を構築するうえで知っておきたい用語について紹介します。
この記事を読むことで、以下の用語を上から順番に理解できるようになっています。
- 「Ruby on Rails」…Rubyのフレームワーク
- 「MVC」…アーキテクチャパターンの1つ
- 「RubyGems」…Rubyのパッケージ管理ツール
- 「Bundler」…Gemfileを使った管理ツール
- 「Puma」…Rackを使ったAPサーバ
- 「Rack」…Webサーバとアプリのインターフェース
- 「Nginx」…Railsで主に利用されるWebサーバ
自分がどのくらいRailsを理解しているか確認する意味でも、ぜひ最後まで読んでもらいたいです。
もくじ
Ruby on Railsとは
「Ruby on Rails(ルビーオンレイルズ)」とは、Rubyで作られたWebアプリケーションフレームワークのことです。通称「Rails(レイルズ)」と呼ばれています。
- 「Ruby」…プログラミング言語
- 「Ruby on Rails」…Rubyで作られたWebフレームワーク
フレームワークとは、何かを作るうえで、効率よく開発が進められるようになった枠組みのこと。
つまり、Webアプリケーションを効率よくRubyで開発するために作られた枠組みが「Rails」なんですね。
枠組みといっても、RailsはRubyで書かれた「ただのソースコード」です。
このソースコードには、Webアプリケーションを開発するうえで便利な機能や仕組みが凝縮されています。
これらの機能を呼び出して、規約に沿って開発することで、効率よく簡単にWebサイトを作ることができるのです。
また、Railsフレームワークは「MVC」というアーキテクチャパターンが採用されていることも大きな特徴です。
MVCとは
MVCとは、アプリケーションを開発するためのアーキテクチャパターンの1つ。
アーキテクチャパターンとは、日本語にそのまま置き換えると「構造のパターン」ですね。
開発をするうえで、よく利用される基本構造のことだと思ってください。
MVCアーキテクチャパターンは、アプリケーションを大きく以下の3つに分けて考えます。
- 「Model(モデル)」…主なシステムの処理を担当
- 「View(ビュー)」…画面の描画を担当
- 「Controller(コントローラ)」…ModelとView間のデータ受け渡しを担当
ModelはDBデータの扱いやシステムの処理(ビジネスロジック)を担当し、Viewはブラウザに表示される描画部分を担当、ControllerはそんなModelとView間でのやりとりを主に担当しています。
まとめると、ユーザーがWebサイトにアクセスしたとき、MVCアプリケーションではこのような動きをしています。
- ユーザーがブラウザでWebサイトにアクセス
- 「Controller」がリクエストを受け取って、「Model」に必要な指示を出す
- 「Model」はデータベースに接続後、データを取得して加工し、「Controller」に返す
- 「Controller」は受け取ったデータを「View」に渡す
- 「View」は受け取ったデータを利用し、HTMLなどの画面に表示するコードを生成
- ユーザーのブラウザにHTMLなどのデータを渡す
このようなMVCモデルは、Railsに限らず、ほかのフレームワークでも多く採用されています。
Railsは本当に簡単なのか
Railsは、Webアプリケーションの開発を簡単にするとお伝えしましたが、誰もが簡単に扱えるというわけではありません。
Rubyやデーターベース、Web通信などの基礎を理解していることが前提になります。
Railsを始める前に、最低でも以下の記事を理解できるくらいの知識は必要になるでしょう。
RubyGemsとは
RubyGemsとは、Rubyのパッケージ管理ツールです。
Rubyのパッケージ管理ツールを使えば、gemパッケージ(Ruby用ライブラリ)のインストールやアンインストールなどを、簡単におこなうことができます。
もちろん、このRubyGemsはRailsをインストールするときにも利用します。これは、Railsもgemパッケージとして提供されているためです。
RubyGemsは、「gem」コマンドを使って操作しますが、すでにRubyを勉強されている方なら、「gem install」などのコマンドを使ったことがあるかもしれませんね。
また、「gem」という用語自体はRubyGemsで扱うパッケージ単位でもあり、RubyGemsを実行するためのコマンド名でもあります。ちょっと紛らわしいですよね。
ちなみに「gem」を使ったことがない方は、「yum」のRuby版だと思ってもらえればいいです。

Bundlerとは

引用:https://bundler.io
Bundlerとは、開発に必要なgemパッケージを「Gemfile(ジェムファイル)」で管理するためのツールです。
Bundlerを使ってgemパッケージをインストールするには、「bundle install」コマンドを使います。
「bundle install」コマンドを実行することで、「Gemfile」が読み込まれ、記述されたgemパッケージを1つずつインストールすることができます。
もちろん、インストール以外にも、パッケージの更新やアンインストールなどの操作もおこなえます。
そしてRailsは、この「Bundler」を使ってRailsに必要なgemパッケージを管理する仕組みになっています。
「rails new」コマンドでRailsアプリを作成したときに、「Gemfile」が同時に作成されるのはこのためです。
でも、なぜRailsは「RubyGems」をそのまま使わずに、わざわざ「Bundler」を使ってgemパッケージを管理するのでしょうか?
これは、必要なgemパッケージをまとめて管理できる「Gemfile」の存在が大きいです。
Railsに限らず、「Gemfile」さえあれば、いつでもどこでも誰でも簡単に同じ環境を作ることができますからね。
Pumaとは

引用:https://puma.io
Railsを知るうえで、絶対に外せないのが「Puma」の存在です。
なぜなら、Rails5からは、アプリを起動させると「Puma」が内部で動くようになっているからです。
Pumaを知らなくても、Railsを動かすことはできるのですが、細かい設定などが必要になってくると避けては通れなくなります。
Pumaとは、Webサーバの1つなのですが、ほかのWebサーバとは少し毛色が違います。
というのも、Webサーバの機能はおまけ程度で、「Rack」という機能を提供するためのアプリケーションサーバという位置づけのほうが正しいからです。
これは、Pumaの公式サイトでもそのように記載されています。
Unlike other Ruby Webservers, Puma was built for speed and parallelism. Puma is a small library that provides a very fast and concurrent HTTP 1.1 server for Ruby web applications. It is designed for running Rack apps only.
日本語に訳すと
「他のRuby Webサーバーとは異なり、Pumaはスピードと並列処理のために作られました。 Pumaは、Ruby Webアプリケーション用の非常に高速かつ同時のHTTP 1.1サーバーを提供する小さなライブラリです。Rackアプリのみを実行するように設計されています。」
つまり、PumaはRackアプリとして使うことがメインで、Webサーバとしての機能は最小限だということになります。
Railsでは、PumaをWebサーバではなく、アプリケーションサーバとして利用することがメインになります。

Rackとは

引用:https://rack.github.io
Rackとは、「Webサーバ」と「Rubyで作られたWebフレームワーク(Railsなど)」を繋ぐ、インターフェースの役割をするライブラリです。
つまり、Rackを使わなければ、WebサーバからのリクエストをRailsなどのフレームワークに渡すことができないということです。
そのため、RailsはRackアプリサーバである「Puma」を内部で動かすことで、Webサーバとのやり取りを実現させています。
「でも、Puma自体もWebサーバなんでしょ?」
もちろん、PumaもWebサーバなので、わざわざ別のWebサーバを立てなくても、直接Pumaに対してブラウザからアクセスすることができます。
ただし、さきほどもお伝えしましたが、PumaのWebサーバ機能はあくまでおまけ。メイン機能じゃないので大量のアクセスには耐えられません。
Nginxと連携
ここで、純粋なWebサーバである「Nginx(エンジンエックス)」の登場です。
Railsは、RackアプリケーションサーバであるPumaしかデフォルトで連携していないため、本番環境などでは「Nginx」などのWebサーバを別に立てる必要があります。
RailsとNginxを連携させる手順は、以下の記事で紹介しています。

まとめ
Rails環境を構築しようと考えただけでも、このくらいの知識は必要になります。
さらにいうと、この記事で紹介した知識は、Railsを扱うためのほんの一部にすぎません。
「Railsは初心者向きだ」とよくいわれますが、プログラミングを始めたばかりの方が、これらの内容を完璧に理解するのはなかなか難しいと思います。
ここまでの情報を自分の力だけで調査でき、独学でRails環境を構築するのは、プログラミング初心者にはかなりハードルが高いです。
だからといって、向いていないとかではなく、最初はそのくらい難しく時間もかかるという話です。
もし、少しでも早くWebエンジニアを目指したいのであれば、プログラミングスクールなどの利用も考えたほうがいいです。

わからないことが聞ける環境、体系的に学べる環境というのは、あなたが思っている以上に重要です。
わからないところで詰まって、時間を無駄にし、そのまま先へ進めず挫折してしまうと、「Webエンジニアになる」という夢は消えてしまいます。
夢をあきらめるくらいなら、スクールに通ってでも効率よく勉強し、早くWebエンジニアになって稼いだほうが前向きの考え方です。
1番マズイのは、「目標を決めずにダラダラと勉強を続けること」だと思います。
ここまで問題なく理解できた方は、「Ruby on Railsのインストールと起動」を読んで、実際にRailsを使ってみましょう。
またね、キツネ(@kitaaaa_kitsune)でした!

