すべてのRailsプロジェクトでいれておくべき7つの開発用Gem


元ネタはこちらになります。

http://www.rubyonrails365.com/7-must-have-gems-to-install-on-any-project/

いくつかは使ったことはあるのですが、使った事がないものもあったので自分で試しながらまとめてみました。

## Awesome Print

これはオブジェクトを見やすくしてくれるgemです。

まず、このgemを入れていない場合の出力をみてみましょう。

![スクリーンショット 2015-04-22 18.58.14.png](https://qiita-image-store.s3.amazonaws.com/0/4116/6369eff2-84c8-db09-8014-1149754880de.png "スクリーンショット 2015-04-22 18.58.14.png")

ちょっとわかりにくいですね。

それではgemをいれてみましょう。Gemfileに以下を追加します。

```ruby:Gemfile
gem 'awesome_print', require: 'ap'
```

`bundle install`をして、`rails console`を立ち上げなおします。

![スクリーンショット 2015-04-22 18.59.39.png](https://qiita-image-store.s3.amazonaws.com/0/4116/5aa01ebf-5ad9-60a1-6770-9184ef0e9eb0.png "スクリーンショット 2015-04-22 18.59.39.png")

だいぶ見やすくなった感じがします。

ただ、Rails4.2からは、PrettyPrintというのが標準ではいるようになっていて、標準でもだいぶみやすくなってますね。

![PrettyPrint.png](https://qiita-image-store.s3.amazonaws.com/0/4116/02b18ec4-8f24-6bf9-5023-c144e1c89f4e.png "PrettyPrint.png")


## Rails Panel

このgemをいれると、ChromeのDeveloper ToolでRailsの情報を取得できるようになります。

![スクリーンショット_2015-04-28_08_36_27.png](https://qiita-image-store.s3.amazonaws.com/0/4116/debeeefd-48ff-8905-b3c0-8d4551b4c4cf.png "スクリーンショット_2015-04-28_08_36_27.png")

まず、Railsアプリケーションに`meta_request`を入れる必要があります。`Gemfile`に`gem 'meta_request', group: :development`を追加して、`bundle install`します。

[ここ](https://chrome.google.com/webstore/detail/railspanel/gjpfobpafnhjhbajcjgccbbdofdckggg)からChromeの拡張をインストールして、Railsアプリケーションをブラウザで開いて、[要素の検証]でDeveloper Toolを開くとRailsタブが表れます。

その中でいろいろな情報が取得できます。特に、ActiveRecordで生のSQLがぱっと見れるのは便利だなと思いました。これを使う前はいちいちRailsを立ち上げたコンソールでログを追ってました。

![スクリーンショット_2015-04-28_08_36_27.png](https://qiita-image-store.s3.amazonaws.com/0/4116/6b681932-5a28-2b5a-a9e0-cd28160950ea.png "スクリーンショット_2015-04-28_08_36_27.png")

## Peek

GitHub社が’作成している(いた？)、システム内部ののぞき穴的な機能を提供してくれます。発行しているSQLの数などアプリケーションの重要な指標を画面上に簡単に表示することができます。アダプタを作成することができるので自分の環境にあわせて拡張もできます。

development環境で常にビュー上に表示するようにしておけば、おもいページでどの処理が時間がかかっているかなど一目でわかるのでいいいと思います。

production環境でも開発者など限定したユーザのみに表示しておけば、production環境での問題解決にも役立ちそうです。


## Better Errors

エラーが発生した際に標準のエラーに比べて見やすかったり、テキストエディタを起動できたり、コンソールをブラウザ上で操作してインスタンスの状態を確認することができます。

![better_errors.png](https://qiita-image-store.s3.amazonaws.com/0/4116/c883034f-6670-0c67-9bc8-8335b43391b5.png "better_errors.png")

## Pry Rails

Railsのデバッグを非常に楽にしてくれるgemです。私は正直これなしでは開発できないくらいです。`Gemfile`に`gem 'pry-rails', group: :development`を追加して、`bundle install`します。

例えば、コントローラのどこかに`binding.pry`というのを記述します。

```ruby
class HomeController < ApplicationController
  def index
    @hoge = 'hoge'
    binding.pry
  end
end	
```

該当のビューをブラウザで開くと、`rails server`を立ち上げているコンソールが`binding.pry`を埋め込んだ箇所で`rails console`が起動します。

```
Started GET "/" for ::1 at 2015-04-28 09:38:23 +0900
Processing by HomeController#index as HTML

From: /Users/hirotaka/Documents/workspace/hirotaka/development-gems/app/controllers/home_controller.rb @ line 4 HomeController#index:

    2: def index
    3:   @hoge = 'hoge'
 => 4:   binding.pry
    5: end

[1] pry(#<HomeController>)>
```

`rails console`と同じように、`binding.pry`したタイミングのインスタンスの情報を参照したり、変数を代入したりすることができます。

```
[1] pry(#<HomeController>)> p @hoge
"hoge"
=> "hoge"
[2] pry(#<HomeController>)>
```

また、別途`pry-nav`というgemをいれておくと`next`を入力するとステップ実行をすることができるようになります。

コントローラ以外にもビューでも`<%= binding.pry %>`とすると使えます。


## Quiet Assets

デフォルトのRailsのログだとこんな出力がいっぱいでききているかと思います。

```
Started GET "/assets/home.self-e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855.css?body=1" for ::1 at 2015-04-28 09:32:07 +0900


Started GET "/assets/application.self-e80e8f2318043e8af94dddc2adad5a4f09739a8ebb323b3ab31cd71d45fd9113.css?body=1" for ::1 at 2015-04-28 09:32:07 +0900


Started GET "/assets/jquery.self-d03a5518f45df77341bdbe6201ba3bfa547ebba8ed64f0ea56bfa5f96ea7c074.js?body=1" for ::1 at 2015-04-28 09:32:07 +0900


Started GET "/assets/jquery_ujs.self-8e98a7a072a6cee1372d19fff9ff3e6aa1e39a37d89d6f06861637d061113ee7.js?body=1" for ::1 at 2015-04-28 09:32:07 +0900


Started GET "/assets/application.self-3a3c8b61bda630ee689740ce7cbd0dd8ea6fdd45e2c42eef4661ab38cf268afe.js?body=1" for ::1 at 2015-04-28 09:32:07 +0900


Started GET "/assets/turbolinks.self-c37727e9bd6b2735da5c311aa83fead54ed0be6cc8bd9a65309e9c5abe2cbfff.js?body=1" for ::1 at 2015-04-28 09:32:07 +0900


Started GET "/assets/home.self-877aef30ae1b040ab8a3aba4e3e309a11d7f2612f44dde450b5c157aa5f95c05.js?body=1" for ::1 at 2015-04-28 09:32:07 +0900
```

これだとリクエストの情報などを参照したいときにスクロールして戻る必要があります。開発しているときはRailsのアセットパイプラインのログ情報はあまり必要ないのではないでしょうか。

Gemfileに`gem 'quiet_assets', group: :development`を追加してあげると、上のようなログは出力されなくなり、すっきりします。

```
Started GET "/" for ::1 at 2015-04-28 09:54:09 +0900
  ActiveRecord::SchemaMigration Load (0.1ms)  SELECT "schema_migrations".* FROM "schema_migrations"
Processing by HomeController#index as HTML
  Rendered home/index.html.erb within layouts/application (0.9ms)
  User Load (0.2ms)  SELECT  "users".* FROM "users" WHERE "users"."id" = ?  ORDER BY "users"."id" ASC LIMIT 1  [["id", 1]]
Completed 200 OK in 154ms (Views: 144.9ms | ActiveRecord: 0.8ms)
```

## Bullet

遅いページでよくある問題としてN+1問題に起因する場合が多いのではないでしょうか。このgemではそういったページに遭遇するとアラートを表示してくれます。developmentで読み込むようにしておけば、特定のページでN+1の問題があることを簡単に認識することができます。


## NewRelic

これは有名なシステム監視のサービスですね。ここでは、developement環境で、無料で使えて開発時に便利な方法をご紹介します。


[NewRelic.com](https://newrelic.com/)でアカウント登録(Sign Up)をします。

ログインしたら、[Add more]をしてアプリケーションを追加します。

![newre![newrelic2.png](https://qiita-image-store.s3.amazonaws.com/0/4116/b19001a4-7bc6-927e-0379-9d7cb46fddc5.png "newrelic2.png")
lic1.png](https://qiita-image-store.s3.amazonaws.com/0/4116/1559ac1f-e650-3d93-bf7a-d9a33d70ec9e.png "newrelic1.png")

アプリケーションのタイプでRubyを選択すると、

![newrelic2.png](https://qiita-image-store.s3.amazonaws.com/0/4116/b19001a4-7bc6-927e-0379-9d7cb46fddc5.png "newrelic2.png")


下の方に手順が表示されるので、ここでは`newrelic.yml`ををダウンロードします。

![newrelic3.png](https://qiita-image-store.s3.amazonaws.com/0/4116/9f1ddbc5-6d3a-1882-d8c9-97d9f480c778.png "newrelic3.png")

ダウンロードしたのを`config/`配下に移動します。

`Gemfile`に`gem 'newrelic_rpm'`を追加して、`bundle install`します。

これで`rails server`を立ち上げて、`/newrelic`に接続します。

http://localhost:3000/newrelic


![newrelic4.png](https://qiita-image-store.s3.amazonaws.com/0/4116/09f6f9a2-5642-f1f6-51a0-54ad435004e0.png "newrelic4.png")

内部の処理でSQLやコントローラのどこの箇所でどれくらいの時間がかかっているのかなどを細かくみれるので開発時でも便利です。

## まとめ

確かに、7つとも開発しているときに便利だなと思いました。これからのプロジェクトではデフォルトでいれておきたいですね。