📘

Ruby・Rails違い[メリット・デメリット]

2025/02/06に公開

私はRuby・Railsを使う業務を志望して勉強をしています!
スクールやコミュニティを通じてその魅力を知りましたが、なんでこの2つを魅力的に感じたか、改めて調べてまとめていこうと思います💪

RubyとRuby on Rails違い

ざっくり言うと…

  • Ruby:プログラミング言語。オブジェクト指向が特徴で、シンプルで書きやすい文法を持つ。
  • Ruby on Rails(Rails):Rubyで作られたWebアプリケーションフレームワーク。Webアプリの開発を効率化するためのツールや仕組みが備わっている。

Ruby

Rubyには、多数のライブラリも組み込まれています。Rubyコミュニティの開発者によって作成された「gem」というパッケージを利用できます。gemを活用することで、既存のRubyアプリケーションの機能や性能を拡張したり、変更したりすることができます。gemには、コードと対応するテストツール、ドキュメント、およびgemspec(gemに関する情報を含むファイル)が含まれ、gemspecには、gemの名前、説明、必要な依存関係が格納されています。

上記のように、Rubyの開発者によって便利な機能をどんどん追加されている点も魅力的だと思う。

汎用性が高いが、ウェブ開発向きで、デスクトップアプリ開発などの他の分野では不利

デスクトップアプリとは
PCにインストールして使用するアプリケーション。
特徴:

  • 実行ファイル(.exe/.dmg/.app)を使ってファイルを提供
  • デスクトップに配置可能
  • GUI(ウィンドウを持つ、マウス・キーボードで操作)
    イラスト作成アプリ、動画編集アプリ、Excel・Wordはデスクトップアプリと言えるかも…。

Rubyでデスクトップアプリはなぜ不利?

RubyはWEB開発に適している。なぜデスクトップアプリには向いてないのか?

  • GUI開発向けのライブラリが少ない
  • 実行ファイル(.exeや.app)の作成が手間
    • C#やJavaなら 簡単に実行ファイル(.exeや.app)を作れる。)
    • Rubyはスクリプト言語なので、ruby myapp.rb のように実行する必要があり、単独の実行ファイル化が面倒。
  • Rubyはインタプリタ言語で実行速度が遅い
    • C++ や C# で作ったアプリに比べると 処理が遅い。
    • デスクトップアプリは動作速度が重要なケースが多く、Rubyではパフォーマンス不足になりやすい。

スクリプト言語
特徴

  • コンパイル不要(または不要なことが多い)
  • 簡潔な文法で素早く書ける
  • 自動化・タスク処理 に向いている
  • 動的型付け(型を明示しなくても動くことが多い)

代表的なスクリプト言語

言語 主な用途
Ruby Webアプリ(Rails)、スクリプト処理
Python データ分析、機械学習、スクリプト
JavaScript Webフロントエンド
Bash シェルスクリプト(Linux操作)
Perl テキスト処理、サーバー管理

スクリプト言語の代表的な用途

  • Webアプリの開発(Ruby on Rails、Django)
  • 自動化スクリプト(Bash、Python)
  • サーバー管理(Perl、Bash)

インタプリンタ言語
インタプリタ言語(Interpreted Language) とは、コードを逐次(1行ずつ)解釈・実行する言語 のことを指す。

特徴

  • コンパイル不要(リアルタイム実行)
  • コードをすぐに実行できる
  • デバッグしやすい
  • 処理速度は遅くなりがち

代表的なインタプリタ言語

言語 主な用途
Ruby Webアプリ、スクリプト
Python AI、データ分析、スクリプト
JavaScript Webフロントエンド
PHP Web開発

コンパイル言語との違い
コンパイル言語(Compiled Language) は、コードを事前に機械語(バイナリ)に変換してから実行する言語

代表的なコンパイル言語

言語 主な用途
C OS、組み込みシステム
C++ ゲーム、ハイパフォーマンスアプリ
Go 高速なWebサーバー
Rust セキュアで高速なシステム開発

コンパイル言語の流れ

  1. ソースコードを書く.c.cpp など)
  2. コンパイル
  3. 実行ファイル(バイナリ)を実行

コンパイル言語のメリット

  • 実行速度が速い(事前に機械語へ変換)
  • メモリ管理が効率的

デメリット

  • コンパイルしないと実行できない
  • 開発スピードが遅くなることがある

分類 実行方法
高水準言語
├─ コンパイル型 ソースコードを機械語に変換 C、C++、Rust、Go
├─ インタプリタ型 ソースコードを逐次解釈しながら実行 Perl
└─ ハイブリッド型 一度バイトコードに変換し、その後実行 Java、Python、Ruby、JavaScript
低水準言語 機械語やハードウェアに近い形で記述される アセンブリ言語、機械語

スクリプト言語は、一般的にインタプリタ言語でもある。

  • スクリプト言語 = 手軽に書ける言語(用途や性質の分類)
  • インタプリタ言語 = 逐次実行する言語(実行方式の分類)

これはプログラムはなぜ動くのか 第3版 知っておきたいプログラミングの基礎知識を読んだときにも出てきた。

引用文は、RubyとRuby on Railsの違いより抜粋

Ruby on Rails

フレームワーク
開発で必要な機能をあらかじめ用意してくれる便利な枠組み。
Railsを用意すれば、我々はいちいちビューを一個一個作成する必要なくなる。
コマンドで簡単に作成できる。GemfileなどGemを使う場所もあらかじめ用意されている。

Ruby on Railsを開発し、設定より規約(CoC)とDRY(Don’t repeat yourself)原則が重視されています。「設定より規約」とは、あらかじめ定義された規約に従えば、コードの記述量も設定の手間も抑えることができることを意味します。DRY原則は冗長性を避け、ソフトウェアパターンの繰り返しを削減する指針です。

RubyとRuby on Railsの違いより引用

MVCアーキテクチャ

Railsは、MVCアーキテクチャ(MVCモデル)という設計法に基づいて開発を行う。
Model、View、Controllerに分けて開発を行うことで、効率が良く、生産性の高い開発を実現できる。

DRY(Don’t Repeat Yourself)

Railsには、「同じソースコードの繰り返しを避けるよう記述する」というルールがある。
同じコードを何度も記述すると、仕様変更があった時に編集し忘れなどが発生する可能性もあるから。

CoC(Convention over Configuration)

Railsには、「Convention over Configuration(設定より規約)」という原則がある
あらかじめ用意された規約に従うことで、ソースコードの記述量を短く、見やすいコードにすることができる。

こういった

  • コミュニティが活発でRubyが好きな人が多いように感じる点
  • 見やすさや簡潔さにこだわって作る点

が魅力のように感じる🤔


Rails使わずRubyのみでアプリケーションを作成できるのか?

できるけどかなり面倒!以下は面倒な理由。

Railsが提供する機能を手動で実装する必要がある。

例えば、Railsがないと下記が使えず、自分で設定が必要!

  • テンプレートエンジン(ビュー関連)
    • ERB(index.html.erb)、ERB以外だとHaml・Slim
  • データベース管理(Active Record)
    • config/database.yml(使用するデータベース(SQLite, PostgreSQL, MySQL など)を定義)
    • モデル
    • マイグレーション
    • スキーマ
    • データベースの初期データ(db/seeds.rb)
    • rails consoleでのデータを操作

Webサーバーの準備

rails s(rails server)を実行すると、RailsアプリのWebサーバーが起動するが、その背後には Puma というアプリケーションサーバーが動いている。
rails new アプリ名 を実行すると、Webサーバー(Puma)関連の設定はすべて自動でセットアップされる ので、基本的に 何も設定せずに rails s でサーバーが起動する。
Ruby単体ではWebサーバー機能を持っていないため、サーバーを用意する必要がある。

例えば、以下のような内容が自動的に設定される。
Gemfile内(Pumaの定義)

gem 'puma', '~> 5.0'

config/puma.rb(Pumaの設定)
こないだデプロイ後うまくいかず、この辺りを修正してしまった。
ここら辺はRailsがデフォルトで設定してくれているので、基本的には修正しない方がいい。

# Pumaの設定ファイル
max_threads_count = ENV.fetch("RAILS_MAX_THREADS") { 5 }
min_threads_count = ENV.fetch("RAILS_MIN_THREADS") { max_threads_count }
threads min_threads_count, max_threads_count

port        ENV.fetch("PORT") { 3000 }
environment ENV.fetch("RAILS_ENV") { "development" }

plugin :tmp_restart
  • port ENV.fetch("PORT") { 3000 } → PORT 環境変数が指定されていない場合、デフォルトで 3000番ポート を使用
  • environment ENV.fetch("RAILS_ENV") { "development" } → デフォルトでは 開発環境(development) で起動

config.ru(Rackアプリの設定)
Pumaなどのアプリケーションサーバーは Rack というミドルウェアを通じてRailsを実行する。
config.ru は rails server の実行時に読み込まれる。

# This file is used by Rack-based servers to start the application.
require_relative 'config/environment'

run Rails.application

補足

2025/02/14に考えたこと

  • Ruby・Railsは、開発スピードが速い。
    ⇒スタートアップ企業や急成長している業界など、作ってすぐユーザに提供できるサービスに向いている。
  • Javaなどは、金融機関など保守的で急に変わるとユーザが困る可能性があるサービスに向いている?

参考文献

https://www.sejuku.net/blog/108992
https://kinsta.com/jp/blog/ruby-vs-ruby-on-rails/
https://zapier.com/blog/dont-repeat-yourself/
https://udemy.benesse.co.jp/development/system/ruby-on-rails.html

Discussion