PR

Railsのconsoleの書き方と使い方のまとめ

Ruby・Rails

ConsoleはWebアプリを開発するのなら学んでおかなければいけません。しかしまだ良く分からなくて中々勉強が手付かずな方も多いのではないでしょうか。この記事では、実際にコマンドを打ち込んでConsoleについて学んで行きます。ぜひ読んでみてください。

RailsConsoleとは

consoleとは、システムと情報の操作や情報の把握するためのツールです。RailsConsoleでは、モデルクラスの挙動やメソッドを実行することができます。

RailsConsoleを利用するメリットとしては、試してみたい処理をRailsConsoleを使えばすぐに書いて実行することができるのでとても便利です。加えて、RailsConsoleではデバッグの際にも活躍しますのでRailsConsoleを勉強することはとても大事です。

この記事を見て、実際にターミナルまたはコマンドプロンプトで試してみましょう。

consoleの書き方と使い方のまとめ

consoleの起動の仕方

consoleの起動の仕方は、ターミナルまたはコマンドプロンプトにて$ rails consoleと打ちます。
コンソールを終了したい時はquitを打つと終了します。

一番下の文が以下のようになっていればconsoleが無事起動されています。
irb(main):001:0>

consoleコマンドを実行する環境を指定する書き方

consoleでは、デフォルトでは開発環境(development)になっています。consoleでは実行環境を指定することができ、本番環境とテスト環境が存在します。

テスト環境で起動したい場合、以下のコードのように環境名を最後に指定します。
$ rails console test
上のコードではテスト環境を指定してconsoleを開いています。

データを変更することなくコードをテストしたいとき

データを変更することなくコードをテストしたいときは、sandboxを使用するとデータを変更することが無くconsoleを使用することができます。

以下のコードをターミナルまたはコマンドプロンプトで打ちます。

$ rails console --sandbox

ここで何かテストしたいコードを書いて、quitを打ってコンソールを閉じると、
rollback transactionとログが出ます。

これは、コンソール終了時にデータベースに対する全ての変更をロールバックしたことを表しています。

createコマンドを使ってレコード追加する方法

以下のようなモデルが存在することを想定してレコードを追加していきます。

カラム名データ型
namestring
descriptiontext
ageinteger

※このモデルを作成する時のコマンドは$ rails g model Item name:string description:text age:integerです。
モデルを作成した際には$ rails db:migrateを忘れずに打ちましょう。

次にconsoleを立ち上げます。

$ rails console

ここで先ほど作成したテーブルにcreateコマンドを使ってレコードを追加します。(内容は各自自由で大丈夫です。)
Item.create(name:"taro",description:"taroudesu",age:20)

ここでItem.allのコマンドを打つとItemテーブルにあるデータを参照する事ができます。実際にこのコマンドを打ってcreateコマンドでレコードが追加されたか確認してみましょう。

先ほどの追加した情報があれば無事にレコードが追加されたことを意味しています。

レコードを削除する方法

レコードを削除する方法としてdestroyとdeleteがあります。
どちらも構文は同じです。
モデル名.delete(主キー値) , モデル名.destroy(主キー値)
どちらも主キー値を指定して、指定された主キー値のレコードは削除されます。

destroyのコマンドを使用して先ほどの追加したレコードを削除してみましょう。consoleを開いて、createコマンドで先ほどと同じテーブルを3つほど追加します。

そしてItem.find(2).destroyとconsoleで打つと追加したレコードの2番目のレコードが削除されます。この主キー値と呼ばれる番号は、レコードを追加した際に追加したレコードの情報の所にidとして記載されています。この数字がそれぞれのレコードの主キー値となります。

間違って追加してしまった時や消したいレコードがある場合、そのレコードの主キー値を指定して消すと良いでしょう。

複数のレコードをまとめて削除する方法

次は、作成したレコードをまとめて削除する方法を説明します。複数のレコードをまとめて削除するコマンドは、モデル名.destroy_allです。

これを先ほど作成したモデルに適用してみます。

Item.destroy_all

とconsole上で打ちます。そうするとItemモデルにある、全てのレコードが削除されます。

実際にItem.allを打って、レコードを確認してみましょう。

findやwhereメソッドを使ってテーブルの内容を確認する

findメソッドを使ってみよう

findメソッドとは、Active Recordによるもっとも基本的な検索の手段です。主キーによる検索を行います。
構文は以下のとおりです。

find(主キー値)

これを先ほど作成したモデルで使ってみましょう。

Item.find(主キー値)

findメソッドに似たようなメソッドでfind_byメソッドがあります。
find_byメソッドは任意のキー列の検索をすることができます。
構成は以下のとおりです。
モデル名.find_by(カラム名:" ")

これを先ほど作成したモデルを使用して使ってみましょう。

Item.find_by(name:"taro")

しかしこのfind_byメソッドは該当する最初の一件しかデータを取得することができないので
該当するデータを全部欲しいという方は他の方法で試しましょう。

whereメソッドを使ってみよう

whereメソッドとは、条件を設定して該当するレコードを取得するメソッドです。
構文は、モデル名.where(条件)です。

実際に先ほど作成したモデルを使用してconsole上で使ってみましょう。

Item.where(id:1)

このコマンドは、idが1のレコードを探して取得するように条件として指定しています。

Item.where('id<?', 3 )

このコマンドは、idが1~3のレコードを探して取得するように条件として指定しています。
idが1~3のレコードが存在していれば3つのレコードを取得します。

このようにwhereメソッドは探したい情報を条件にしてレコードを抽出してくれます。

例えば、taroさんのレコードを知りたいとなれば、Item.where(name:"taro")と打てば該当するレコードが出てきます。作成したカラム名と探す名前を設定すれば該当するレコードを取得できます。

様々なメソッドを使ってみよう

orderメソッド

orderメソッドとは、データを並び替えるメソッドです。
構文は以下のとおりです。
モデル名.order("カラム名")
指定したカラムがアルファベット順・あいうえお順に並び替えられます。

モデル名.order("カラム名 DESC")
DESCをつけることによって逆順に並び替えられます。idなどの順番を変えたい時などに
使用すると良いでしょう。

モデル名.order('name DESC, age')
このコマンドで2つのカラムを指定して並び替えることができます。

selectメソッド

selectメソッドとは、取得列を明示的に指定するメソッドです。
構文は以下のとおりです。
モデル名.select(:カラム名)

取得したいカラム名をselectメソッドを使用することで取得するとそのカラム名だけのデータのレコード情報が取得できます。

作成したモデルで使用してみます。

Item.select(:name)

whereメソッドと組み合わせることもできます。

item.where('age >= 20').select(:name)

このコマンドは、ageが20以上の名前だけのレコード情報を取得するコマンドです。

巨大なテーブルにおいて条件を指定せずにレコードを取得するのはメモリリソースの無駄遣いです。よってselectメソッドのようなメソッドを活用して条件を指定して取得したい列を取得するのがメモリリソース的にも効率が良いでしょう。

distinctメソッド

distinctメソッドとは、重複のないメソッドを取得するメソッドです。
構文は以下のとおりです。

distinct([重複を除去するか(true,false)])

先ほど作成したモデルで使用してみます。

Item.select(:name).distinct.order(:name)

このコマンドは、同じ名前のカラムを重複のないレコードにしています。

よってdistinctメソッドは、重複レコードを1つにまとめるメソッドと言えるでしょう。

limit/offsetメソッド

limit/offsetメソッドとは、特定範囲のレコードだけを取得するメソッドです。
構文は以下のとおりです。
モデル名.limit(最大取得行数).offset(取得開始位置)

先ほど作成したモデルで使用してみます。

Item.limit(2).offset(3)

このコマンドは、3件目から2件のレコードの情報を取得するといったコードです。

ただ単に範囲を決めてデータを取得するだけのメソッドでなくページング処理も実装できるので勉強していて損はないです。

pluckメソッド

pluckメソッドとは、指定列の配列を取得します。
構文は以下のとおりです。
モデル名.pluck(カラム名)

先ほど作成したモデルで使用してみます。

Item.pluck("id,name")

このコードはItemモデルのidとnameのデータを2重配列としてデータ取得しています。

Item.pluck("id")

このコードのようにカラムを1つだけ指定している場合は、普通の配列として抽出されます。

pluckメソッドはとても描きやすいので色々なところで使用できます。そして抽出されたデータも配列として抽出されるのでとても扱いやすいのではないのでしょうか。

RailsConsoleの勉強の仕方

この記事では、Railsconsoleについて説明しました。たくさんのメソッドがあってRailsを勉強中の方は驚いたのではないでしょうか。このようなメソッドは使いながら覚えるのが一番です。ですので何かRailsを利用して機能を実装する際に必要になったら自分の手を動かしながら書いてみてください。

consoleはデバッグの際にもとても役にたちます。そういった意味では、consoleはとても大事です。今回のこの記事で行ったことは実際にパソコンで打ち込みながら行うとより知識が深まるのでぜひ、Railsで開発を行いながら勉強して見てください。

この記事を見て下さってありがとうございました。

タイトルとURLをコピーしました