OSSのGemをのぞいてみたンゴ!!

この記事はRuby on Rails Advent Calendar 2017 17日目の記事です。

# はじめに
今回初めて ruby on railsのアドベントカレンダーに参加させていただきます。
稚拙な内容などはご了承ください。
また今回検証するためにソースコードを一部お借りさせていただきました。
[Ruby on Rails Advent Calendar 2017 | 4日目　「先人達から学ぶRailsのテーブル設計」- kikunantoka](https://qiita.com/kikunantoka/items/61ab74c7f50dedace211)


# 検証対象 OSS
- [ekremkaraca/awesome-rails](https://github.com/ekremkaraca/awesome-rails)にあるレポジトリー92種類を対象としています。

# 注意事項
- 古いレポジトリーなども含まれているため、Gemの取り扱いの際はご自身で一度確認することをおすすめします。

# 方法
- 記事を参考にレポジトリーからGemfileを抽出し、データベースに保存。
- 各カテゴリー別に分けて使用されているGemもしくは、使用されていたGemを調べております。


 
# 結果

## rails version
|rails version|number_of_gems|
|:--|:-:|
|rails4系|45|
|rails5系|28|
|rails3系|10|

# アカウント作成
|gem|number_of_gems|
|:--|:-:|
|[devise](https://github.com/plataformatec/devise)|46|
|[sorcery](https://github.com/Sorcery/sorcery)|2|

## DB周辺
|gem|number_of_gems|
|:--|:-:|
|pg|57|
|[mysql](https://github.com/brianmario/mysql2)|27|
|[sqlite3](https://github.com/sparklemotion/sqlite3-ruby)| 20|

## キャッシュサーバー
|gem|number_of_gems|
|:--|:-:|
|[redis](https://github.com/redis/redis-rb)|8|

## ページネーション
|gem|number_of_gems|
|:--|:-:|
|[kaminari](https://github.com/kaminari/kaminari)|26|
|[will_paginate](https://github.com/mislav/will_paginate)|24|

## 画像
|gem|number_of_gems|
|:--|:-:|
|[paperclip](https://github.com/thoughtbot/paperclip)|26|
|[carrierwave](https://github.com/carrierwaveuploader/carrierwave)|24|
|[mini_magick](https://github.com/minimagick/minimagick)|18|
|rmagick|8|


## テンプレートエンジン 
|gem|number_of_gems|
|:--|:-:|
|[haml](https://github.com/haml/haml)|21|
|[haml-rails](https://github.com/indirect/haml-rails)|16|
|[slim-rails](https://github.com/slim-template/slim-rails)|6|
|[slim](https://github.com/slim-template/slim)|5|


## デバッグ
|gem|number_of_gems|
|:--|:-:|
|[better_errors](https://github.com/charliesome/better_errors)|32|
|[binding_of_caller](https://github.com/banister/binding_of_caller)|31|

## 権限
|gem|number_of_gems|
|:--|:-:|
|[pundit](https://github.com/elabs/pundit)|8|
|[cancan](https://github.com/CanCanCommunity/cancancan)|7|

## oauth系
|gem|number_of_gems|
|:--|:-:|
|[omniauth](https://github.com/omniauth/omniauth)|23|
|[omniauth-facebook](https://github.com/mkdynamic/omniauth-facebook)|16|
|[omniauth-google-oauth2](https://github.com/zquestz/omniauth-google-oauth2)|12|
|[omniauth-github](https://github.com/omniauth/omniauth-github)|10|

## decorator
|gem|number_of_gems|
|:--|:-:|
|[draper](https://github.com/drapergem/draper)|8|


## テスト
|gem|number_of_gems|
|:--|:-:|
|[rspec-rails](https://github.com/rspec/rspec-rails)|50|
|[minitest](https://github.com/seattlerb/minitest)|14|

## テスト効率化促進
|gem|number_of_gems|
|:--|:-:|
|[database_cleaner](https://github.com/DatabaseCleaner/database_cleaner)|38|
|[webmock](https://github.com/bblimke/webmock)|31|
|[faker](https://github.com/stympy/faker)|29|
|[launchy](https://github.com/copiousfreetime/launchy)|29|
|[simple_cov](https://github.com/colszowka/simplecov)|27|
|[timecop](https://github.com/travisjeffery/timecop)|27|
|[shoulda-matchers](https://github.com/thoughtbot/shoulda-matchers)|22|
|[guard-rspec](https://github.com/guard/guard-rspec)|18|
|[coveralls](https://github.com/lemurheavy/coveralls-ruby)|16|
|[rails-controller-testing](https://github.com/rails/rails-controller-testing)|16|
|[email_spec](https://github.com/email-spec/email-spec)|13|
|[spork](https://github.com/sporkrb/spork)|6|
|[ffaker](https://github.com/ffaker/ffaker)|6|
|[rspec-its](https://github.com/rspec/rspec-its)|6|


## エラートラッキング系
|gem|number_of_gems|
|:--|:-:|
|[newrelic_rpm](https://github.com/newrelic/rpm)|28|
|[airbrake](https://github.com/airbrake/airbrake)|10|
|[sentry-raven](https://github.com/getsentry/raven-ruby)|6|
|[honeybadger](https://github.com/honeybadger-io/honeybadger-ruby)|5|
|[bugsnag](https://github.com/bugsnag/bugsnag-ruby)|3|

# アプリケーションサーバー
|gem|number_of_gems|
|:--|:-:|
|unicorn|25|
|[thin](https://github.com/macournoyer/thin)|25|

# ジョブキュー処理
|gem|number_of_gems|
|:--|:-:|
|[sidekiq](https://github.com/mperham/sidekiq)|17|
|[delayed_job](https://github.com/tobi/delayed_job)|7|
|[resque](https://github.com/resque/resque)|3|

# 論理削除
|gem|number_of_gems|
|:--|:-:|
|[paranoia](https://github.com/rubysherpas/paranoia)|5|


# 開発効率促進
|gem|number_of_gems|
|:--|:-:|
|[rubocop](https://github.com/bbatsov/rubocop)|24|
|[annotate](https://github.com/ctran/annotate_models)|17|
|[bullet](https://github.com/flyerhzm/bullet)|16|
|[letter_opener](https://github.com/ryanb/letter_opener)|15|
|[rack-mini-profiler](https://github.com/MiniProfiler/rack-mini-profiler)|11|
|[brakeman](https://github.com/presidentbeef/brakeman)|8|
|[rails-erd](https://github.com/voormedia/rails-erd)|7|

全集計結果を載せております。
https://github.com/zorori777/research_gems/blob/develop/results/result_gem.md

# 最後に
Gemは知っているか、知らないかの世界です。
年を重ねれば重ねるほど、成熟し完成されるGemもあれば
新しい風を吹かす画期的なGemも今後できるかもしれません。
Gemと共に素敵なエンジニアライフを送っていきましょう！！