rails console 使ってますか?

存在は知っていても Rails 触りはじめの段階では、あまり使ってない人がいるかもしれません。

しかし rails console は開発効率を格段に上げてくれる機能なので、Rails を使いはじめたばっかりの初期段階でも積極的に使っていきましょう。

rails console は何ができるのか

いろいろありますが、一番使うものはモデル操作です。

データの取得、登録、更新、削除は全て rails console 上でできます。

使い方

rails c もしくは rails console とコマンドを打ちます。

$ rails c
Running via Spring preloader in process 138
Loading development environment (Rails 6.0.3.1)
irb(main):001:0>
irb(main):002:0>

するとこんな感じで irb が立ち上がります。

Ruby がインストールされている状態で、ターミナル上で irb と打つと irb が立ち上がりますが、それと同じものです。

$ irb                                                                                                                                   13:42:32
irb(main):001:0>

ただし、rails c を実行した場合は Rails のソースコードが読み込まれるため Rails の機能が使える状態で irb が立ち上がるわけです。

ここでいう Rails 機能のうち1つが先ほども上げた「モデル操作」になります。

モデル操作

Task モデルを作成した状態で各種操作をしてみます。

まずはデータが登録されているか確認します。

irb(main):002:0> Task.all
   (3.4ms)  SELECT sqlite_version(*)
  Task Load (2.9ms)  SELECT "tasks".* FROM "tasks" LIMIT ?  [["LIMIT", 11]]
=> #<ActiveRecord::Relation []>

<ActiveRecord::Relation []> と空の配列が返ってきているので、データはまだ登録されていない状態です。

Task.create でデータを 1 件登録してみます。

irb(main):008:0> Task.create(name: 'サンプルタスク1', description: 'サンプルタスク1の説明')
   (0.1ms)  begin transaction
  Task Create (8.4ms)  INSERT INTO "tasks" ("name", "description", "created_at", "updated_at") VALUES (?, ?, ?, ?)  [["name", "サンプルタスク1"], ["description", "サンプルタスク1の説明"], ["created_at", "2020-08-02 04:49:49.796825"], ["updated_at", "2020-08-02 04:49:49.796825"]]
   (5.3ms)  commit transaction
=> #<Task id: 1, name: "サンプルタスク1", description: "サンプルタスク1の説明", created_at: "2020-08-02 04:49:49", updated_at: "2020-08-02 04:49:49">

irb の最後の 以降には実行したコマンドの戻り値が表示されています。

先ほどは Task.all の戻り値である、取得結果が表示されていたのですが、今回は Task.create の戻り値である、作成された Task オブジェクトが表示されています。

ここで再度 Task.all を実行すると、1件 データが入っていることを確認できます。

irb(main):010:0> Task.all
  Task Load (2.2ms)  SELECT "tasks".* FROM "tasks" LIMIT ?  [["LIMIT", 11]]
=> #<ActiveRecord::Relation [#<Task id: 1, name: "サンプルタスク1", description: "サンプルタスク1の説明", created_at: "2020-08-02 04:49:49", updated_at: "2020-08-02 04:49:49">]>

と、こんな感じでいろんな操作ができます。

メリット

  • コマンドベースのため動作確認が簡単
  • 動作の理解

コマンドベースのため動作確認が簡単

コマンドベースで動かすことができるため、ソースコードを書いてブラウザをリロードして確認するという手間が省けます。

例えば新規登録がうまくいかなかったのを修正して動作確認しようとすると、

  • ソースコードの修正
  • ブラウザリロード
  • フォームに値を入力
  • ボタンクリック

とかなり手順が多いです。

特にフォームに入力するのが手間になります。

rails console であれば

<モデル>.create を実行することで、すぐに実行できますし rails consle 内で ↑ を押すことでコマンドの履歴を遡ることができます。つまり再入力の手間がありません。

動作の理解

rails console からデータ操作を自由に行なえるようになると、Rails が実際やっていることが結構見えてくるのかなと思います。

単純な Rails アプリケーションであれば、Controller は結局 Model を呼び出しているだけなので、Model の動きを理解できればデータの動きがだいぶイメージできるのではないでしょうか

終わりに

いきなり Controller や View のソースコードを書く前に、rails console を使ってどうやってデータを登録 / 取得するのかを確認したり、データが登録されないなどのエラーの場合の動作確認時に使ってみたりして、rails console に慣れてみてください。