プロジェクトで使っている９４つのGemを調べてみた

![スクリーンショット 2019-05-06 8.26.16.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/291516/74d249b4-82b7-b8bb-2567-a0dd7a26cdfc.png)

プログラミングスクールのときは31つのGemを使っていましたが、3ヶ月前に働き出した会社のプロジェクトでは94つもありました。未だに分からないGemが多いため１つ１つ調べていくことにしました。

五月雨式で書いていくので、見づらいかと思いますがご了承ください。

# 94つのGem

- **rails**

Ruby on Rails自体がGem

- **sass-rails**

railsでsassが使えるようになる

【参考記事】[Sass + Railsの基礎]
(https://qiita.com/masarufuruya/items/d6125332cc3394b5177c)

- **uglifier**

UglifyJS2というJavaScriptのコード軽量化ライブラリを、Rubyで簡単に使えるようになる

- **bootsnap**

railsの起動時間を短縮してくれる

【参考記事】[bootsnapについて調べてみた](https://qiita.com/Daniel_Nakano/items/aadeaa7ae4e227b73878)

- **puma**

スピードと並列性を追求したRubyのWebサーバー

【参考記事】[RackサーバーのPumaについて調べてみる]
(http://arakaji.hatenablog.com/entry/2015/08/03/200502)

- **browserify-rails**

Node.jsのモジュールシステムをブラウザでも利用できるようになる

- **jquery-ui-rails**

railsにjQuery-uiを使えるようになる

- **mysql2**

RubyからMySQLへ接続できるようにする

- **byebug**

プログラムを途中で止めることができる。そのままコンソールを使える。

【参考記事】[Ruby on Rails初心者必見。Railsでのデバッグの味方byebug（バイバグ）。]
(https://web-nari.net/2018/03/16/byebug/)

- **rails-controller-testing**

コントローラーにテストを書くことができる

- **rubocop**

コードスタイルを統一できる

【参考記事】[cookpadのスタイルガイド]
(https://github.com/cookpad/styleguide/blob/master/ruby.ja.md)

- **slim_lint**

「Slim template」のLintツール

【参考記事】[Slim-Lint を使ってみる]
(https://kasaharu.hatenablog.com/entry/20171125/1511568646)

- **timecop**

日付、時間のテストができるようになる

【参考記事】[RailsでTimecopを使って日付/時間のテストをする]
(https://ruby-rails.hatenadiary.com/entry/20141218/1418901424)

- **guard**

テストを自動化する

【参考記事】[Guardによるテストの自動化]
(https://railstutorial.jp/chapters/static-pages?version=4.0#sec-guard)

- **minitest-ar-assertions/minitest-power_assert/minitest-stub_any_instance**

minitestをより使いやすくするためのGem

【参考記事】[minitestのオススメ基本設定調べてみた]
(https://qiita.com/baban/items/88e18a784eaf39efb6e0)

- **better_errors**

エラー画面を見やすくしてくれる。変数の中身も表示してくれる

【参考記事】[Railsのデバッグが捗るエラー画面Better Errors使ってみた！　]
(https://morizyun.github.io/blog/better-error-gem-rails-ruby-rack/index.html)

- **binding_of_caller**

メソッド呼び出し元のbindingでevalすることができる。
(よく分からなかったので、今度しっかり調べる)

【参考記事】[【黒魔術】binding_of_caller gem でメソッド呼び出し元の binding を手に入れる]
(https://pocke.hatenablog.com/entry/2014/04/17/092227)

- **bullet**

繰り返しのある記述（N+１問題）を検出してくれる

- **listen**

ファイルの変更を検知してそれをフックに何か処理ができる

- **rack-dev-mark**

開発環境と本番環境でのご操作を防ぐ対策になる

【参考記事】[Rack_dev_markで開発環境と本番環境を視覚で判断しよう]
(https://konyu.hatenablog.com/entry/2014/11/12/225705)

- **rack-mini-profiler**

パフォーマンスをブラウザに表示する

【参考記事】[ページのロードにかかった時間が表示されます。]
(https://morizyun.github.io/ruby/library-rack-mini-profiler.html)

- **spring**

アプリケーションの動作を早くする

- **spring-watcher-listen**

springのファイルシステムの変更検知方法をpollingからlistenに変更してくれる


- **devise-i18n-views**

【参考記事】[i18n：deviseを日本語表記にする。]
(https://qiita.com/ryuuuuuuuuuu/items/48dec280cf8925968c65)

- **easy_translate**

google翻訳が使える

- **i18n-debug**

i18n で参照しているパスを調べてくれる

【参考記事】[i18n-debug の基本的な使い方]
(https://qiita.com/myt732/items/788f38fe0b5218b731b0)

- **i18n-tasks**

ロケールファイルで不足している翻訳や未使用の翻訳を検出してくれる

【参考記事】[i18n-tasks | Rails のロケールファイルを整理整頓する]
(https://qiita.com/fakestarbaby/items/d9ad517fe674059041cd)

- **i18n_generators**

日本語化を助ける

【参考記事】[i18n_generators で Rails アプリを日本語化]
(https://easyramble.com/i18n-with-i18n-generators.html)

- **brakeman**

開発中の静的セキュリティチェック

- **bundler-audit**

gemのセキュリティ情報のチェック

- **html2slim**

erbファイルをSlimに一括変換する

- **license_finder**

パッケージのライセンスを出力する

【参考記事】[プロジェクトで使用しているパッケージのライセンスを出力する]
(https://qiita.com/mtsuge/items/9e08ff2570effcf6d47c)

- **rails_best_practices**

railsアプリのコードの質をチェックするメトリクスツール

【参考記事】[Ruby on Railsのコードをよりモダンにするために、Rails Best Practices入門・おすすめ設定]
(https://blog-ja.sideci.com/entry/2015/04/16/175508)

- **stackprof**

プログラムが実行された際、どの部分のコードの実行にどれだけの時間がかかったのかを計測してくれる

【参考記事】[StackProfを使ってrubyプログラムのプロファイリングをする方法]
(https://qiita.com/shunsakai/items/28182914389a156199cd)

- **swagger_ui_engine**

Swagger-UIをMountable Engineとして使える。
(よく分からなかったので、今度しっかり調べる)

【参考記事】[Swagger+JSON SchemaでAPIの型をテストして開発サイクルをスピードアップさせた話]
(https://inside.pixiv.blog/edvakf/2473)

- **daemons**

rubyスクリプトをデーモン化し、外部からコントロール(start, stop等)できるようにする。

【参考記事】[BestGems Pickup! 第6回 ]
(https://www.xmisao.com/2013/09/28/bestgems-pickup-daemons.html)

- **delayed_job/delayed_job_active_record**

バックグラウンドで非同期処理をしてくれる

【参考記事】[delayed_jobの機能についてもうちょっと]
(https://qiita.com/nichenri1995/items/d66b055b09398483fa5b)

【参考記事】[RailsでAcitiveJobとDelayedJobを使ってバックグランド処理を行う]
(https://ruby-rails.hatenadiary.com/entry/20150304/1425396671)

- **delayed_job_web**

遅延ジョブを監視する

- **letter_opener_web**

送信メールがWebインタフェースで確認できる

【参考記事】[【Rails】letter_opener_webを利用してメールを確認する]
(http://miniichigo.hatenablog.com/entry/2016/05/26/211923)


- **rails_db**

GUIでDB内容が見れる

- **activerecord-session_store**

データベースにセッションを保管する

- **devise**

ログイン機能の実装を簡単にしてくれる

【参考記事】[【Rails】deviseを導入してみる]
(https://qiita.com/Hal_mai/items/350c400e8763ce0487a3)

- **devise-encryptable**

(よく分からなかったので、今度しっかり調べる)

【参考記事】[Rails4: 古いdeviseのパスワードを新しいdeviseで使う方法]
(https://techracho.bpsinc.jp/kazumasa-ogawa/2016_08_25/25078)

- **pundit**

認可まわりの機能を作成する

【参考記事】[Punditを使って権限を管理する]
(https://qiita.com/senou/items/e28ff548e93ad0eeed3f)

- **grape/grape-entity/grape-swagger/grape-swagger-entity**

Restful な WEB-API が簡単に作成できる

【参考記事】[Rails5でGrapeを使って簡単にAPIを実装する]
(ttps://qiita.com/hkusu/items/2ca0323cc276ab31e926)


- **aasm**

状態遷移の機能を簡単に付けることができる機能

【参考記事】[aasm を使って，Ruby のクラスに状態遷移の機能を付与する]
(https://www.kunihikokaneko.com/cc/ruby/rubyaasm.html)

- **activerecord-import**

まとめてINSERTできる。

【参考記事】[(初心者向け)activerecord-importの使い方]
(https://qiita.com/makicamel/items/b6d4f3d2661fc66103ed)

- **activerecord-userstamp**

ユーザがモデルに対して作成、更新、削除した情報を持たせることができる

- **acts_as_list**

モデルの並び順の維持や、並びの変更を行う

- **by_star**

日付分析関連の便利scope群

- **draper**

第4のレイヤを提供するGem

【参考記事】[Draperで驚くほどRailsコードがわかりや少なったよ！]
(https://morizyun.github.io/blog/draper-ruby-gem-code-clear/index.html)

- **enum_help**

enumをI18n化する

【参考記事】[【Rails】enumをI18n対応させるenum_helpが便利すぎた]
(https://kimuraysp.hatenablog.com/entry/2016/05/19/233144)

- **paper_trail/paper_trail-association_tracking**

監査、またはバージョン管理のためにモデルの変更を追跡するツール

- **paranoia**

論理削除を実装できる

- **validates_timeliness**

動く日付時刻用のvalidates


- **cells/cells-rails/cells-slim**

ビューの一部を切り離し、Rubyの通常のクラスとしてコンポーネント化する

【参考記事】[Railsコードを改善する7つの素敵なGem]
(https://techracho.bpsinc.jp/hachi8833/2017_10_25/47160)

- **cocoon**

1対多で関連するデータを1つのフォーム画面に記述できる

【参考記事】[nested_form はもう古い！？ Cocoon で作る1対多のフォーム]
(https://qiita.com/Matsushin/items/4829e12da2834d6e386e)

- **data-confirm-modal**

削除確認ダイアログを出してくれる

[Data-Confirm Modalを使って Rails の削除確認ダイアログをいい感じにする]
(https://fiveteesixone.lackland.io/2015/02/06/rails-nice-delete-verification-modal/)

- **font-awesome-rails**

FontAwesomeのアイコンを使えるようになる

【参考記事】[Font Awesome Lcons]
(https://fontawesome.com/v4.7.0/icons/)

- **icalendar**

icalendarがrailsで使えるようになる

- **kaminari**

ページネーション機能が使える

railsチュートリアルで使われているgem「will_paginate」と同じような用途

【参考記事】[railsチュートリアル 9章]
(https://railstutorial.jp/chapters/updating_and_deleting_users?version=4.2#sec-pagination)

- **ransack**

検索機能
 
【参考記事】[Ransackのススメ]
(https://qiita.com/nysalor/items/9a95d91f2b97a08b96b0)

- **redcarpet**

マークダウンを実装できる

【参考記事】[Railsのプロジェクトにgem 'redcarpet' を用いてマークダウンエディタを導入してみた]
(https://qiita.com/yuuuking/items/3f88454e164a5f7d4733)

- **simple_form**

formの記述を簡単な形に、少なくできる

【参考記事】[Railsのform_for内のコードをすっきりさせるsimple_formの使い方]
(https://ruby-rails.hatenadiary.com/entry/20140730/1406700205)

- **slim/slim-rails**

HTMLのViewをSlim形式で書くことができる。コード量が少ない

【参考記事】[Slim入門をして書き方を練習をしました]
(https://qiita.com/pugiemonn/items/b64171952d958dc4d6be)


- **config**

開発環境ごとに定数を YAML ファイルで管理できる

【参考記事】[Railsで定数を環境ごとに管理するrails_config（現 config）]
(https://qiita.com/yumiyon/items/32c6afb5e2e5b7ff369e)

- **dotenv-rails**

カレントディレクトリに .env という名前で環境変数を書き込んでおくと、自動的にENVの中にその値を追加してくれる

【参考記事】[環境によって変わる設定値はdotenvを使うと便利]
(https://qiita.com/closer/items/f8d8ba00ae86d7051764)

- **seedbank**

seeds.rbを分割し、ファイルの肥大化を防いでくれる

- **business_time**

Dateに対していろいろなmethodが使えるようになる。

【参考記事】[[ruby] 祝日判断や休日判断をrubyでやるなら、これでいいんじゃないかな - メモ]
(https://qiita.com/ryoff/items/02b00ffc121037c25e16)

- **geoip**

特定のホストまたはIPアドレスを検索し、そのIPアドレスが割り当てられている国などの情報を返してくれる

- **gon**

controller内でセットした変数をJavascript内で使う事ができる。

- **hashie**

Hashをより良くしてくれる

【参考記事】[Hash をよりパワフルにする hashie gem を試す #ruby]
(https://qiita.com/tbpgr/items/be8c824f74f8587bdae2)

- **responders**

respond_withとrespond_toが使える

【参考記事】[respond_withとクラスレベルのrespond_toの扱いについて]
(https://railsguides.jp/4_2_release_notes.html#respond-with%E3%81%A8%E3%82%AF%E3%83%A9%E3%82%B9%E3%83%AC%E3%83%99%E3%83%AB%E3%81%AErespond-to%E3%81%AE%E6%89%B1%E3%81%84%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6)

- **whenever**

cronのバッチを作成して、定期的に回すことができる。

【参考記事】[Railsで定期的にバッチ回す「Whenever」]
(https://qiita.com/yumiyon/items/388fbb84450f49a6ab0d)

- **aws-sdk-rails**

s3に画像ファイルをフォームからアップロードできる

【参考記事】[railsのaws-sdk gemを使ってs3に画像ファイルをフォームからアップロードする]
(https://joppot.info/2014/06/13/1583)

- **ridgepole**

スキーマ管理用のコマンドラインツール

【参考記事】[Rails マイグレーションの廃止とRidgepoleの導入・利用方法]
(https://qiita.com/ayies128/items/c84db2ea41210eae0577)

- **aws-sdk**

利用可能なすべてのAWSサービスのgemサポートが含まれている。（S3やEC2など）

- **rack-attack**

同一IPからの過剰なアクセスを制限できる

- **sentry-raven**

エラーログ収集に使うツール

【参考記事】[RailsアプリケーションにSentryを導入する]
(https://qiita.com/mikaji/items/74fac3be5e1235e0b762)

- **whiny_validation** 

Validation Errorをログ出力

- **derailed_benchmarks**

RailsアプリやRubyアプリのさまざまなベンチマークを取ることができる。

【参考記事】[Rails: 多機能ベンチマークgem「derailed_benchmarks」README（翻訳）]
(https://techracho.bpsinc.jp/hachi8833/2018_03_29/51875)

- **memory_profiler**

Railsアプリで文字列ががっつり重複を取り除いてくれる

【参考記事】[Rails: memory_profilerでRuby文字列の重複を削減する（翻訳）]
(https://techracho.bpsinc.jp/hachi8833/2019_02_07/62022)

#最後に一言

何か間違っている点があれば、教えて頂けたら幸いです。
よろしくお願い致します。