Ruby on Railsは、2004年にDavid Heinemeier Hannsonによって開発された、Rubyプログラミング言語で書かれたWeb開発用のオープンソースのフレームワークです。以下のような特徴があります。
1. モデル・ビュー・コントローラー(MVC)アーキテクチャ
Railsは堅牢なMVCアーキテクチャを採用しており、コードの構造化とコンポーネント分離が容易です。
2. Don’t Repeat Yourself (DRY)原則
同じコードの重複を避け、コードの可読性と保守性を高めるためのDRY原則を支持しています。
3. Convention Over Configuration
設定よりも規約に従うことで、開発者はコーディングに集中できます。規約に従えば、無駄な設定は最小限で済みます。
4. Active Record
オブジェクト関係マッピング(ORM)の実装であるActive Recordにより、データベースとオブジェクト指向プログラミングの世界をシームレスに接続できます。
5. マイグレーション
データベーススキーマの変更をコードとして記述でき、環境間で簡単にスキーマを移行できます。
6. ジェネレーター
新しいリソース(モデル、コントローラー、ビューなど)を素早く生成するためのジェネレーターが用意されています。
7. Ajax/JavaScript支援
非同期通信のサポートが組み込まれ、JavaScriptの統合が容易です。
8. Testing Support
ユニットテスト、機能テスト、インテグレーションテストを統合的にサポートしています。
9. ジェム
RubyGemsのエコシステムを通じて、多くの優れたライブラリ(ジェム)を簡単に利用できます。
10. 豊富なツールと優れたコミュニティ
Rails公式の継続的な改善に加え、活発なコミュニティによって多くのツールやリソースがサポートされています。
Rails の設計思想は「開発者の生産性」と「プログラミングの喜び」にフォーカスしています。規約に従えばコーディングは簡単になり、DRYにより冗長なコードを避けられます。一方で、大規模システムへの対応力や高度なパフォーマンスについては課題もあるため、状況に応じたアーキテクチャの採用が必要です。
Railsは主にスタートアップや中小規模のWebアプリケーション開発に適しています。実際に大手企業のWebサービス(Basecamp、GitHub、Shopify、SoundCloud、Twitch、Zendesk)や国営放送協会のWebサイト(BBC、NBC)などでも使用されています。
Ruby on Railsのコードサンプルを示します。
まずは簡単なブログアプリのモデルから見ていきましょう。
app/models/post.rb
class Post < ApplicationRecord
validates :title, presence: true
validates :body, presence: true
belongs_to :author, class_name: 'User'
has_many :comments, dependent: :destroy
end
ここではActiveRecordを使って、Postモデルを定義しています。タイトルとボディーはPresenceバリデーションをかけ、著者との一対多の関係性とコメントとの一対多の関係性を設定しています。
次にコントローラを見てみましょう。
app/controllers/posts_controller.rb
class PostsController < ApplicationController
def index
@posts = Post.all
end
def show
@post = Post.find(params[:id])
end
def new
@post = Post.new
end
def create
@post = Post.new(post_params)
if @post.save
redirect_to @post
else
render :new
end
end
private
def post_params
params.require(:post).permit(:title, :body, :author_id)
end
end
このコントローラには、投稿の一覧表示、詳細表示、新規作成の機能が実装されています。newアクションで空のPostオブジェクトを作成し、createアクションでパラメータからデータを受け取り、保存します。
ビューは以下のようになります。
app/views/posts/index.html.erb
<h1>Posts</h1>
<% @posts.each do |post| %>
<h2><%= link_to post.title, post %></h2>
<p><%= post.body.truncate(100) %></p>
<% end %>
app/views/posts/show.html.erb
<%= @post.title %>
<%= @post.body %>
Comments
<%= render @post.comments %>
ERBテンプレートを使って、Railsの便利なヘルパーメソッドでビューを構築しています。 これがRailsのアプリケーションの基本的な構造です。モデル、ビュー、コントローラーがそれぞれの役割を持ち、相互に連携しながら機能を実現しています。Rails特有の規約に従うことで、コードの記述量を最小限に抑えられます。 また、Railsにはさまざまなタスクを簡単に実行できるジェネレーターも用意されています。
$ rails generate model Comment body:text post:references
このコマンドを実行すると、Commentモデル、マイグレーションファイル、テストなどが一度に生成されます。
このようにRailsには、開発効率と生産性を高める多くの機能が備わっています。