SQLとは何ですか?

SQLは何ですか?RailsではSQLをほとんど使わない理由とActiveRecordの役割について説明します。初心者開発者の混乱解消

bamchi 498

SQL이란 무엇인가? そしてRailsでなぜ私たちはSQLをほとんど使わないのか? — ActiveRecordの存在理由

多くの初心者開発者たちがこの点で混乱を感じる。

  • データベースを使えばSQLが必要なのでは?

  • しかしRailsではSQLをほとんど使わずにウェブサービスができるのは?

  • ActiveRecordが一体どんな役割をしているから可能なのだろう?

この記事はまさにその核心を明確に説明する。


1⃣ SQL이란 무엇인가? (본질만 요약)

SQL(Structured Query Language)は

データベースと対話する公式言語である。

DBに操作を要求する際にSQLを使用する。

例:

SELECT * FROM users WHERE age > 20;

この文は

“usersテーブルからageが20より大きいレコードを取得せよ”

という意味である。

SQLでできることは厳密に4つにまとめられる。

  1. Create — データを作成し

  2. Read — データを読み取り

  3. Update — データを修正し

  4. Delete — データを削除する

つまり、CRUD

すべてのウェブサービスは最終的に

SQLを通じてDBにCRUDを要求する構造である。


2⃣ しかしRailsではSQLをほとんど使わない。なぜか? ActiveRecordがあるからだ。

Railsの中核構成要素の1つがまさにActiveRecordである。

ActiveRecordはORM(Object Relational Mapping)である。

これはどういう意味か?


3⃣ ORM이란? “객체(오브젝트) ↔ 데이터베이스(테이블)”를 자동으로 연결해주는 시스템

プログラミング言語はオブジェクトを使用する。

user = User.new(name: "bamcoding")

DBはレコードを使用する。

usersテーブルの1番row

ORMの役割はただ1つ:

“Rubyの世界のオブジェクト”を“DBの世界のレコード”と自動的に接続すること。

これにより、

オブジェクトを扱うようにデータベースも扱えるようになる。


4⃣ ActiveRecordでSQLを置き換える方法

例1) データの読み取り(Read)

SQL:

SELECT * FROM users;

Rails:

User.all

例2) 条件検索

SQL:

SELECT * FROM users WHERE age > 20;

Rails:

User.where("age > 20")

またはよりRubyらしく:

User.where(age: 21..)

例3) 作成(Create)

SQL:

INSERT INTO users (name, age) VALUES ('bamcoding', 34);

Rails:

User.create(name: "bamcoding", age: 34)

例4) 更新(Update)

SQL:

UPDATE users SET age = 35 WHERE id = 1;

Rails:

user = User.find(1)
user.update(age: 35)

例5) 削除(Delete)

SQL:

DELETE FROM users WHERE id = 1;

Rails:

user = User.find(1)
user.destroy

5⃣ Rails開発者はSQLではなく“Ruby”でDBを操作する

なぜならActiveRecordが

私が出すRubyの命令を

バックグラウンドでSQLに変換してくれるからだ。

つまり、

開発者がSQLを使わなくてもRailsは内部でSQLを生成し実行する。

そのおかげで開発者は

DBを直接制御する技術的負担なしに

ビジネスロジック設計に集中できる。


6⃣ ActiveRecordが“強力だ”と言う真の理由

ActiveRecordの利点は単に“SQLを使わなくてもよい”だけではない。

それは表面的な利点に過ぎない。

真の核心は以下の4つである。


1) モデル(Model)とDBテーブルが自動的に接続される

Userモデルを作成すると

自動的にusersテーブルと接続される。

  • テーブル名を合わせる必要もなく

  • マッピングを別途指定する必要もない

  • Railsが慣習に従って自動接続

これ自体が開発速度を爆発的に向上させる。


2) 関係設定が圧倒的に直感的である

例:

class Building < ApplicationRecord
  has_many :rooms
end

class Room < ApplicationRecord
  belongs_to :building
end

この2行は

Railsが基本的に次のことを行うようにする:

  • 適切なSQL JOINを作成し

  • building.rooms呼び出しをサポートし

  • 自動外部キーbuilding_idを管理し

  • 関係ベースのクエリを最適化する

これをSQLで直接実装しようとすると

数十行のJOIN、INDEX、条件式を書かなければならない。

ActiveRecordはこれらすべてを

2行で終わらせる。


3) セキュリティ、インジェクション防止、クエリ最適化をRailsが代行する

直接SQLを書くと生じるリスク:

  • SQLインジェクション

  • 誤ったクエリによるパフォーマンス低下

  • SELECT * の乱用

  • 欠落したINDEXによる遅い検索

ActiveRecordは

ほとんどの問題を事前に防止するか

安全なSQLに変換してくれる。

ウェブ開発者のセーフティネットである。


4) Ruby構文と完全に統合された開発体験

クエリをRubyらしく組み立てることができる:

User.where(active: true)
    .where("age > ?", 20)
    .order(created_at: :desc)
    .limit(10)

Rubyコードのように見えるが

内部では最適化されたSQLが生成される。

この“コード組み合わせ”能力が

ActiveRecordを最も強力なORMの1つにしている。


7⃣ 結論 — Rails開発者がSQLをほとんど使わない理由

SQLのすべての複雑さをActiveRecordが抽象化してしまったからだ

開発者はRubyコードだけを書けばよいからだ

モデル-関係-クエリ-保存-削除がすべてRubyオブジェクト操作のように感じられるからだ

生産性、安全性、保守性が圧倒的に向上するからだ

ActiveRecordは単なるORMではなく

Rails生産性の核心エンジンである。

Comments

Add Comment

Your email won't be published and will only be used for reply notifications.

続きを読む

Get notified of new posts

We'll email you when Bamchi Blog publishes new content.

Your email will only be used for new post notifications.