Ginza.rb 第8回 Gemfileみせっこ!みんなどんなの使ってます? を開催した

Ginza.rb.第8回を開催しました。今回は参加者の方に事前にGemfileをアップして頂き、使用しているgemについて説明をして頂く形式で実施。 Gemfileの置き場は[こちら](https://github.com/ginzarb/meetups/issues/6)。 話に上がったgemについて以下にずらずらと。 ### [gon](https://github.com/gazay/gon) Rails側の変数をJavaScriptに渡す事が出来るgem。 controllerから大量のデータをJavaScriptに渡す必要がある場合に便利。 詳細は[RailsCast](http://railscasts.com/episodes/324-passing-data-to-javascript?language=ja&view=asciicast)参照。 ### [Better Errors](https://github.com/charliesome/better_errors) Railsのエラー画面をより解りやすい画面に変えてくれるgem

(大分小さいですが)上記画面の通りで、 * Stack Trace * ローカル変数/インスタンス変数 * リクエスト情報 を表示してくれる。更に、irb(PERL)によるdebugが可能なので、これがあると大分デバッグが効率良くなります。 ### [bullet](https://github.com/flyerhzm/bullet) ActiveRecordでやりがちなN+1問題を検出してくれるgem。 普通のログファイルだけでなく、airbrake、growl等様々な方法で通知をだしてくれる。お勧めはJavaScriptのalert。割とうざいので、ちゃんと消そうという気になります。 ### [pry-rescue](https://github.com/ConradIrwin/pry-rescue) "Super-fast debugging for Ruby. "と銘打たれている、Rubyデバッグ用ライブラリ。 "rescue"というコマンドが提供されており、そのコマンドでRubyのソースを実行すると、ハンドリングしてないexceptionが発生した際に、自動的にその処理でPryが起動する。 こんな感じ(公式ページより)

$ rescue examples/example2.rb From: /home/conrad/0/ruby/pry-rescue/examples/example2.rb @ line 19 Object#beta: 17: def beta 18: y = 30 => 19: gamma(1, 2) 20: end ArgumentError: wrong number of arguments (2 for 1) from /home/conrad/0/ruby/pry-rescue/examples/example2.rb:22:in `gamma` [1] pry(main)>

このgemの更に素晴らしい所は、RSpec/minitestに対しても実施出来、test failした際に、pryを起動してくれる所。

$ rescue rspec From: /home/conrad/0/ruby/pry-rescue/examples/example_spec.rb @ line 9 : 6: 7: describe "Float" do 8: it "should be able to add" do => 9: (0.1 + 0.2).should == 0.3 10: end 11: end RSpec::Expectations::ExpectationNotMetError: expected: 0.3 got: 0.30000000000000004 (using ==) [1] pry(main)>

テストがより効率的に。

asset pipe lineのlogを消してくれるgem。 ようは、

Started GET "/assets/application.js?body=1" for 127.0.0.1 at 2012-02-13 13:24:04 +0400 Served asset /application.js - 304 Not Modified (8ms)

こういうログを消してくれる。地味に便利。

Rspecのテスト進捗状況が可視化が出来るgem。残りのテスト数、予想終了時間等の情報が表示される。

名前の通りで、Railsのi18n対応を、jsにも行えるgem。

RailsでHTMLメールを作成する場合、cssはHTMLに直接記載する必要があるのだが、このgemを使うと、外部のcssファイルを使用する事が出来る。HTMLメール送信のおともに。

Markdownコードを解釈するためのgem。githubでも使われている(らしい)

コードのシンタックスハイライトをしてくれるgem。http://pygments.org/ というpythonのシンタックスハイライトツールがあり、それをラップしているだけらしい。

redcarpetと合わせてどうぞ。

エラー通知用ウェブサービスairbrakeのRuby用プラグイン。airbrakeはweb上でエラーの情報がまとまって見れるので便利。有料。お金の壁。

全文検索システムであるsolr用のgem。データの登録から検索まで全ておまかせ。

RailsアプリケーションのRubyコードをスキャンして、セキュリティに関する問題の検査を行なってくれるgem。

インストールすると、"brakeman"というコマンドが実行出来るようになり、このコマンドをappディレクトリで実行すると、ソースコードを分析して、レポートを出力をしてくれる。

詳細はrailscastに

@ken_c_loさんのズルいデザインテクニックのMixinをまとめたGem。

これはずるい。とても良い。

Test::Unit/Rspecの実行結果をXMLに変換してくれるgem。Jenkinsのおともに。

RSpecのmatcherを提供するgem。

こんな感じ(公式ページより)

describe User do subject { User.new(@valid_attributes)} it { should accept_values_for(:email, "[email protected]", "[email protected]") } it { should_not accept_values_for(:email, "invalid", nil, "a@b", "[email protected]") } end

valid/invalidをそれぞれまとめてテストする事が出来る。これ、割と便利そう。

simpleなDSLでAPIの作成が行えるマイクロフレームワーク。

サンプル。

module Twitter class API < Grape::API version 'v1', using: :header, vendor: 'twitter' format :json helpers do def current_user @current_user ||= User.authorize!(env) end def authenticate! error!('401 Unauthorized', 401) unless current_user end end resource :statuses do desc "Return a public timeline." get :public_timeline do Status.limit(20) end desc "Return a personal timeline." get :home_timeline do authenticate! current_user.statuses.limit(20) end desc "Return a status." params do requires :id, type: Integer, desc: "Status id." end route_param :id do get do Status.find(params[:id]) end end desc "Create a status." params do requires :status, type: String, desc: "Your status." end post do authenticate! Status.create!({ user: current_user, text: params[:status] }) end desc "Update a status." params do requires :id, type: String, desc: "Status ID." requires :status, type: String, desc: "Your status." end put ':id' do authenticate! current_user.statuses.find(params[:id]).update({ user: current_user, text: params[:status] }) end desc "Delete a status." params do requires :id, type: String, desc: "Status ID." end delete ':id' do authenticate! current_user.statuses.find(params[:id]).destroy end end end end

ちょっとsinatraっぽいかなあ。validationも書ける。色々と出来そう。

presenterパターンに似た形でRailsアプリケーションのビューにdecoratorを追加できるようにするgem。

早速サンプル。

# app/models/user.rb class User < ActiveRecord::Base # first_name:string last_name:string website:string end # app/decorators/user_decorator.rb module UserDecorator def full_name "#{first_name} #{last_name}" end def link link_to full_name, website end end # app/controllers/users_controller.rb class UsersController < ApplicationController def index @users = User.all end end

model毎のdecoratorに表示に関するメソッドを集約することにより、helperがすっきり。helperの処理が増えすぎて、このメソッドでこで読んてるの? となる前に導入するのがお勧めです。

deviseから送信するメールを非同期送信にしてくれるgem。 Resque、Sidekiq、Delayed::Job等様々なQueueシステム対応している。

地味に便利そう。devise以外でも使いたい。

deviseに任意の暗号方式を追加出来るgem、で合ってるかなあ。よりセキュアにしたい時ようかと。

エラーが発生した際にエラーメールを送信してくれるgem。お金の問題でairbrakeが使えない時にはお勧め。エラー通知大事。

seedデータ作成の為のgem。

rakeタスクでデータを入れれるのだが、入れるデータを"FILTER"として指定できるので、サービスローンチ後にseedデータを追加するのに便利そう。

ActiveRecordのModelのattributesを国際化するためのgem。

サンプル。

class Post Globalize rocks! I18n.locale = :he post.title # => ×××××××××2 ש×××!

データはDBに持っている。初期データ登録が大変そうですが、国際化対応するのには便利そう。

ランダムデータ作成の為のgem。fakerと似ているのだが、fakerよりもデータの種類が多い。(moneyなどがある)

定数管理用のgem。yamlで書けるのでextendも出来るし、env毎の設定も簡単に出来る。

RailsのModel同士で通信する為のgem。大分辛く、お勧めしないとの事でした。

Hashやyamlで定義した値をActiveRecordの用に操作出来るgem。readonlyなのが特徴。

DBに入ってないため、生SQLでデータ抽出する際にjoin出来ず困る事があるので、個人的にはあまりお勧めしないです。

日本語の文字種判定、文字種変換(半角→全角、ひらがな→カタカナなど)を行なってくれるgem。半角カタカナのチェック・変換等が必要な際に便利。

ActiveRecordが発行するSQLをフック出来るgem。

カスタマイズしたクエリログを出力したり、クエリの発行元のトレースしたり出来る。

CREATE/UPDATE/DELETEをフックしログに残す事で、操作ログとしても使えそう。便利。

以上。

大分漏れている気がするので、リンク先を見ていただくか、他の方のブログを見て頂くと良いと思います。

You are using an unsupported browser and things might not work as intended. Please make sure you're using the latest version of Chrome, Firefox, Safari, or Edge.