読者です 読者をやめる 読者になる 読者になる

Rails Webook

自社のECを開発している会社で働いています。Rails情報やサービスを成長させる方法を書いていきます

Railsの開発効率をあげる - Hirbを使ってRailsでコンソールのModelの出力結果を表形式で分かりやすく表示する

Rails gem 開発を効率化する

rails consoleでモデルの内容をきれいに表形式で表示できるようにするhirbというgemのインストール方法を説明します。

Hirb導入前

値が表示されているが、複数表示された時にデータが見づらい。

$ rails c
Loading development environment (Rails 4.1.5)

irb(main):001:0> User.all
  User Load (1.1ms)  SELECT "users".* FROM "users"
=> #<ActiveRecord::Relation [#<User id: 1, firstname: "太郎", lastname: "鈴木", email: "t.suzuki@test.com", created_at: "2014-10-23 17:07:14", updated_at: "2014-10-23 17:07:14">, #<User id: 2, firstname: "花子", lastname: "佐藤", email: "h.satou@test.com", created_at: "2014-10-23 17:07:57", updated_at: "2014-10-23 17:07:57">]>
Hirb導入後

表形式で結果が表示されるため、各データがとても見やすい。

$ rails c
Loading development environment (Rails 4.1.5)

irb(main):001:0> User.all
  User Load (0.4ms)  SELECT "users".* FROM "users"
+----+-----------+----------+-------------------+-------------------------+-------------------------+
| id | firstname | lastname | email             | created_at              | updated_at              |
+----+-----------+----------+-------------------+-------------------------+-------------------------+
| 1  | 太郎      | 鈴木     | t.suzuki@test.com  | 2014-10-23 17:07:14    | 2014-10-23 17:07:14  |
| 2  | 花子      | 佐藤     | h.satou@test.com   | 2014-10-23 17:07:57    | 2014-10-23 17:07:57  |
+----+-----------+----------+-------------------+-------------------------+-------------------------+
2 rows in set

対象読者

  • Railsの開発効率を上げたい方(特に、consoleでModelの内容をよく確認する方)

動作確認

  • Rails 4.1
  • hirb 0.7.2
  • hirb-unicode 0.0.5

目次


1. Railsプロジェクトを作成

まずはRailsプロジェクトを作成します。

rails new hirb_test
cd hirb_test

次にHirbの挙動を確認するために、UserモデルとCommentモデルを作成します。

rails g scaffold User firstname:string lastname:string email:string
rails g model Comment body:string user:references
rake db:migrate

Userモデルにアソシエーションを追加します。

# app/models/user.rb
class User < ActiveRecord::Base
  has_many :comments
end

Commentモデルを作成したときにuser:referencesを追加したので既にアソシエーションがついています。

# app/models/comment.rb
class Comment < ActiveRecord::Base
  belongs_to :user
end

Modelのデータを表示する必要があるため、データを2件ほど追加しておきます。

$ rails c
Loading development environment (Rails 4.1.5)
irb(main):001:0> User.create(firstname: "太郎", lastname: "鈴木", email: "t.suzuki@test.com")
...
irb(main):002:0> User.create(firstname: "花子", lastname: "佐藤", email: "h.satou@test.com")
...

2. Hirbをインストール

GemfileにHirbを追加します。

# Gemfile

group :development, :test do
  gem 'hirb'         # モデルの出力結果を表形式で表示するGem
  gem 'hirb-unicode' # 日本語などマルチバイト文字の出力時の出力結果のずれに対応
end

Bundlerでgemをインストールします。

bundle install

では、rails cでconsoleを開いて、Hirbの出力結果を確認しましょう。

$ rails c
Loading development environment (Rails 4.1.5)
[1] irb(main)>

ちなみに、Pryを入れていない場合は、Rubyに標準で付属しているirbが使われます。

$ rails c
Loading development environment (Rails 4.1.5)
irb(main):001:0> User.all  # Hirbの有効化前。表示が見にくい。
  User Load (1.1ms)  SELECT "users".* FROM "users"
=> #<ActiveRecord::Relation [#<User id: 1, firstname: "太郎", lastname: "鈴木", email: "t.suzuki@test.com", created_at: "2014-10-23 17:07:14", updated_at: "2014-10-23 17:07:14">, #<User id: 2, firstname: "花子", lastname: "佐藤", email: "h.satou@test.com", created_at: "2014-10-23 17:07:57", updated_at: "2014-10-23 17:07:57">]>

irb(main):002:0> Hirb.enable  # Hirbの有効化
=> true

irb(main):003:0> User.all   # Hirbの有効化後。表示が見やすい。
  User Load (0.4ms)  SELECT "users".* FROM "users"
+----+-----------+----------+-------------------+-------------------------+-------------------------+
| id | firstname | lastname | email             | created_at              | updated_at              |
+----+-----------+----------+-------------------+-------------------------+-------------------------+
| 1  | 太郎      | 鈴木     | t.suzuki@test.com | 2014-10-23 17:07:14     | 2014-10-23 17:07:14  |
| 2  | 花子      | 佐藤     | h.satou@test.com  | 2014-10-23 17:07:57     | 2014-10-23 17:07:57  |
+----+-----------+----------+-------------------+-------------------------+-------------------------+
2 rows in set

このようにHirbを使うことでActiveRecordの出力結果が見やすくなります。



3. HirbをPryと一緒に使う

以前紹介したパワフルなconsoleのPryと一緒にHirbを使うためには設定が必要です。

Pryのインストール方法や使い方に「Pryを使ってconsoleを拡張/デバッグを実施」を参照して下さい。

GemfileにPryを追加します。

# Gemfile

group :development, :test do
  gem 'hirb'         # モデルの出力結果を表形式で表示するGem
  gem 'hirb-unicode' # 日本語などマルチバイト文字の出力時の出力結果のずれに対応

  gem 'pry-rails'  # rails console(もしくは、rails c)でirbの代わりにpryを使われる
  gem 'pry-doc'    # methodを表示
  gem 'pry-byebug' # デバッグを実施
end

Bundlerでgemをインストールします。

bundle install

Railsプロジェクトのルートディレクトリ(Gemfileと同じ場所)に.pryrcを作成し、次の内容を記載します。

# .pryrc
begin
  require 'hirb'
rescue LoadError
  # Missing goodies, bummer
end

if defined? Hirb
  # Slightly dirty hack to fully support in-session Hirb.disable/enable toggling
  Hirb::View.instance_eval do
    def enable_output_method
      @output_method = true
      @old_print = Pry.config.print
      Pry.config.print = proc do |*args|
        Hirb::View.view_or_page_output(args[1]) || @old_print.call(*args)
      end
    end

    def disable_output_method
      Pry.config.print = @old_print
      @output_method = nil
    end
  end

  Hirb.enable
end

では、Pryのconsole時にHirbが有効になっていることを確認しましょう。

$ rails c
Loading development environment (Rails 4.1.5)
[1] pry(main)> User.all
  User Load (1.7ms)  SELECT "users".* FROM "users"
+----+-----------+----------+-------------------+-------------------------+-------------------------+
| id | firstname | lastname | email             | created_at              | updated_at              |
+----+-----------+----------+-------------------+-------------------------+-------------------------+
| 1  | 太郎      | 鈴木     | t.suzuki@test.com | 2014-10-23 17:07:14 UTC | 2014-10-23 17:07:14 UTC |
| 2  | 花子      | 佐藤     | h.satou@test.com  | 2014-10-23 17:07:57 UTC | 2014-10-23 17:07:57 UTC |
+----+-----------+----------+-------------------+-------------------------+-------------------------+
2 rows in set
[2] pry(main)>

Hirbのおかげで、PryでもModelの結果が表形式に整形されて表示されるようになりました。

以上です。
Hirbを使うことで、console上でのModelの結果がとても見やすくなるので、Railsでconsoleをたくさん使う方は是非入れてみることをお勧めします。

参考文献