Rails開発で有用な便利Gem一覧

Rails Advent Calendar 6日目。

Railsで普段使うようなGemも、Rails2系から3系への移行で大分デファクトのGemなども入れ替わったり、新しいGemが台頭して来たり、RailsやRubyを使う上では切っても切れないGem達。
なので、現在、主に自分が使用しているGemの一覧を紹介します。

普段Railsを使っている人にはあまり目新しいものは無いと思いますが、これからRailsを始める人がとりあえず知っておくと良いかも、みたいな観点でピックアップしてみました。

※2012/09/06時点 Rails3.2.8対応

### DBアダプタ

* [sqlite3](https://github.com/luislavena/sqlite3-ruby)
* [pg](https://bitbucket.org/ged/ruby-pg/wiki/Home)
* [mysql2](https://github.com/brianmario/mysql2)

おなじみ。各種DB用アダプタ。Railsデフォルトはsqlite3。

### ログイン認証

* [omniauth](https://github.com/intridea/omniauth)
* [omniauth-twitter](https://github.com/arunagw/omniauth-twitter)
* [omniauth-facebook](https://github.com/mkdynamic/omniauth-facebook)
* [omniauth-github](https://github.com/trevorturk/omniauth-github)
* [omniauth-identity](https://github.com/intridea/omniauth-identity)

OmniAuth認証によるログイン機能実装でよく使う面々。

### 定数／設定値管理

* [rails_config](https://github.com/railsjedi/rails_config)

指定の設定用ymlファイルに値を記述しておくと、下記のようにSettings.〜として呼び出す事が出来るようになります。
development／test／productionなどの各環境ごとに設定を分ける事も出来るので、煩雑になりがちな定数や設定値の管理のお供に。
ローカル環境だけこの値を使いたいなどの設定も可能です。

```yaml
default_limit: 100
```

```ruby
Settings.default_limit
 # => 100
```

### ページネーター

* [kaminari](https://github.com/amatsuda/kaminari)

rails2系ではwill\_paginateがデファクトだったかと思いますが、Rails3系に移行するぐらいの時期から、ほぼ完全にkaminariに乗り換えてる人がほとんどかと思います。
Kaminari.paginate\_arrayでArray objectにも対応。

### ユーティリティ

* [action_args](https://github.com/asakusarb/action_args)

params[:id]などのパラメータをdef show(id)のようにアクションの引数として受け取る事が出来るようになります。
paramsを書くのが面倒、使用しているparamsを列挙したいなどの場合に使うとコードがスッキリすると思います。

* [active_decorator](https://github.com/amatsuda/active_decorator)

DBにはfirst\_name、last\_nameで別々に入っていて、表示する時はフルネームとして```"#{user.last_name} #{user.first_name}"```のように出したい時など、Decoratorに```def full_name```を定義して、```user.full_name```のように呼べるようになります。
モデルに定義しても同じように使う事は出来ますが、データやビジネスロジックを扱わない表示用のメソッドなどをDecoratorに分離できます。

### デバッグ

* [tapp](https://github.com/esminc/tapp)

ハッシュなどを人が見やすい形で表示してくれます。
また、メソッドチェインの間に挟む事も出来るので、中間の状態を見たい時などにも使えます。

★2012/10/10 追記

* [awesome_print](https://github.com/michaeldv/awesome_print)

### アプリケーションサーバ

* [thin](https://github.com/macournoyer/thin)

主にHeroku用。最近ではthinをインストールしておくとrails sでローカルサーバを起動した時にも自動的にthinを使用してくれるので、ローカルの開発環境でもthinをインストールしています。

* [unicorn](https://github.com/defunkt/unicorn)

プロダクション環境用はこちら。
アプリケーションサーバとしてはそろそろデファクトになりつつあるような気がします。
自分はやった事ないですが、Herokuでも使えるらしいです。

### Markdown

* [redcarpet](https://github.com/vmg/redcarpet)
* [pygments.rb](https://github.com/tmm1/pygments.rb)
* [rubypython](https://github.com/halostatue/rubypython)

Markdownやシンタックスハイライトを実装したい時に使っています。

下記のようにヘルパーメソッドを呼ぶだけで簡単にMarkdown記法／シンタックスハイライトを表示したい場合は[markdown-scaffold](https://github.com/shu0115/markdown-scaffold)(※拙作)というGemを入れて指定のGenerateコマンドを叩くと変換用のメソッドをインストール出来ます。

```
<%= raw show_markdown( "markdown_text" ) %>
```

### 画像管理

* [paperclip](https://github.com/thoughtbot/paperclip)
* [carrierwave](https://github.com/jnicklas/carrierwave)

少し前まではpaperclipがデファクトだったのかな、という感じがしますが、最近はcarrierwaveの名前もよく聞きます。
両方共、S3へのアップロードなども簡単に実装できると思います。

★2012/10/10 追記

* [mini_magick](https://github.com/probablycorey/mini_magick)

### 論理削除

★2012/10/10 追記

* [rails3_acts_as_paranoid](https://github.com/goncalossilva/rails3_acts_as_paranoid)

### フォロー機能

★2012/10/10 追記

* [party_boy](https://github.com/mnelson/party_boy)

### アクティビティ機能

★2012/10/10 追記

* [timeline_fu](https://github.com/jamesgolick/timeline_fu)

### ジョブキュー処理

★2012/10/10 追記

* [resque](https://github.com/defunkt/resque)
* [delayed_job](https://github.com/collectiveidea/delayed_job)

参考： [ジョブキュー処理のResqueとDelayed Jobの使い分けの方針などはありますか？ - QA@IT](http://qa.atmarkit.co.jp/q/2406)

### Twitter／Facebook API操作

★2012/10/10 追記

* [twitter](https://github.com/sferik/twitter)
* [fb_graph](https://github.com/nov/fb_graph)

### リアルタイム処理

★2012/10/10 追記

* [private_pub](https://github.com/ryanb/private_pub)

### タグ機能

★2012/10/10 追記

* [acts-as-taggable-on](https://github.com/mbleigh/acts-as-taggable-on)

### ルーティング

★2012/10/12 追記

* [schneems/sextant](https://github.com/schneems/sextant)
  * [Rails 4.0 は rake routes いらず - willnet.in](http://willnet.in/30)

### エラーハンドリング

★2012/11/10 追記

* [smartinez87/exception_notification](https://github.com/smartinez87/exception_notification)
  * [Rails で捕捉されない例外が発生したらメールを送る #Ruby #Rails #rack #AdventCalendar - Qiita](http://qiita.com/items/adb89ede814b86e9c04a)


以上です。

この他にも、たくさん便利なGemがあると思うので、何か良いGemがあったら是非、教えてください。

----

★2012/09/12 追記

某界隈からの、このGemを紹介しないなんて有り得ないという異議申立てがあったので追記します。

* [soplana/to_gunma](https://github.com/soplana/to_gunma)

全てのオブジェクトをto_gunmaとするだけで群馬県に出来るという、とても便利なGemですw