Ruby
 Computer >> コンピューター >  >> プログラミング >> Ruby

【初心者向け】RubyのSequel Gemの使い方を実例付きで解説

Rubyでデータベースを扱いたいとき、「Railsなしで手軽に使えるORMはないか」と考えたことはありませんか?そんな方におすすめなのが、今回紹介するSequelというGemです。

Sequelとは?

Sequelは、Railsに依存せずにデータベースへアクセスできるRubyのGemです。

データベースへの接続方法にはいくつかのアプローチがありますが、代表的なのは以下の2つです。

  • 生のSQL文を直接実行する
  • ORM(オブジェクト関係マッピング)を利用する

まずは、MySQLデータベースに対して生のSQLを使う例を見てみましょう。

require 'mysql2'

client  = Mysql2::Client.new(host: "localhost")

results = client.query("SELECT * FROM users WHERE age > 21")

結果はどうなるのか?

データはハッシュの配列として返されます。

ここで問題になるのが:

このデータをオブジェクト指向的に扱いたい場合、結果をオブジェクトに変換する必要があるということです。それこそが、ORMの大きな役割の一つなのです。

ORMとは何か?

ORMは「Object-Relational-Mapping(オブジェクト関係マッピング)」の略称です。

Sequelは、SQL(データベース用クエリ言語)の発音にちなんだ名前を持つORMです。

それでは、実際の使い方を見ていきましょう!

Sequelの基本:データベースへの接続

Sequelを使い始める最初のステップは、データベースへの接続です。

以下がその例です:

require 'sequel'

DB = Sequel.sqlite('/tmp/testing.db')

これによりSequel::Databaseオブジェクトが生成され、定数DBに代入されます。

ここではSQLite3データベースを使用していますが、他のデータベースも利用できます。

  • Sequel.postgres(PostgreSQL)
  • Sequel.mysql2(MySQL)
  • Sequel.oracle(Oracle)

次は何をすればいいのか?

データを保存するためのテーブルを作成する必要があります。

unless DB.table_exists?(:fruits)
  DB.create_table :fruits do
    primary_key :id

    column :name, String
    column :amount, Integer
  end
end

Sequelにはマイグレーション機能もありますが、これは任意です。

これでデータの追加とクエリの実行準備が整いました!

SequelのDatasetの使い方

データベース上の特定のテーブルとやり取りするには、Datasetオブジェクトが必要です。

取得方法はこちら:

table = DB[:fruits]
# => Sequel::SQLite::Dataset

これで、insertメソッドを使ってレコードを追加できます。

以下のように記述します:

table.insert(name: "Orange", amount: 10)
table.insert(name: "Apple", amount: 2)
table.insert(name: "Banana", amount: 7)

件数を取得してみましょう:

table.count
# => 3

Dataset内のすべてのエントリを取得します:

table.all
# [
#   { id: 1, name: "Orange", amount: 10 },
#   { id: 2, name: "Apple", amount: 2 },
#   { id: 3, name: "Banana", amount: 7 }
# ]

お気づきでしょうか?これはまるでハッシュの配列のように見えますよね。
その通り、まさにその通りの構造です。

Sequelではモデルを介さずにデータベースへクエリを実行できますが、モデルを使うことも可能です。その方法を見ていきましょう。

Sequelでのモデルの使い方

Sequelのモデルは、ActiveRecordのモデルと非常によく似ています。

以下がその例です:

class Fruit < Sequel::Model
end

モデルはDatasetとまったく同じように動作しますが、異なる点は、取得した結果をモデルクラスのインスタンスとしてラップして返すことです。

確認してみましょう:

Fruit.first
# => Fruit @values={:id=>1, :name=>"Orange", :amount=>10}

Sequel::Datasetのメソッドをそのまま利用できるため、特別な「魔法」は一切ありません。

さらにいくつか例を挙げます:

Fruit.map(:name)
# => ["Orange", "Apple", "Banana"]

Fruit.where(name: "Apple").or(amount: 10).map(:name)
# => ["Orange", "Apple"]

Fruit.first[:amount]
# => 10

SequelとActiveRecordの比較

Sequelの魅力がわかったところで、ActiveRecordとの比較が気になるかもしれません。

ActiveRecordはRailsのデフォルトORMであり、Railsは規約を重視するフレームワークです。そのため、Railsアプリの中でActiveRecordSequelに置き換えるのは得策ではないと言えるでしょう。

しかし、Sinatraのような別のフレームワークを使用している場合なら、Sequelは非常に優れた選択肢になります!

まとめ

今回は、RubyでORMを使ってデータベースを操作する方法について学びました。使用したのは、SequelというRubyのGemです。

ぜひ実際に試してみて、楽しんでください!最後までお読みいただきありがとうございました。

  1. Rubyでファイルを読み書きする方法を実例つきで徹底解説

    Rubyでファイルの読み書きができるようになると、ファイルからデータを抽出したり、新しいファイルを作成したり、必要な情報を素早く見つけたりできるようになります。この記事では、Rubyにおけるファイル操作の基本を、実際のコード例とともにわかりやすく解説します。 この記事で学べること Rubyでファイルを読み込む方法 Rubyでファイルに書き込む方法 覚えておきたいFileクラスのメソッド ディレクトリ操作の基礎 FileUtilsモジュールの使い方 まとめ それでは始めましょう! Rubyでファイルを読み込む方法 Rubyでファイルを読み込む基本的な流れは、次の3ステップです。 op

  2. Linuxのwatchコマンドの使い方と実用例をわかりやすく解説

    Linuxのwatchコマンドは、指定したコマンドを一定間隔で繰り返し実行し、その結果を画面に表示し続けるためのツールです。コマンドの出力が時間とともにどう変化するかをリアルタイムで監視したい場合に非常に便利です。この記事では、watchコマンドの基本的な使い方と、覚えておくと役立つ実用的な例を紹介します。 watchコマンドの基本構文 watchコマンドの構文は以下のとおりです。 watch オプション コマンド 各要素の意味は次のとおりです。 オプション: 後述の表から選択したオプションを指定します。watchコマンドのデフォルト動作を変更できます。 コマンド: watchが繰り返し実行