Railsなプロジェクトで利用している便利なGem一覧


2014年 02月 05日

RubyにはGemと呼ばれるサードパーティのライブラリが豊富に存在します。

Gemは大変便利なもので、こういう機能ほしいなと思った際に The Ruby ToolboxRubyGems.orgGoogle で検索すると大抵誰かがその機能を持ったGemを作っていたりします。

gemを利用するのも、RubyGems.orgに登録されているものならば

gem install xxx # xxxにはライブラリ名を入れる

と入力することで利用可能となります。

Gemはだれでも簡単に開発でき、審査無しですぐに公開できるため、日々大量のGemたちがRubyGems.orgに登録されています。反面、長年保守されていないGemや品質の低いGemも大量にRubyGems.orgに登録されているのが現状です。

同じ機能を持ったGemも大量に登録されていたりして、どのライブラリを利用してよいのか迷う事も多々あります。

今回は弊社プロジェクトで実際に利用している、便利なgem達を紹介いたします。

なお、Railsなプロジェクトに携わっているのなら誰でも知っている/使っていると思われる基本的なgem(jquery-rails, mysql2, therubyracer等)の紹介は、今回割愛してます。

DB周り

ActiveRecord拡張です。likeクエリ等が綺麗にかけるようになります。sequelと名前が似てますが、全くの別物です。

マイグレーションファイルで外部キー制約が簡単につけられるようになります。

ActiveRecordライクなオブジェクトのデータソースをYamlやファイルにできます。ActiveHashについては、ActiveHashを使ってRailsで区分値を扱う方法 を参照してください。

Schema情報をモデルの先頭にコメントとして挿入してくれます。これがないとモデル情報見るためにマイグレーションファイル見ないといけなくて不便です。たまにannotateつけ忘れてしまう、という問題がありますが、このあたりはJenkinsか何かでつけ忘れチェックのタスクを走らせるとよいです。

DBにマスタ、スレーブが存在する場合はOctopusを使うと簡単に接続先を切り替えられます。負荷の高いシステムでDB分割しないといけない場合に利用します。

DBで階層構造が必要になった場合に利用します。

ActiveRecordでBulk Insertできるようにします。

頼む、誰か保守してくれ!これで動いてるシステムもあるんだよ!バグが多く罠にはまりやすいので、素人にはおすすめできない。

論理削除

DBレコードの論理削除に利用します。Rails3用と書いてありますが、Rails4でも動きます。
なお、同じようなライブラリにacts_as_paranoidというものがあります。Rails3なプロジェクトではよく利用していましたが、Rails4での挙動が怪しいのでparanoiaに切り替えました(acts_as_paranoidはタイムゾーン関連の挙動が怪しい。deleted_atをJSTで取得したくてもUTCになってしまう等)

認証

認証は毎回Devise。ユーザ登録時の機能も色々提供してくれます。

View周り

ページングといったらkaminari。見た目も簡単にカスタマイズできて便利です。TwitterBootstrapを使っているのなら、kaminari-bootstrapを使うことで、ページングのデザインに悩まされる事が無くなります。

パンくずが簡単に生成できます。見た目のカスタマイズにはやや工夫が必要です。詳しくは Railsでパンくずリストを作るなら、breadcrumbs_on_railsがオススメ を参照してください。

フォームが簡単に生成できます。でも最近まともに使ってないかも?

ファイル管理

ファイルアップロード関連はだいたいこれで十分です。

AWSのS3にファイルをアップロードする際に利用します。carrierwaveと組み合わせて利用できます。

画像処理

ImageMagickをRubyから簡単に利用できるようになります。CarrierWaveと組み合わせて、画像アップロード時にサムネイル作成、なんかもできます。

デコレータ

DecoratorとかViewModelとか言われているアレです。Decoratorを使うとhelperがごちゃごちゃしなくなるし、viewもスッキリするのでオススメです。個人的にはActiveDecoratorよりdraperの方が使いやすくて好きです。

帳票生成

このgemは本当に凄いです。帳票が簡単に作成できるし、PDFでの出力もできるし、見た目も簡単にカスタマイズできるし、扱いも簡単です。レイアウトが簡単に作成できるGUIなツールも公式サイトからダウンロードできます。

memcachedクライアント

Memcachedに簡単にアクセスできるようになります。

設定周り

定数等のYAMLに書いた設定を簡単に呼び出せるようになります。前はdotenv等も使ってましたが、最近はSettingsLogicだけでなんとかなってます。

テスト周り

有名なので説明省略。データが簡単に生成できます。テストデータ作るなら、FactoryGirl。

自動テスト。guard-rspecと合わせて使います。ファイルを編集すると、そのファイルに対応したrspecが自動的に走ってくれます。

コーディングスタイルチェックです。古い記法でプログラム書いてたり、インデントがおかしかったりすると警告を出してくれます。デフォルトのままだとチェックが厳しすぎるので、どのコーディングスタイルでいくかをチームで話し合って、設定ファイルに手を加えたほうがよいです。guard-rubocopでguardとの連携が可能です。

ライブラリをあらかじめpreloadしておくことで、rake taskを高速化できます。

カバレッジ計測ツールです。プロジェクトによっては95%とか100%!!! とかあるので導入してます。余談ですが、カバレッジは90%あれば十分かと思います。

テストを並列実行できるようになります。プロジェクトの規模が大きくなると全体テスト走りきるのも時間かかるようになるので、あらかじめいれておいて損はないかと。

デプロイ周り

デプロイといったらCapistrano。Rubyじゃないプロジェクトでも利用されてる、有名なgemです。

デバッグ

irbより圧倒的に便利。合わせてpry-doc, pry-rails, pry-byebug を入れましょう。

エラー画面をデバッグしやすい画面に変更してくれます。BetterErrorsに関しては、RailsのDebug環境を改善するを参照してください。

その他便利機能

増減する入力フォームが簡単に生成できます。毎回jsを書いて苦労していた作業がなくなるので便利です。このgemについては、近いうちに記事を書こうかと。

cronです。

便利なプロファイラ。.netなんかでも利用できます。でも、NewRelicで十分なんじゃ、と思ったり。

Gemを導入する際に気をつける事

今回は弊社プロジェクトで良く利用しているgem達を紹介しました。
他にも利用しているgemは沢山ありますが、主に利用しているものは上記の通りです。

Rubygems.orgに登録されているgemは2014年2月3日現在で69,843個あるわけですが、保守されていないような怪しいものも数多く存在します。

我々がgemを導入する上で確認している点は、以下の通りです。

  • Rails4に対応しているか (Rails4プロジェクトの場合)
  • 利用している人は多そうか
  • githubのスターの数
  • 最終更新日 / 活発さ

一番気にしているのは、やはり活発さでしょうか。

何年も放置されているようなgemは、たとえ便利そうでも導入をあきらめた方が良いかと思います。
活発なプロジェクトは、githubのスターの数が多かったり、プルリクエスト/Issueが頻繁に投稿されていたりします。
そういうgemは、不具合発生時の修正も早いので、安心して利用できます。

gemの活発さや利用者が多いかどうかは、The Ruby Toolboxで確認できます。例えばparanoiaだと https://www.ruby-toolbox.com/projects/paranoia で確認できます。

gemを大量に導入しすぎるのもよくありません。
依存関係で苦しんだり、バージョンアップ作業が大変になったりします。

プロジェクトによっては、月1回gemのアップデート状況を確認/報告しないといけないものもあります。
セキュリティ上の重大な問題がないか、どんなバージョンアップがされたのかを確認、時にはソースのdiffを見るなど、大変面倒(でも必要)な作業が発生します。

RubyのGemは大変便利ですが、本当に必要なものなのか、導入しても大丈夫か、をよく考えてから入れるようにしましょう。