「プログラム初心者、椛島千愛のRuby on Rails4奮闘記」第4回:「マイグレーションについて学ぼう!」

03.29


フロイデ株式会社の椛島千愛です。段々暖かくなってきましたが、いかがお過ごしですか?
私の近況ですが、合格祈願に太宰府天満宮に参拝をしてきました。そして、北九州で先日開催されたRails Girls in Kitakyushuに参加してきました!女性のプログラマーやプログラマー志望の方がとても多くてイベント自体も盛り上がりました。業界でみると女性のプログラマーの人数は少ないので、同じ女性プログラマーにお会いできて、とても嬉しかったです。今回の写真は、Rails Girlsに参加した時に弊社社長の吉谷愛と撮ったものです。とてもエネルギッシュな社長です♪
さて、Ruby on Railsの勉強は順調でしょうか?私もブロンズ試験に向けて、みなさんと同様コツコツ理解を深めています。前回は、ルーティングについて学習しました。今回は、マイグレーションの基礎について一緒に学習していきたいと思います。(認定教材第6章の内容)

本日のコンテンツ:
1.そもそもマイグレーションとは?
2.テーブルの作成と削除
3.カラムの追加と削除

1.そもそもマイグレーションとは?
マイグレーションとは、簡単に言うと、Railsのデータベースを扱いやすく処理できる機能です。データベースを扱うためには、普通、SQL文を書かなければいけませんが、そのやや面倒くさいSQL文を書かなくてもデータベースにテーブルを作成でき、データベースの中身を変更や削除を行うことができます。
この機能を知った時、Railsって、本当に初心者に使いやすく出来てるなぁと、とても感動しました。ただ、後々のことを考えると、マイグレーションのコマンドを入力しながら、SQL文だとどう書けばいいのか・・・と、いうことを考えながら学んでいくと、普通のデータベースも扱えるようになると思います。そのため、同時並行の学習をお勧め致します。また、今回も先日私が作成した「なんでも単語帳」を題材にしていきます。

2.テーブルの作成と削除
データベースのテーブルに関してですが、scaffoldを使って作成する方法とModelコマンドで作成する方法があります。
まずscaffoldで作成した場合、自動でテーブルが作成されます。以下は、scaffoldのコマンド例です。


rails g scaffold モデル名 カラム名:型名・・・

例. rails g scaffold word name:string reading:string meaning:string category:integer


例の部分だと、モデル名の「word」が複数形の「words」になり、テーブル名になります。また、「name:string reading:string meaning:string category:integer」の部分がそれぞれカラム(列)になり、「name:string」の「string」は「words」というカラムの中にどんなデータが入るかを指しています。今回の場合は、String型(文字列型)になります。イメージしやすいように、エクセルの表でまとめてみました。

普通のデータベースでは、様々な型が入りますが、Railsで指定できるデータ型が決まっています。対応するMySQLもまとめてみたので、参考にしてください。

次に、Modelを使って、テーブルを作成する場合は、下記のコマンドを入力します。


rails g model モデル名 ・・・

例. rails g model user


あらかじめ、カラム名やデータ型を決定していた場合は、


rails g model モデル名 カラム名:データ型・・・


と、入力するとデータ型を指定したカラム名が一気に作成できます。

「user」というモデルが作成され、「users」というテーブルが作成されます。


rake db:migrate


のコマンドを入力することで、未実行のマイグレーションを実行し、実際にテーブルが作成されているか確認することができます。ファイルの方では、下記のようなマイグレーションファイルが作成されます。

余談ですが、MySQLのコマンドで同じことをしようとすると・・・


create table{
フィールド名 データ型,
・・・
}


さらに、Model側は自分で別で作成しなければならないので、DBとModelを一気に作成してくれるRailsは本当に便利だなぁと、思います。ますます使いこなせるようになりたい!!

最後に、テーブルの削除方法についてです。テーブルを削除する場合には、一緒にModelを削除する必要があります。Modelの削除コマンドは、


rails destroy model モデル名

例. rails destroy model user


と入力します。次にusersテーブルを削除するために、削除用のマイグレーションファイルを作成します。名前は任意ですが、わかりやすくここでは、drop_usersとしておきます。


rails g migration クラス名

例.  rails g migration drop_users


上記のコマンドは、カラム(列)の追加にも使えるコマンドになります。詳しくは、後ほど紹介していきます。

今までmigrationのところにあった「20170309005954_create_users.rb」のファイルの代わりに、「20170309015056_drop_users.rb」というファイルが作成されました。このファイルの中に、


drop_table :テーブル名

例. drop_table :users


と記載し、保存します。


rake db:migrate


コマンドを実行すると、テーブルが削除されます。

本当に削除できたかどうか、確認する場合は、


rake db:migrate:status


のコマンドを入力します。これを実行し、下記のように表示されれば、削除されています。

3.カラムの追加と削除
Railsのデータベースにカラムを追加してみましょう。例として、単語の投稿者の名前を登録できるようにします。


rails g migration Addカラム名Toテーブル名 カラム名:データ型・・・

例. rails g migration AddPost_nameToWord post_name:string


rake db:migrate


を実行し、カラムが作成できたことを確認します。

最後にカラムの削除方法です。先程、作成したカラムをpost_nameのカラムを削除してみます。削除する時は、


rails g migration remove_カラム名_to_テーブル名 カラム名・・・

例.  rails g migration remove_post_name_to_word post_name


rake db:migrate


を実行し、カラムの削除を確認します。

他にもカラム名を変更するコマンドなどマイグレーションは、様々なコマンドが存在するので、より知識を深めるために調べてみてください。

 

〜まとめ〜
今回の内容はマイグレーション基礎のテーブルに関して、一緒に勉強していきました。マイグレーションは、コマンドが多いのでどういう動きをするコマンドなのかを意識して勉強することをお勧めします。
短い間ですが、このコラムにお付き合いいただきありがとうございました。書きたいことがいっぱいあったのですが、まとまっていなくて時折読みづらい部分もあったかもしれません。このコラムが終わっても、Railsブロンズ試験に向けての勉強は続きます!模擬問題をみたところ、基礎的な部分の出題が多いように見受けられたので、基礎を重点的に勉強していく予定です。また、このコラムが終わっても個人的に何かしらの形で執筆活動を続けていきたいなと、考えております。
最後に、私と同様、勉強するみなさんのRails4ブロンズ試験合格をお祈りしております。合格に向けて引き続き勉強を続けていきましょう!!

関連記事

ページ上部へ戻る