【Rails】変数の中身を確認する方法を実例で解説。View(ビュー)とController(コントローラ)、Model, localファイルのデバッグ方法|pp, puts, logger.debug, @, debug@

rails-prograshi(プロぐらし)-kv Rails
記事内に広告が含まれていることがあります。

Railsでアプリケーションを作成しているときに、ViewファイルやControllerの中にある変数にどのような値が渡されているかを確認したいときがあります。(いわゆるデバッグです)

ここでは、View(ビュー)とController(コントローラ)で変数の中身を確認すると、Modelの中のデータを確認する方法や、ロケールファイル(local)のデータを確認する方法について実例で解説しています。


コントローラ(controller)の中でデバッグする方法

コントローラ(controller)の中でデバッグする主な方法には、以下の3つがあります。

コントローラの中でデバッグする主な方法
  1. ppメソッドを使う。
  2. putsメソッドを使う。
  3. logger.debugを使う

以下でそれぞれの方法について解説しています。

ppメソッドを使う

最もシンプルな方法は「pp」メソッドを使うことです。

pp @変数名

複数の変数を出力したい場合はカンマでつなぎます。

pp @変数名1, @変数名2,,,, 

Pritty Printの略です。Pritty Printとはインデントをつけるなど人間が見やすいように可視化する機能です。

なお、Railsはppで指定した値をコンソールに出力します。


実例

例えば以下のように「@footerTexts」という変数の中身を確認したい場合はpp @footerTextsと記述します。

class TopController < ApplicationController
  def index
    @footerTexts = [ ['kumasanについて', '入れ子'], 'ヘルプセンター', '利用規約', 'プライバシーポリシー']
    pp @footerTexts
  end
end

保存してページをリロードすると、アプリケーションを起動しているコンソールに変数の中身が表示されます。

point

コンソールの表示内容が多い場合に、変数が埋もれてどこにあるのかわかりにくい場合があります。

その場合は、「xxxxxxxxxx」や「————」といった文字列をppの第1引数で渡して、第2引数に表示したい変数などを指定します。

すると、最初の文字列が目印になりどこにppの内容が出力されているのかわかりやすくなります。

str = "text"
pp "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", str

 ↓ 処理結果

"xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
"text"


putsメソッドを使う

putsメソッドを使って変数の中身を表示することも可能です。

puts @変数名
注意点

putsメソッドを使って配列を出力した場合は、各要素毎に改行されます。


実例

例えば以下のように「@footerTexts」という変数の中身を確認したい場合はputs @footerTextsと記述します。

class TopController < ApplicationController
  def index
    @footerTexts = [ ['kumasanについて', '入れ子'], 'ヘルプセンター', '利用規約', 'プライバシーポリシー']
    puts @footerTexts
  end
end

保存してページをリロードすると、アプリケーションを起動しているコンソールに変数の中身が表示されます。

変数の中の構造が見えないので、ppに軍配があがります。


logger.debugを使う

3つ目の方法はlogger.debugを使う方法です。

logger.debug(@変数名)

出力される内容は「pp」と同じくフォーマットされたものが表示されます。


実例

例えば以下のように「@footerTexts」という変数の中身を確認したい場合はlogger.debug(@footerTexts)と記述します。

class TopController < ApplicationController
  def index
    @footerTexts = [ ['kumasanについて', '入れ子'], 'ヘルプセンター', '利用規約', 'プライバシーポリシー']
    logger.debug(@footerTexts)
  end
end

保存してページをリロードすると、アプリケーションを起動しているコンソールに変数の中身が表示されます。

出力内容はppと同じですが、コードの文字数の少なさからppに軍配があがります。


ビュー(View)の中でデバッグする方法

Viewファイルの中でデバッグする方法には主に次の2つがあります。

Viewファイルの中でデバッグする主な方法
  1. <%= @変数名 %>を使う。
  2. <%= debug @変数名 %>を使う。

以下でそれぞれの方法について解説しています。

<%= @変数名 %>を使う

HTMLの中に<%= %>というタグを作成して、その中に表示したい変数名を記述することで、記述した場所に変数の内容を表示することができます。

<%= @変数名 %>
point

コントローラの中でppやputsで行ったデバッグと違い、内容がブラウザ(画面上)に表示されます。


実例

例えば以下のように「@footerTexts」という変数の中身を確認したい場合は<%= @footerTexts %>と記述します。

<%= @footerTexts %>


▼画面の表示例


<%= debug @変数名 %>を使う

HTMLの中に<%= %>というタグを作成して、その中に「debug 変数名」とすることで記述した場所に変数の内容を表示することができます。

<%= debug @変数名 %>
point

表示はyaml形式になります。あまり見慣れないかもしれないので、「debug」をつけない「<%= @変数名 %>」の方がおすすめです。


実例

例えば以下のように「@footerTexts」という変数の中身を確認したい場合は<%= debug @footerTexts %>と記述します。

<%= debug @footerTexts %>


▼画面の表示例

yaml形式で表示されます。


Model(モデル)でテーブルの中身を確認する方法

Modelを使って取得したデータベースのテーブルの中のデータを確認したいときは、Railsの対話モードが便利です。

rails c

「c」は「console」の略です。

モデル名.メソッドでデータを呼び出すことができます。


実例

まずはRailsのコンソールを起動します。

 # rails c
Running via Spring preloader in process 55
Loading development environment (Rails 6.1.3.1)
irb(main):001:0>

モデル名.メソッドでデータを呼び出すことができます。「User」モデルの全データを表示したい場合は「all」メソッドを使って「User.all」とします。

irb(main):008:0> User.all
  User Load (0.6ms)  SELECT "users".* FROM "users" /* loading for inspect */ LIMIT $1  [["LIMIT", 11]]
=> #<ActiveRecord::Relation []>
合わせて読みたい

Railsにはモデル経由でテーブルの一覧を表示したり、指定したテーブルのカラム一覧を表示したり、データを条件検索することができます。詳細は下記をご参考ください。

【Rails】コンソールからモデルを使ってテーブルの一覧表示やデータ追加・更新・変更・削除する方法


localeファイルの中身を確認する方法

locale(ロケール)の指定したプロパティの値を表示する方法には以下の3つの方法があります。

localeファイルの中身を確認する主な方法
  1. コントローラで表示する。
  2. ビューで表示する。
  3. railsコンソールで表示する

以下でそれぞれの方法を解説します。


Controller(コントローラ)で表示する

デバッグ方法

コントローラの中でロケールに記述したデータを表示するには「pp」を使います。

localeを指定するときに入れ子になっているデータはt('プロパティ名.プロパティ名…')といったようにプロパティ名をつなげて指定します。

pp t('プロパティ名1.プロパティ名2,,,,')


実例

localeファイルとして、次のようなja.ymlがあるとします。

ja:
  test: テスト
  xxx:
    test: 深いテスト

子の中の「test」と、「xxx」の中の「test」を参照する場合は以下のように記述します。

class TopController < ApplicationController
  def index
    pp t('test')
    pp t('xxx.test')
  end
end

保存してページをリロードすると、アプリケーションを起動しているコンソールに変数の中身が表示されます。


注意点


ja.ymlに指定した値が存在しない場合は、translation missing: 入力した値が表示されます。

pp t('dummy')
pp t('xxx.存在しない')

▼画面の表示


View(ビュー)で表示する

デバッグ方法

View(ビュー)の中でlocaleの値を表示する場合は、<%= %>タグを使って以下のように記述します。

<%= t('プロパティ名') %>

入れ子になっているデータはt('プロパティ名.プロパティ名…')といったようにプロパティ名をつなげて指定します。

<%= t('プロパティ名1.プロパティ名2,,,,') %>


実例

localeファイルとして、次のようなja.ymlがあるとします。

ja:
  test: テスト
  xxx:
    test: 深いテスト

子の中の「test」と、「xxx」の中の「test」を参照する場合はビューファイルの中で以下のように記述します。

<%= t('test') %> 
<%= t('xxx.test') %>

保存してページをリロードすると、記述した場所に指定したlocaleの内容が表示されます。

▼ブラウザの表示


注意点

ja.ymlに指定した値が存在しない場合は、入力した値がそのまま表示されます。(入れ子の場合は末尾のプロパティ名が表示されます。)

<%= t('dummy') %>
<%= t('yyy.存在しない') %>


railsコンソールで表示する

localeファイルの指定したプロパティをrailsコンソール上で表示することもできます。

まずは、railsのコンソールに入ります。

rails c

なお「c」は「console」の略です。

railsコンソールで「I18n」と「tメソッド」を使うと、指定した値を表示することができます。

I18n.t('プロパティ名')

入れ子になっているデータはt('プロパティ名.プロパティ名…')といったようにプロパティ名をつなげて指定します。

I18n.t('プロパティ名1.プロパティ名2,,,,')


実例

localeファイルとして、次のようなja.ymlがあるとします。

ja:
  test: テスト
  xxx:
    test: 深いテスト

それぞれのプロパティの値をrailsコンソールで表示する場合は以下のようになります。

# rails c
Running via Spring preloader in process 197
Loading development environment (Rails 6.1.3.1)

irb(main):002:0> I18n.t('test')
=> "テスト"

irb(main):001:0> I18n.t('xxx.test')
=> "深いテスト"


注意点

指定した値が存在しない場合

ja.ymlに指定した値が存在しない場合は、translation missing: 入力した値が表示されます。


localeファイルの内容を修正・変更した場合

localeファイルの内容を修正・変更した場合、変更内容はリアルタイムで反映されません。

このため、後からlocaleのja.ymlを変更した場合は、一旦railsコンソールを「exit」で抜けて、「rails c」で再度対話モードに入る必要があります。


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