Ruby on Railsとは?
Rubyで作られたWebアプリケーションフレームワークです。
Webアプリ開発に必要な機能が全て詰まっていることから「全部入り」のフレームワークとよく言われます。
Javaに影響を与えた
「Ruby on Rails」は、2004年にRuby向けのWeb開発フレームワークとして登場しました。
特徴
- 乱雑な設定ファイルの廃止
- クラス、メソッドの命名ルールを使った設定
- Model-View-Controllerによる画面表示
- データベースを独立させた設計
- 書いたコードがその場で即時反映(スクリプト言語であるがゆえ)
「Ruby on Rails」は、「それまでの10倍早くアプリケーションが作れる」とまで言われました。
「Railsライク」という言葉ができ、Javaにも影響を与えた
Ruby開発者だけでなく、Java開発者にも影響を与えました。当時、2001年に登場した「Struts」が全盛の時代でしたが、それが霞むほどの設計だったのです。
「Railsライク」で作られた様々な言語が登場することになりました。
Grails
2006年に登場し、「Groovy」(Javaに近い文法)というJVM上で動くスクリプト言語のフレームワークとして登場しました。
(JVM自体は、Java SE6から、「スクリプトエンジン」というものが出来て、Java以外の言語も動かせるようになったのです。)
Play Framework
2006年に登場した「Railsライク」なJavaフレームワークです。
特徴としては、「Java EE(JSP/サーブレット)を切り捨てたこと」です。Tomcat等もなく、独自のクラス、サーバーで実行することができるフレームワークでした。
Spring MVC
Spirng FrameworkのWebアプリ開発向けのフレームワークです。「Spring Roo」というユーティリティを使うことで、「高速開発」が可能になっています。(これも、Railsライクといえるでしょう。)
「Spring MVC」については、詳しくは下記の記事でも解説しています。
Railsの特徴
- MVCアーキテクチャ
- 同じ事を繰り返さない
- 設定より規約
- requireを書く必要がない
MVCアーキテクチャ
「モデル」、「ビュー」、「コントローラー」で3層構造で分けています。様々なフレームワークで取り入れられています。
同じ事を繰り返さない
「設定は1度のみ」という設計思想になっており同じようなコードを何度も書かなくても良いです。
例えば、テーブルを定義すると、Railsが自動的に構造を読み取ってくれます。
設定より規約
いちいち、設定ファイルを用意する必要が極力ない設計になっています。
requireを書く必要がない
通常のRubyのソースでは組み込みライブラリ以外はrequireで読み込む必要がありましたが、Railsが自動で不明なクラスを読み込んでくれるのでほとんどrequireを書く機会はありません。
バージョン一覧
古いバージョンのRailsは、どんどん公式サポート対象外となるので、注意が必要になります。
バージョン | リリース日 | 特徴 |
---|---|---|
3.0 | 2010年8月 | |
3.1 | 2011年 | jQuery、CoffeeScriptを標準採用した。 |
4.0 | 2013年6月 | |
4.1 | 2014年4月 | |
4.2 | 2014年12月 | |
5.0 | 2016年6月 | Web APIに対応した。 |
5.1 | 2017年4月 | Babelを導入されECMA2015に対応した。 |
5.2 | 2018年8月 | |
6.0 | 2019年8月 |
Ruby本体のプログラム
RubyライブラリであるRubyGemsとして提供されています。
Railsは、多くのRubyGemsの集まりになっています。
RubyGems | 説明 |
---|---|
Action Pack | Action Controller、Action Dispatch、Action Viewの総称(MVCのVC) |
├ Action Controller | コントローラーの管理、リクエスト処理、状態管理、レスポンスの生成をする。 |
├ Action View | HTML、XML、JSON等の各種フォーマットでのレスポンスを出力する。View開発に役立つヘルパーやレイアウトを提供、Ajaxにも対応 |
└ Action Dispatch | リクエストをどのクラスで処理するか決定するルーティング機能を提供 |
Active Model | 命名規則、検証機能等のModelの基本機能を提供 |
Active Record | データベース操作をする。 |
Active Mailer | メールの送受信を実施するライブラリ |
Active Job | バックグラウンドで実行すべきジョブを管理 |
Active Cable | RailsアプリにWebSocket機能を提供する。 |
Active Support | Rubyの機能を拡張する。(例えばStringクラスにunderscoreというメソッドが追加されている) |
Railties | Scaffold等のRailsに必要な各種ライブラリをつなぎ合わせるRailsのコア |
sprockets-rails | CSSやJavaScriptを一つにまとめる。 |
その他、Railsで良く使われているRubyGems
RubyGems | 用途 |
---|---|
devise | ユーザー登録、ログイン等の認証 |
omniauth | SNS連携での認証 |
kaminari | 一覧画面のページング |
Railsのアプリケーションサーバ、環境別の構成例
現在のRailsのデフォルトのアプリケーションサーバは「Puma」になります。
Railsのバージョン | アプリケーションサーバ | 特徴 |
---|---|---|
4まで | WEBrick | |
5以降 | Puma | WEBrickに比べると、Webアプリを使用している際の体感速度が速い。 |
ローカル
pumaを使います。(「rails s」で起動する奴)
本番環境
Pumaだけだと静的ファイル(Railsのpublicフォルダ)を表示のために機能させる「Puma + Ngnix」の構成が取られることが多いです。(Rails4まではUnicorn + Ngnixの構成が取られることが多かったみたいです。)
なお、以前はNginxにロードバランサの役割として使われていることが多かったようですが、現状は、AWSのALBで負荷分散することが多く、Ngnixはロードバランサ目的というよりは静的ファイルの表示のため(Railsのpublicフォルダ)のみに使われることが多いようです。(そもそも使われてない構成などもあるようです。)
テスト用フレームワーク
Rspec
RubyにおけるBDD(振舞駆動開発)や動く仕様書(Spec)を実装するという思想で作られているフレームワークです。Rubyの開発文化にBDDを普及させました。また、多機能で複雑なDSL(ドメイン特化言語)で構成されます。現場でも非常に多く取り入れられておりRubyのテスティングフレームワークのデファクトスタンダードと言ってもいいでしょう。
DSL(ドメイン特化言語)とは?
Rubyプログラムを別の言語体系で記述できるようにデザインされた言語という意味です。
Minitest
Rails標準のテスティングフレームワークでデフォルトでRubyにも入っています。シンプルで学習コストも高くありません。
test-unit
Rubyにデフォルトでインストールされるフレームワークです。Minitestはtest-unitと互換性のあるコードを目指していたのでテストコードが非常によく似ています。
FactoryBot
テスト用データの作成をサポートするgemです。RailsにもFixture(フィクスチャ)というテストデータを用意する仕組みはありますがその代替という位置付けのgemです。ActiveRecordの便利なメソッドをかなり使えるようになっているので複雑なデータの作り込みがかなりしやすくなっています。実際の開発現場でもこのFactoryBotはよく使われています。
RailsのFixtureの欠点
シンプルでデータベース構造に忠実にデータを作ってくれますが、複雑なデータの作り込みが苦手です。
FactoryBotの欠点
ただ、FactoryBotにも欠点はありフィクスチャに比べると動作が遅い点です。データを多く用意しすぎるとかなり遅くなるのでその辺だけは頭に入れておくようにしましょう。
この記事へのコメントはありません。