ぼくのおすすめGem その2

こんにちは。
Misoca開発チームのめろたん(@)です。
最近のマイブームは脚の毛を剃ることです。

前回に引き続きMisocaで使っている便利・おすすめGemを紹介します!

hirb

github.com

rails consoleでレコードの結果を表示することがよくあると思います。 ですが、

[#<User id:1, name: "merotan">, ………

のように表示されてとても見づらく、わかりにくいですね。

そこでこの hirb を使いましょう!

Gemの追加

Gemfilehirbと日本語を表示するためにhirb-unicodeを追加して、コンソールでbundle installします。

group :development do
  gem "hirb"
  gem "hirb-unicode"
end

使い方

rails console

Hirb.enable

と実行し、その後、レコードを表示しましょう!
そうすると、

User.all
  User Load (0.9ms)  SELECT  `users`.* FROM `users` 
+----+----------+
| id |   name   |
+----+----------+
|  1 |  merotan |
+----+----------+
|  2 |   hoge   |
.
.
.
.

このように表のように表示されるのでとても見やすくなります!

Pryを使っている場合

irbでは無く、pryを使っています! という方は FAQ · pry/pry Wiki · GitHubHow can I use the Hirb gem with Pry? の項目を参考に設定しましょう!(僕はこれをやっていなかったので、出来ねーなーって1時間くらい無駄にしました。)

hashie

github.com

hashieとは、Hashを強力かつ使いやすくするためのgemです!

Hashに入れる値の型を強制したり、各要素をメソッドでアクセスできるようにしたり、指定したキー以外は使えなくするようにしたり…

といった感じにできます!

Gemの追加

Gemfilehashieを追加して、コンソールでbundle installします。

gem "hashie"

使い方

型の強制

型の強制を行うには

class HogeHash < Hash
  include Hashie::Extensions::Coercion
  include Hashie::Extensions::MergeInitializer
  coerce_key :age, Integer
end

のように Hashie::Extensions::CoercionHashie::Extensions::MergeInitializerinclude

coerce_key :age, Integerのように、型を強制したいキー(この場合age)と型(この場合Integer)を書きます。

そして以下が実際に使ってみた結果です!

HogeHash.new(age: 1) # => {:age=>1}
HogeHash.new(age: "1") # => {:age => 1}
HogeHash.new(age: true) # => Hashie::CoercionError: Cannot coerce property :age from TrueClass to Integer: undefined method `to_i' for true:TrueClass

Stringで渡した場合でもIntegerに強制されていますね!

また強制できない場合はErrorを出してくれます。いい感じですね。

メソッドでアクセス

メソッドでアクセスするには

class HogeHash < Hashie::Mash
end

上のようにHashie::Mashを継承しましょう!これでメソッドで各要素にアクセスできるようになります!

hoge = HogeHash.new
hoge.fuga? # => false
hoge.fuga = "fuga!"
hoge.fuga # => "fuga!"
hoge.fuga? # => true

このようにメソッドでアクセスできるようになります! とても読みやすくて使いやすいです!

指定したキー以外は使えなくする

指定したキー以外は使えないようにするには、

class HogeHash < Hashie::Trash
  property :fuga
end

上のようにHashie::Trashを継承し、アクセスできるキーをproperty :fugaのように指定します!

hoge = HogeHash.new
hoge.fuga = 123
hoge.fuga # => 123
hoge.hogehoge # => NoMethodError: undefined method `hogehoge' for #<HogeHash fuga=123>

このように、指定したキー以外は NoMethodErrorとなります!

hashieまとめ

ここで取り上げたのはほんの一部です。 他にも沢山ありますのでご自身で使って頂けたらと思います!

woothee

github.com

UserAgentを取って色々見たり、処理を分岐させたいと思うことがあると思います。

ですが、 "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/43.0.2357.130 Safari/537.36" のような文字列で表示されても、見づらいですし扱いづらくわかりにくいです。

そんな時はwootheeを使いましょう!

Gemの追加

Gemfilewootheeを追加して、コンソールでbundle installします。

gem "woothee"

使い方

使い方はとてもシンプルで、

Woothee.parse("Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/43.0.2357.130 Safari/537.36")

=> {:name=>"Chrome", :category=>:pc, :os=>"Mac OSX", :os_version=>"10.10.3", :version=>"43.0.2357.130", :vendor=>"Google"}

のように使えます。

簡単でとても便利です!

補足

tagomoris.hatenablog.com

作者さんのブログを読んでいただくととても良い話が読めると思います!

github.com

またwootheeJava,Python,Perl等多くの言語に対応していて

「完全に一致する挙動のUserAgent判定機」*1

なので、他の言語でも使うといいと思います!

最後に

如何でしたか?
これ便利だな〜〜と思っていただけたら幸いです! 次回もよろしくおねがいします!

*1:tagomorisさんのブログから