TIM Labs

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

| コメント(0) | トラックバック(0)

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周り

  • Squeel

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

  • Foreigner

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

  • ActiveHash

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

  • Annotate

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

  • Octopus

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

  • closure_tree

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

  • activerecord_import

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

  • Datamapper

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

論理削除

  • paranoia

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

認証

  • Devise

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

View周り

ファイル管理

  • CarrierWave

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

  • fog

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

画像処理

  • RMagick

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

デコレータ

  • Draper

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

帳票生成

  • ThinReports

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

memcachedクライアント

  • Dalli

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

設定周り

  • SettingsLogic

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

テスト周り

  • factory_girl_rails

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

  • Guard

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

  • Rubocop

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

  • Spring

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

  • simplecov

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

  • parallel_tests

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

デプロイ周り

  • Capistrano

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

デバッグ

その他便利機能

  • awesome_nested_fields

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

  • Whenever

    cronです。

  • MiniProfiler

    便利なプロファイラ。.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は大変便利ですが、本当に必要なものなのか、導入しても大丈夫か、をよく考えてから入れるようにしましょう。

トラックバック(0)

トラックバックURL: http://labs.timedia.co.jp/mt/mt-tb.cgi/415

コメントする

このブログ記事について

このページは、nishioが2014年2月 5日 21:30に書いたブログ記事です。

ひとつ前のブログ記事は「ActiveHashを使ってRailsで区分値を扱う方法」です。

次のブログ記事は「脱cron! SOS JobschedulerでRailsのジョブ管理をしてみる」です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。