私たちはちょうど今までデータベース(DB)を図書館、記憶、司書、ネットワークなどの比喩で説明してきた。今度はそれを実際に目の前で動かしてみよう。
ウェブサービスが
情報を保存し、
どのように記憶し、
どのように再び取り出して表示するか、
どのように相互に接続するか、
Railsで直接やってみながら
身体で感じる時間が来た。
Part 1. “ウェブサービスの記憶”を作る
投稿(Post)モデルを作ってみよう
ウェブの記憶は記録から始まる。
私たちは記録を “글(Post)” と呼ぼう。
ターミナルで:
rails generate model Post title:string body:text
rails db:migrate
この2行が言っていることは非常に単純だ。
“titleとbodyという記憶スペースを持つPostという構造を作ります。”
“そしてその構造を実際のDBという記憶倉庫に反映します。”
これでRailsは図書館の “本棚(Postテーブル)” を作り、
その本棚に “title, body” 2つのスペースの本を差し込むことができるようになった。
Part 2. Rails consoleでDBと直接対話する
図書館の本棚に本を差し込んでみよう
ターミナル:
rails console
そして本を1冊入れてみよう。
Post.create(title: "私の最初の投稿", body: "Rails DBに保存されました!")
Enterを押すと、
あなたはウェブサービスの “記憶”に
最初のデータを記録した。
これまで作ったどんなコードよりも
この1行がはるかに強力だ。
なぜならこれは
消えない記憶を作ったからだ。
Part 3. DBは “決して忘れない空間” だ
Rails consoleで再度尋ねてみよう。
Post.all
するとRailsはDBにこう言う。
“Post本棚に差し込まれたすべての本を持ってきて!”
そしてDBは一点の誤りもなく
さっき保存したデータを持ってくる。
これがまさに
ウェブサービスの記憶であり、決して忘れない空間なのだ。
サーバーを切っても、
コンピュータを再起動しても、
1週間後に入っても
その記憶はそのまま残っている。
Part 4. “精巧に整理された図書館” を体験する
ID, created_at, updated_atは図書館の分類システムだ
さっき作ったPostを再度確認してみよう。
post = Post.first
post.id
post.created_at
post.updated_at
あなたは今、知る。
id = 本の番号
created_at = 本が作られた日付
updated_at = 最後に修正した日付
DBはあなたがしなくても
すべての記録を丹念に整理しておく。
これらの記録は
多くのデータを構造化して保存する基盤となる。
DBは単なる空間ではなく
精巧に整理された図書館なのだ。
Part 5. “数百万個も素早く見つける司書” を体験する
条件で本を探してみよう
Post.where(title: "私の最初の投稿")
RailsはDBにこう言う。
“タイトルが ‘私の最初の投稿’ である本だけ見つけてくれ。”
DBは瞬時に見つけて表示する。
データが10個でも、1,000個でも、
100万個でも、
正確に見つける。
なぜならDBは
膨大な規模の図書館でも即座に見つけてくれる超人的な司書を持っているからだ。
あなたは今
その能力を直接使ったのだ。
Part 6. “相互に接続された知的ネットワーク” を直接作る
コメント(Comment)を作ってPostと関連づけよう
ウェブサービスが本当に強力になる瞬間は
データが相互に接続され始めるときだ。
例えば
ブログの投稿(Post)にコメント(Comment)をつけられるようにしてみよう。
rails generate model Comment body:text post:references
rails db:migrate
このモデルはこう言う。
“コメントは内容(body)があり”
“どの投稿(post_id)に属しているデータを保存する”
Railsに関係を教えよう
app/models/post.rb
class Post < ApplicationRecord
has_many :comments
end
app/models/comment.rb
class Comment < ApplicationRecord
belongs_to :post
end
これでPostとCommentは
完璧に関連付けられた知的ネットワークになる。
Part 7. 実際に関連付けられたデータを作ってみよう
consoleで:
post = Post.first
post.comments.create(body: "最初のコメントです!")
post.comments.create(body: "2番目のコメント!")
これでコメントを読んでみよう。
post.comments
DBは正確に知っている。
どのコメントがどのPostに属しているか
どの投稿にいくつのコメントがついているか
そのコメントたちがいつ保存されたか
データが相互に接続される瞬間
ウェブサービスはついに“有機的なシステム”になる。
Part 8. これであなたはDBがなぜウェブサービスの “心臓” なのか理解した
これまで辿ってきた短い実習で
あなたは次のことを体験した。
ウェブサービスの記憶
→ データを保存し、取り出す過程
決して忘れない空間
→ Post.createで作ったデータが永続的に保持される
精巧な図書館
→ id、timestampsなど自動整理機能
数百万件も素早く見つける司書
→ Post.whereで欲しいデータを検索可能
知的ネットワーク
→ Post ↔ Commentの関係を設定してデータ間の接続を作成
ウェブサービスの心臓
→ 記憶 + 関係 + 検索がすべてDBで行われる
あなたは今、
ウェブサービスがなぜデータベースなしでは存在できないか、
そしてDBを扱うことがすなわちウェブサービスを扱うことで
理解した。
今、読者の心に芽生える考え
ここまで辿ってきた読者は必ずこう感じる。
“ちょっと…私もこれくらいなら
自分のブログひとつくらい作れるんじゃないか?”“友達と一緒に使うTODOアプリも作れるかも?”
“ウェブサービス…思ったよりやれそうだな?”
これが私たちが目指していた覚醒の瞬間なのだ。
データが手に触れる瞬間、
ウェブサービスはもはや遠い未来の技術ではなく
今、自分の手で作られる現実となる。
そしてRailsはあなたにこう囁く。
“さあ、どんなサービスを作るか決めてみな。
その次は私が手伝ってあげるよ。”