![]() |
るびくる: |
![]() |
RB(あーるびー): |
![]() |
本日の「るびくる&RBのRubyプログラミング大作戦!」は2012年大みそか大特番スペシャルです! |
![]() |
いきなりハードル上げないでよるびくる! 量も内容もいつも通りだから! |
![]() |
るびくる、先月リリースした家計簿Webアプリ、なかなかいい感じの評判らしいね。 |
![]() |
うん、いい感じだよ! |
![]() |
ただ、さっき僕もひさしぶりに触ってみたんだけど……画面の読み込みが遅くなってきてない? |
![]() |
そうなんだよねー。 |
![]() |
まあ、原始的なファイル保存形式でやってるから、いずれこうなるのは必然だったよね。 |
![]() |
でももう、データの読み書きまわりの処理は、私がプリン片手に必死でチューニングしてるし |
![]() |
ああ、最近プリンの消費率がやたら高いと思ってたら、そういうことだったんだね。 |
![]() |
ムリムリムリ!! データベース化なんて絶対無理!!! |
![]() |
ちょ、どうしたの!? |
![]() |
SQLこわい……SQLこわい……SQLこわい……(ぶつぶつ) |
![]() |
何のトラウマ!? やめてひたすらSQLSQLつぶやくのやめて! |
![]() |
Tran○ac○-SQLこわい……Or○○leこわい……A○○.N○○こわい……○○○○○○こわい…… |
![]() |
具体的なソフトウェア名やライブラリ名はもっとダメーーー!! |
![]() |
落ち着いた? |
![]() |
うん、もう大丈夫だよ! |
![]() |
今のやりとりの後にそんな笑顔で言われても、普通に恐怖しか沸いてこないんだけど……。 |
![]() |
え、その「Sequel」や「ActiveRecord」ってなに? |
![]() |
簡単に言うと、データベースを扱いやすくするためのツールキット(ライブラリ)だよ。 |
![]() |
うーん、ActiveRecordの名前くらいなら聞いたことがあるんだけど…… |
![]() |
そっか。それじゃ、今回はデータベース編ということにして |
![]() |
やだなあRB、わたしはいつも通りだよ! |
![]() |
無闇やたらにいい笑顔を振りまかれても、引くよ。 |
![]() |
でも、そのSequelっていったいどんなものなの? |
![]() |
本当にそこまでの憎しみなら、さすがにちょっと難しいかもしれないけど…… |
![]() |
え!? Sequelってデータベースを使うのに、SQL文を書く必要がないの!? |
![]() |
うん。もちろん書くこともできるんだけど |
![]() |
「テーブルを定義したりすることもできる」……ってことは、CREATE TABLE文を書く必要さえないの? |
![]() |
うん、ないよ。 |
![]() |
うーん……今まで「データベース=SQL」な印象しかなかったから |
![]() |
失礼な! 変な壺もなにも買わせる気はないよ! |
![]() |
もしくは「僕と契約してマスコットになってよ!」とかそんなことを…… |
![]() |
マスコットも魔法少女もならなくていいから。 |
![]() |
まず前提として、Sequelには、大きくわけて次の2つの使い方がある。
|
![]() |
はーい。 |
![]() |
たとえば、Rubyで何かのデータベースにアクセスして、データをとってきたいとするよね。 |
![]() |
うーん、わたしのイメージだとこんな感じかなぁ。 |
# encoding: utf-8 require 'mysql' # 1. サーバー名やDB名を指定して、DBに接続する DB = Mysql.connect('mysqlserver.example.net', 'username', 'password', 'testdb', encoding: 'utf8') # 2. SQL文を実行して、色が「赤」であるデータを名前順に取得する sql = 'SELECT * FROM mascots WHERE color = ? ORDER BY name' rows = DB.query(sql, '赤') # 3. 取得したデータの内容(name)を表示する rows.each do |row| p row[:name] # => 'るびくる' end
![]() |
そのコードをSequelを使って書き換えると、こうなる。 |
# encoding: utf-8 require 'sequel' # 1. サーバー名やDB名を指定して、DBに接続する DB = Sequel.connect('mysql://username:password@mysqlserver.example.net/testdb', encoding: 'utf8') # 2. SQL文を実行して、色が「赤」であるデータを名前順に取得する mascot_dataset = DB[:mascots] mascot_dataset = mascot_dataset.where(:color => '赤').order(:name) rows = mascot_dataset.to_a # 3. 取得したデータの内容(name)を表示する rows.each do |row| p row[:name] # => 'るびくる' end
![]() |
あれ? 本当にSQL文を書いてないし、それになんだかデータ取得部分の処理がちょっと違うね。 |
![]() |
OK。2つのスクリプトを、順に比較して解説していこうか。 |
![]() |
それじゃこの続きは年明け公開予定の「パート2:概要編・後半」に、こうご期待! |
![]() |
え、ちょっと待って、ここでパート1終了なの!? すごい中途半端っていうかキリ悪くない!? |
![]() |
それではみなさん、よいお年を! |
![]() |
2012年の大みそかをこんなもどかしい気持ちで迎えるのはいやだーー!! |
パート2:概要編・後半に続きます。