SQLとは何ですか?

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

• bamchi • 5,535
目次

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生産性の核心エンジンである。

コメント

コメントする

メールアドレスは公開されず、返信通知にのみ使用されます。

続けて読む

新しい記事の通知を受け取る

Bamchi Blogに新しい記事が公開されたらメールでお知らせします。

メールアドレスは新着記事のお知らせにのみ使用します。