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

Gemについて調べてみた

最近、Gemについて質問される機会があり何も答えられなかった。
『何も理解せずに便利だから使ってる』ってことを実感したので
今まで使っていたGemについて調べてみた。
ちなみに rails, jquery, Sqlite, Sass, cofee, rspec については流石に省略する


uglifier

RailsJavaScriptを扱う際に自動的にコードを変換して軽量化 難読化する。


turbolinks
Railsでのページ遷移をAjaxに置き換える。
JavascriptCSSのパースが省略されるためレンダリングの高速化される。
ちなみにturbolinks有効時はグローバル変数は再定義されないため注意が必要。


jbuilder
JSON形式でレスポンスを出力する。


sdoc
Rubyのソースのコメントから
HTML CSS Javascript で構成されたドキュメントを生成する。


slim

viewをslimで実装することが可能になる。
ちなみにhamlもあるけど可読性という点でslimを採用している。(個人の好み)


bootstrap-sass

CSSフレームワークの代表格、twitter-bootstrap(sass)を導入する


font-awesome-rails

webフォントの font-awesomeを導入する。
結構いい感じに活躍してくれるのでいつも導入してるイメージ。


byebug

Railsデバッグ時にステップ実行が可能になる。
以下のように止めたいコードの下部に記述することでブレークポイントを貼ることが出来る

def new
  user = User.new
  binding.pry
end

ブレークポイントを通った際に(この場合は new が呼ばれた際)
一時処理を中断し対話モードに切り替わり、
内部のインスタンスを指定することで格納値を確認することができる。

最近使い始めたけど すごく便利。


web-console

エラーページでのデバック用ツール
ブラウザ上でコンソール操作が可能になる。


spring

事前にライブラリをバックグラウンドにロードしておき
コマンド実行(rake rails)の速度を早めることができる。
基本的に勝手に起動、終了するので特に気にしなくてもいい。

起動しているかの確認は以下で確認できる。

bin/spring status

止める方法はこっち。...誰も止めないと思うけど

bin/spring stop

ちなみにWindows環境では有効にならない。
そもそもWindowsで構築するなという話ではある。


factory_girl_rails

Fixture Replacementの一種。
テストで必要なオブジェクトを作成することができる。

FactoryGirl.define do

  factory :user do
    name "testUser"
    login_id "testLoginId"
    password "testPassword"
  end

end

こんな感じで設定して

user = create(:user) #ここでFactoryGirlで設定したオブジェクトを取得する
get :edit, id: user.id
expect(assigns(:user)).to eq(user)

これで簡単にテストオブジェクトを作成できる。


pry-rails

irb の上位互換。
irbの機能に加え、以下の機能を追加する。

show-model

pry(main)> show-model User
User
  id: integer
  name: string
  login_id: string
  password: string
  created_at: datetime
  updated_at: datetime
  has_many :sses

show-models

pry(main)> show-models
Tag
  id: integer
  title: string
  created_at: datetime
  updated_at: datetime
  has_many :ss_tags
User
  id: integer
  name: string
  login_id: string
  password: string
  created_at: datetime
  updated_at: date

show-routes

pry(main)> show-routes
users        GET    /users(.:format)               users#index
                 POST   /users(.:format)               users#create
new_user  GET    /users/new(.:format)           users#new
edit_user  GET    /users/:id/edit(.:format)      users#edit
user          GET    /users/:id(.:format)           users#show
                 PATCH  /users/:id(.:format)           users#update
                 PUT    /users/:id(.:format)           users#update
                 DELETE /users/:id(.:format)           users#destroy


pry-byebug

同じくbyebugの上位互換
基本のbyebugの機能に加えてnext stepコマンドが使えるようになる。
ただし、こちらはRuby2.0 以上でないと使えないので注意。


hirb
モデル出力を整形する。
導入しただけでは反映されず、コンソールでHirb.enableを実行必要がある。

Hirbを適用していない状態

pry(main)> User.all
  User Load (16.9ms)  SELECT "users".* FROM "users"
=> [
 #<User:0x007fee960e0420
  id: 2,
  name: "TEST",
  login_id: nil,
  password: "sample",
  created_at: Tue, 19 Jan 2016 13:11:45 UTC +00:00,
  updated_at: Tue, 19 Jan 2016 13:11:45 UTC +00:00>,

こちらがHirb適応している状態

pry(main)> User.all
  User Load (2.5ms)  SELECT "users".* FROM "users"
+----+----------+------------+-------------+-------------------------+-------------------------+
| id | name     | login_id   | password    | created_at              | updated_at              |
+----+----------+------------+-------------+-------------------------+-------------------------+
| 2  | TEST     |            | sample      | 2016-01-19 13:11:45 UTC | 2016-01-19 13:11:45 UTC |

みやすい...!
ちなみにpry と hirbは同時に使う際にには設定が必要。
ディレクトリ直下に以下のファイルを作成する。

.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


better_errors
エラー画面でセッション情報、リクエストパラメータ等が見やすいように整形される。


binding_of_caller
better-errorsのエラー画面でirbが利用できる。
こいつに関しては普通にbinding機能を実装に利用できるらしい...
ちょっと理解が追いついてないので理解出来次第更新。

ざっと解説したけど、多分Gemごとに もっと調べる必要があると思う。
Railsは調べること多くて大変....