うちのRailsプロジェクトでよく使ってるgem(ライブラリ)を紹介します。

紹介します。

# Railsのコア部分とか。

### gem 'rails'

WAFと呼ばれる何か。Rubyのキラーフレームワーク。

デフォルトのメッセージとかの多言語化は、gem 'rails-i18n' をどうぞ

### gem 'mysql2'

DBつなぎにいくマン。
MySQL自体はOracleに買収されちゃったので、Postgresqlに戻ってもいい気がしてる。

### gem 'unicorn'

本物のサーバーの上でRailsを動かすためのやつ。
unicornとかpumaとかpassengerとかthinとかありますねー。
今はどれがいいんだろう。


# Model系のgem

### gem 'default_value_for'

デフォルト値の設定用。
before_validationとかで入れればいいんだろうけど、これ使ったほうが宣言的なので好み。

### gem 'enumerize'

RailsにEnumが入ったんだけどあちらは実データが数値。
こっちはStringなので、容量を気にしなければ、こちらはDB単体でReadableだと思う。

### gem 'paperclip'

`<input type="file" name="hogehoge" />`
なフィールドを受け取って保存できるような感じで、ファイルをいい感じに扱ってくれる。
僕はつかったことがないけど、競合のcarrierwaveよりも設定が少なそうなイメージ。

### gem 'sequenced'

連番ふってくれるマン…なのだが、挙動がイマイチ。
歯抜けを埋める、とかはやってくれない。(そんなことをするのは結構高コストなのであれなんだけど。)
でもまあ、createするときとかはまあちゃんと使えるイメージ。

### gem 'tod'

Railsには、DateTimeもTimeもDateもあるのに、日付情報ナシの「時刻」そのものを表すクラスがない。
MySQLにはTime型あるのにね。
ってことで、Time of Dayを表すライブラリ。

# JSとCSS
### gem 'coffee-rails'

カッコ嫌いな人のためのインデント志向のAltJS。Rubyっぽく書けるっていうけど、好み分かれる。

### gem 'haml-rails'

カッコ嫌いな人のためのインデントの志向HTMLテンプレートエンジン。
競合のslimは使ったことない。


### gem 'sass-rails' と gem 'compass-rails'

カッコ嫌いな人のためのインデント志向のAlt-CSS的なやつ。
mixinとかextendとかを使いこなしたらすごそう。

compassはvendor-prefixとかを自動でつけてくれたりするsassライブラリ。(-webkit-とか)

### gem "font-awesome-rails"

なんかいい感じのアイコンセット。ユーザーのマークとか、並び替えのマークとかいろいろ。
view helperも用意されてるのでさらに便利。

### gem 'jquery-rails'

今どきDOMいじるなら必須！！

### gem 'jquery-colorbox-rails'

グワーって出てくるカッコイイダイアログみたいなやつ。z-indexの調整に苦労する。

### gem 'jquery-timepicker-rails'

日付とか、時間選ぶやつならコレ。date側とtime側、どっちも別々に使用できる。


### gem 'momentjs-rails'

JSネイティブの時刻系クラスに罠があるので、みんなこういうの使ってます。

### gem "select2-rails"

いい感じの見た目の、検索機能つきの`<select>`要素代替ライブラリ。
z-indexで困ることもあるけど、頑張るしか。


# viewとか

### gem 'active-admin'

いわゆる「管理画面」みたいなやつを、DSLで組めるやつ。
そのDSLがかなあーり厄介で、あんまりおすすめはしない。見た目のカスタマイズも難しい。

でも、とにもかくにも拙速を尊ぶときには、味方になってくれると思います。

### gem 'breadcrumbs_on_rails'
ぱんくずリスト作るマン。

add_breadcrumb を呼んだ順にパン屑が構成される。
コントローラーのclassべた書きしてスタティックに決めるもよし、
before_actionか、actionに直接書くかで、ダイナミックに決めるもよし。
表示のカスタマイズは、カスタマイズ用クラスを自分で書かなきゃいけないので、ちょっと面倒。
kaminariみたいにテンプレート用意してくれたらいいのにね。

### gem 'nested_form'

Railsのfields_forをちょっとだけ動的にしてくれるやつ。
has_manyな関係を同時に保存できるようになるので、割とおすすめ。
頑張ればtable化したformにも使える。

### gem 'kaminari'

ページネーションをいい感じにしてくれるやつ。


# なんかいろいろ便利なの

### gem 'axlsx' / gem 'roo'

Excel書くマンと、Excel読むマン。
何故か別々である。
どちらも結構古くなってきちゃっていて、zip系ライブラリの互換性とかで悩むかもしれない…。

新しく`gem 'rubyXL'`っていうのもできたんだけど、読めるけど、開くとWarningが出るファイルができてしまったりして、まだ互換性に難がありそうだった。難しいものだ。

### gem 'devise'

ユーザーのログイン認証やるやつ。
コントローラーからViewから、ほぼ全部面倒見てくれる。
その分、カスタマイズするときも情報をいろいろ調べなくて大変だけど、だいぶ知見たまったので何とかなってる。

エラーメッセージの日本語化する、gem 'devise-i18n' とかも一緒にどうぞ。

deviseとは直接関係ないけど、SNS認証なんかを追加する、

- gem 'omniauth-github'
- gem 'omniauth-google-oauth2'
- gem 'omniauth-twitter'
- gem 'omniauth-facebook'

あたりも、一緒に使うことがありますな。



### gem 'ransack'

テーブル表示系の画面に検索フォームつけるのに便利なヤツ。
DBカラム名でのソートもできる。
検索フィールド名から、検索対象カラムを頑張って認識して検索してくれるヤツ。
`:name_cont` だったら、nameカラムがキーワードを含む、って意味になる。
クエリに関するカスタマイズ性もあるけど、あんまり頑張りすぎるぐらいなら自分でscope書いたほうがいい気も。

### gem 'rubyzip'

zipで圧縮 / 展開するマン。
バッチやら、DLさせるときやら、zipファイルを扱うときに。

### gem 'whenever'

CRONの記述をDSL風にかけるやつ。


# テストツールとか

### gem 'rspec-rails'

はい、rspecです。
「英語っぽくテスト書けば、テストが仕様書になるじゃん！って夢を追いつつ、現実問題、英語力のなさに打ちひしがれる」こと請け合い。
まあ、自動テストはちゃんと運用すれば、自分の書いたコードに自信ができるし、どんな実装したっけ～～みたいなのも思い出しやすくなる。
ちゃんと、運用すればなぁ…

spring併用なら、rspecもspringのキャッシュに乗せる gem 'spring-commands-rspec' も忘れずに。


### gem 'factory_girl_rails'

テストデータをDSLで定義してくれるやつ。
associationを多く持つデータを正しく定義しようとすると、かなり難しい。
でもまあ、そういうパターンが必要な時はたいていModelが密結合しすぎ。

自動テストだけじゃなく、開発中のちょっとした検証にも、一発でそれっぽいレコード作成。
それっぽさを追求しすぎると、つらい。

### gem 'timecop'

日付やら時間やらに関係するテストを書くときに、いつも困ってたんだけど、
Timecop.freezeで、指定の時間で時を止めたり(あくまでTime系クラスの返すメソッドの返り値を固定するだけだが)してくれるので、
とてもテストが書きやすくなります。


# 開発するときに便利なの。

### gem 'awesome_print'
rails console で見た目をわかりやすくしてくれる。デバッグのお供に。
要は`Object#inspect`をオーバーライドしてくれてるんだと思う。


### gem 'pry-rails'
rails consoleをirbからpryに変えるやつ。
pryはオブジェクトの「中」にはいって、メソッドを一覧したり、定義ファイルをlessしたりしてくれるので、デバッグのお供に。

### gem 'pry-byebug'

`binding.pry`と書くと、そこからステップ実行できる。
サーバープロセス側にプロンプトが出るので、ローカル環境以外では使っちゃだめだよ。

### gem 'letter_opener'

ActionMailerのメールを、その場でブラウザで開いてくれる。メール系機能のデバッグに。

ブラウザじゃなくて、専用管理画面で見せてくれる、gem 'letter_opener_web'も、状況に応じて使うといい。


### ~~gem 'quiet_assets'~~

~~デバッグの時に、assets/へのアクセスのログが出ると、欲しい情報がダーって流れて行っちゃって困るので、assets/へのログを黙らせるやつ。~~

Sprocket 3.1 から、設定項目で可能になったので、不要になりました。
(`config.assets.quiet = true`)


### gem 'spring'

bin/* 系のコマンドとかを高速化するやつ。
クラスのロード状態をキャッシュするので、コードの変更に追従しきれずに予期せぬ挙動を見せることもあるけど、トレードオフと割り切って使っている。

### gem 'haml_lint', require: false

名前の通り、HAMLのlint。コードチェッカー/フォーマッターはちゃんと運用するとストレスが減ります。

###  gem 'rubocop', require: false

Rubyのlint / オートフォーマッター。
-a の、オートフォーマットオプションが強力で、テキトーに書いたRubyコードをいい感じにフォーマットしてくれます。
ちゃんと運用するとストレスが減ります。

### gem 'capistrano-rails'

デプロイツール。
サーバーが複数台構成でも、コマンド一発で全サーバーに向けて展開してくれる。
酒飲んだ状態でもデプロイできるってすごいよね。(決してマネしないでください)

以下、プラグイン

- gem 'capistrano-rbenv'
- gem 'capistrano-bundler'
- gem 'capistrano3-unicorn'

capstrano-unicorn-nginxとかもあった気がするけど、結局手で設定書き換えてしまったりもするから、やめてしまった。


以上！