当ブログではPRや広告を掲載しています

【Rails初心者】CREATE TABLE テーブル作成の仕組み解説

プログラミング
この記事はこんな人向け
  • rails 初心者
  • データベースとrailsの動きをイマイチ理解していない
  • モデル(model)とDBのテーブルの違いがわかってない
スポンサーリンク

便利コマンドがいい感じにやってくれてるのを知るべし!

プログラミング初心者のうちに Ruby on Rails に取り組むと、比較的やさしめにプログラミングを習得できます

しかしその一方で、rails の便利なコマンドがあなたのプログラミング能力の大部分を助けていることに注意が必要です。

rails が裏で何をやっているのか理解していないままだと、残念ながらロクなエンジニアになりません

でも安心してください、記事をしっかり読んで理解していけばレベルも上がるので、地道にいきましょう。

DBにテーブルを作る

テーブルとモデルは別物

初心者でたまに勘違いしているのが、「テーブル=モデル」と捉えていることです。

テーブルは、DBに作られたDB専用の箱のようなものです。
モデルは rails で扱う定義体、つまりソースコードなので全くの別物ということになります。

確かに、モデルとテーブルには関係性があって、モデルを利用してテーブルのデータを取得するといったことはあります。
この場合でも、モデルはあくまでデータ取得のための「ツール」であって、テーブルはデータを入れている「ただの箱」という感じのイメージです。

テーブル作成手順

次に rails でテーブルを作成する手順を解説していきます。

今回作成するテーブルは次のようなものとします。

テーブル名:phones
カラム:name(string), os_type(integer)

① rails コマンドでファイルを生成

まずは以下のコマンドで、テーブル作成に必要なファイルを自動生成します。

rails g model phone name:string os_type:integer

コマンドを実行すると、以下の画像のような結果となり、いくつかのファイルが生成されます。

“create” となっているファイルのうち、”test/” のフォルダに生成されたファイルは、今回テストは関係ないため無視します。

テスト以外ではマイグレーションと、モデルの2つのファイルが生成されています。
このマイグレーションファイルというのが、テーブル作成に使われるファイルで、以下の形でファイルが生成されています。

db/migrate/YYYYMMDDHHMMSS_create_phones.rb
class CreatePhones < ActiveRecord::Migration[5.2]
  def change
    create_table :phones do |t|
      t.string :name
      t.integer :os_type

      t.timestamps
    end
  end
end

もう1つのモデルファイルは、以下の形で、特に中身は何も無いファイルとなっています。

app/models/phone.rb
class Phone < ApplicationRecord
end

② rails コマンドでマイグレーション実行

次に以下のコマンドで、実際にDBへテーブルを作成します。

rails db:migrate

コマンドを実行すると、マイグレーションが実行され、DBにテーブルが作成されます。
同時に、schema(スキーマ)ファイルが上書きされます。

スキーマファイルの更新された内容が、以下の部分です。

db/schema.rb
...

create_table "phones", force: :cascade do |t|
  t.string "name"
  t.integer "os_type"
  t.datetime "created_at", null: false
  t.datetime "updated_at", null: false
end

...

“created_at” や “updated_at” のカラムは特にこちらで意図して定義したものではありませんが、rails が自動的に追加してくれています

マイグレーションの裏でやっていること

マイグレーションではDBにテーブルを作る命令を出しています。
これは rails 経由で実行されるため、裏の処理はつぎのような図のイメージです。

処理の流れは、マイグレーションファイル(create_table.rb)スキーマファイル(schema.rb)DBのテーブル作成です。
これが rails db:migrate の1コマンドで実行されている内容です。

そしてスキーマファイルを元にしてDBにテーブルを作成する際に、実際にはプログラム側で「SQL」という言語で命令文が自動生成され、実行されています

裏で実行されているSQL

DBの種類によって細かい内容が異なりますが、おおかた以下のようなコードが自動で実行されています。
(以下の例は MySQL です)

mysql> create table phones(
    -> id INT(11) auto_increment not null,
    -> name VARCHAR(30),
    -> os_type int(11),
    -> created_at datetime not null,
    -> updated_at datetime not null, 
    -> PRIMARY KEY (id));

rails のマイグレーションではデフォルトで “id”カラムを付与してくれるので、今まで特に意識することはありませんでしたが、SQLで実行される際には “id”カラムも定義が必要なんです。

SQLの知識も、プログラミング初心者のうちに付けておくといいスキルなので、もしよければ以下の記事で基礎を抑えてください。

まとめ

最近のプログラミングは、ライブラリやフレームワークが充実していて、初心者も取っ掛り易い環境になってきています。

しかし、ブラックボックス化(仕組みを理解しなくとも使えること)されることのデメリットもしっかり抑えつつ、知識を付けた方がより良いエンジニアになれるでしょう。

特に「中身の動きを理解しておく」というのは、のちのち応用に効いてくるので、是非とも理解しておけるといいかなと思います!

このブログでは、他にもエンジニアになろうとしている人向けの記事を書いているので、よければ他の記事も読んでみてください。

コメント