趣味で作っている「Annict」というRails製サービスのGemfileを晒す

[1人Webサービス開発で使っているGemfileそのまま公開 - Qiita](http://qiita.com/s3pw/items/a0c77cf3d9592e9e1bad)
完全に↑の記事の人気に乗っかろうとしています。本当にありがとうございました。
上記記事で紹介されている「[photoll](http://photoll.jp/)」というスポット写真共有サイトのはてブ数が記事公開後に大きく増えたようなので、僕のサービスでも同じことが起こるのでは…!? と目論んでいます。必死なんです!!

[Annict | アニクト - 観ているアニメをシェアしよう](http://www.annict.com)
僕が趣味で開発しているWebサービスです。アニメの視聴内容が記録できたり、感想などをTwitter/Facebookにシェアできるサービスです。
これもRailsで作っているサービスなので、そのGemfileの中身をご紹介したいと思います。


## Gemfileの内容

各gemについてはこのあと書いていきます。

```rb
source 'https://rubygems.org'

ruby '2.1.2'

gem 'rails', '4.0.5'

gem 'action_args'
gem 'activerecord-session_store'
gem 'asset_sync'
gem 'bootstrap-sass'
gem 'bourbon'
gem 'browser'
gem 'coffee-rails'
gem 'devise'
gem 'dragonfly-s3_data_store'
gem 'email_validator'
gem 'enumerize'
gem 'exception_notification'
gem 'figaro'
gem 'flutie'
gem 'font-awesome-sass'
gem 'foreigner'
gem 'jbuilder'
gem 'jquery-rails'
gem 'kaminari'
gem 'koala'
gem 'mysql2'
gem 'newrelic_rpm'
gem 'ngmin-rails'
gem 'omniauth-facebook'
gem 'omniauth-twitter'
gem 'rails-i18n'
gem 'ransack'
gem 'sass-rails'
gem 'schema_plus'
gem 'sidekiq'
gem 'slim'
gem 'twitter'
gem 'uglifier'
gem 'unicorn'

group :development, :test do
  gem 'awesome_print'
  gem 'hirb-unicode'
  gem 'hirb'
  gem 'pry-byebug'
  gem 'pry-rails'
  gem 'rails-flog', require: 'flog'
  gem 'rspec-rails'
end

group :development do
  gem 'better_errors'
  gem 'binding_of_caller' # using better_errors
  gem 'bullet'
  gem 'capistrano'
  gem 'capistrano-rails'
  gem 'capistrano-rvm'
  gem 'capistrano-sidekiq'
  gem 'capistrano-unicorn-nginx'
  gem 'meta_request'
  gem 'quiet_assets'
  gem 'spring-commands-rspec', require: false
  gem 'spring'
  gem 'thin'
end

group :test do
  gem 'capybara'
  gem 'database_rewinder'
  gem 'factory_girl_rails'
  gem 'nyan-cat-formatter'
  gem 'poltergeist'
end
```


## 各gemについて

### action_args

https://github.com/asakusarb/action_args

このプラグインを使うと、コントローラのメソッドの引数として `params` で渡されるキーを指定すると、その引数から `params` 内のデータが取得できるようになります。
…うまく説明できないのでコード貼り付けときます。

```rb
class HogeController < ApplicationController
  def fuga(piyo)
    render text: piyo
  end
end
```

もういちいち `params` とか入力しなくて済みます!


### activerecord-session_store

https://github.com/rails/activerecord-session_store

セッション情報をデータベースで管理するためのプラグインです。


### asset_sync

https://github.com/rumblelabs/asset_sync

`app/assets/` 内のファイルを、デプロイ時にAmazon S3などにアップロードしてくれるプラグインです。


### bootstrap-sass

https://github.com/twbs/bootstrap-sass

[Bootstrap](http://getbootstrap.com/) をRails + Sassな環境で良い感じに使えるようにしてくれるプラグインです。


### bourbon

https://github.com/thoughtbot/bourbon

SassのMixinがいろいろ入っているライブラリです。[Compass](http://compass-style.org/) みたいなやつです。
[thoughtbot](http://thoughtbot.com/) というアメリカにあるWeb制作会社が作っているライブラリで、個人的にこの会社が好きなのでCompassを使わずこっちを使っています。
(僕レベルの初心者だとどっちを使ってもさして変わらない)

Bourbonとは全く関係ないですが、このthoughtbotという会社が配信している [the bot cave](http://tinyletter.com/thoughtbot) というニュースレターがとてもおもしろいのでオススメです。thoughtbot社内で実験的に導入した技術、取り組みや、使うのを止めた技術などが背景も含めて紹介されています。最近配信頻度が落ちているのが残念です…。


### browser

https://github.com/fnando/browser

アクセスしてきたブラウザの情報を取得したり、ブラウザごとに見せるものを出し分けるためのヘルパーメソッドを提供してくれるプラグインです。


### coffee-rails

https://github.com/rails/coffee-rails

RailsでCoffeeScriptを良い感じに使えるようにしてくれるプラグインです。

でも最近このプラグインを使うのをやめて、[Gulp](http://gulpjs.com/) などでCoffeeScriptのソースコードをコンパイルしようかなと考えて始めています。
実験的に [bojovs/rails-gulp-browserify-vuejs-app](https://github.com/bojovs/rails-gulp-browserify-vuejs-app) というRailsアプリを作ったので、良かったら見てみてください。coffee-rails ([Sprockets](https://github.com/sstephenson/sprockets)) を止めたおかげで [Browserify](http://browserify.org/) を使って [CommonJSのModules/1.0](http://wiki.commonjs.org/wiki/Modules/1.0) の記法で書けるようになるのが熱いです。


### devise

https://github.com/plataformatec/devise

ユーザ登録の処理なんかをまとめて提供してくれるプラグインです。


### dragonfly-s3_data_store

https://github.com/markevans/dragonfly-s3_data_store

[Dragonfly](https://github.com/markevans/dragonfly) で動的に生成されるサムネイル画像の元となる画像をAmazon S3で管理するためのプラグインです。
詳しくは以前Qiitaに投稿した「[Heroku + Railsな環境で、Dragonflyを使って画像を動的にリサイズする (with Amazon S3/CloudFront) - Qiita](http://qiita.com/bojovs/items/7ab547a9eceb37793f3a)」をご覧ください。


### email_validator

https://github.com/balexand/email_validator

メールアドレスのフォーマットを検証するバリデータプラグインです。


### enumerize

https://github.com/brainspec/enumerize

職業や性別など、データベースで管理するのもあれだなあ…というデータ構造を良い感じに管理できるようにしてくれるプラグインです。
同じような機能として、Rails 4.1から [ActiveRecord::Enum](http://api.rubyonrails.org/v4.1.0/classes/ActiveRecord/Enum.html) が提供されましたが、i18nに対応していない気がしたので、Enumerizeを使い続けています。
(そもそもAnnictがRails 4.0系で動いているという背景もある)


### exception_notification

https://github.com/smartinez87/exception_notification

運用中にサーバエラー (Railsの例外) が発生したら、メールなどでその内容を送ってくれるプラグインです。


### figaro

https://github.com/laserlemon/figaro

アプリケーション内で使用する設定値を管理してくれるプラグインです。環境変数に設定値を入れてくれるので、Herokuと相性が良かったです。
(今はHerokuでは運用しておらず、[DigitalOcean](https://www.digitalocean.com/)で運用しています)


### flutie

https://github.com/thoughtbot/flutie

ページタイトルを管理するためのヘルパーや、コントローラやアクション名に対応したHTMLのclassの値を埋め込んでくれるヘルパーを提供してくれるプラグインです。
例えば `home#index` なページにアクセスしたとき、`<body class="home home-index">` というclassを付けてくれるので、CSSのコーディングが捗ります。


### font-awesome-sass

https://github.com/FortAwesome/font-awesome-sass

[Font Awesome](http://fontawesome.io/) をRailsから良い感じに使えるようにしてくれるプラグインです。


### foreigner

https://github.com/matthuhiggins/foreigner

データベースの外部キー制約を設定できるようにしてくれるプラグインです。


### jbuilder

https://github.com/rails/jbuilder

ActiveRecordのオブジェクトなどからJSONのデータ構造を定義するときに使用するプラグインです。


### jquery-rails

https://github.com/rails/jquery-rails

jQueryをRailsから良い感じに使えるようにしてくれるプラグインです。これもSprocketsを使うのやめたら使わなくなるかと思います。


### kaminari

https://github.com/amatsuda/kaminari

ページネータを簡単に実装できるようにしてくれるプラグインです。


### koala

https://github.com/arsduo/koala

FacebookのGraph APIにRubyからアクセスしやすくしてくれるプラグインです。


### mysql2

https://github.com/brianmario/mysql2

データベースはMySQLを使ってます。


### newrelic_rpm

https://github.com/newrelic/rpm

[New Relic](http://newrelic.com/) を使うためのプラグインです。


### ngmin-rails

https://github.com/jasonm/ngmin-rails

[Annict](http://www.annict.com) ではクライアントサイドのJavaScriptフレームワークに [Angular.js](https://angularjs.org/) を採用しています。

```js
angular.module('whatever').controller('MyCtrl', function ($scope, $http) { ... });
```

例えばAngular.jsを利用して書かれた上のコードは、コードをminifyするとうまく動かなくなります。
[ngmin](https://github.com/btford/ngmin) というプラグインを使うと、上記コードを

```js
angular.module('whatever').controller('MyCtrl', ['$scope', '$http', function ($scope, $http) { ... }]);
```

という感じに自動で変換し、minifyしても動くようにしてくれます。
ngmin-railsは、ngminをRailsから良い感じに使えるようにしてくれるプラグインになります。便利。

…しかし最近はAngular.jsをシンプルにした感じの [Vue.js](http://vuejs.org/) というフレームワークを使いたい欲が高まっているので、このプラグインはいずれ使わなくなるかも知れません。


### omniauth-facebook

https://github.com/mkdynamic/omniauth-facebook

[OmniAuth](https://github.com/intridea/omniauth) というOAuth認証を簡単に実装できるプラグインを使ってFacebook認証できるようにするためのプラグインです。


### omniauth-twitter

https://github.com/arunagw/omniauth-twitter

Twitter認証するためのやつです。


### rails-i18n

https://github.com/svenfuchs/rails-i18n

Railsがデフォルトで定義しているi18nの定義を各言語に翻訳しているプラグインです。


### ransack

https://github.com/activerecord-hackery/ransack

複雑なクエリを書くことなく検索機能が実装できるプラグインです。
[デモサイト](http://ransack-demo.herokuapp.com/) にあるような検索機能を、フォームに渡すパラメータ名を変えるだけで実装することができます。


### sass-rails

https://github.com/rails/sass-rails

SassをRailsで良い感じに(ry
Gulpを使い始めたらこのプラグインも使用しなくなると思います。


### schema_plus

https://github.com/lomba/schema_plus

```rb
create_table :parts do |t|
  t.string :name,         index: true
  t.string :product_code, index: { unique: true }
end
```

などと書けるようにしてくれるプラグインです。最近導入しました。
外部キー制約の設定もこのプラグインを使ってできるので、[Foreigner](https://github.com/matthuhiggins/foreigner) は使うのやめても良い気がしています。


### sidekiq

https://github.com/mperham/sidekiq

バックグラウンド処理を管理するプラグインです。


### slim

https://github.com/slim-template/slim

HTMLは[Slim](http://slim-lang.com/)の記法で書いてます。


### twitter

https://github.com/sferik/twitter

TwitterのAPIにRubyからアクセスするためのプラグインです。


### uglifier

https://github.com/lautis/uglifier

JavaScriptをminifyするためのプラグインです。


### unicorn

http://unicorn.bogomips.org/

Rackアプリケーションを動かすためのHTTPサーバです。


### awesome_print

https://github.com/michaeldv/awesome_print

`rails c` などしてRubyのオブジェクトを出力するとき、良い感じの見た目で出力してくれるプラグインです。


### hirb

https://github.com/miaout17/hirb

`rails c` などしてActiveRecordのオブジェクトを出力するとき、良い感じの見た目で出力してくれるプラグインです。


### hirb-unicode

https://github.com/miaout17/hirb-unicode

hirbをUnicodeに対応させるプラグインです。


### pry-rails

https://github.com/rweng/pry-rails

irbのすごい版である [Pry](https://github.com/pry/pry) を、Railsから良い感じに使えるようにしてくれるプラグインです。


### pry-byebug

https://github.com/deivid-rodriguez/pry-byebug

`binding.pry` したあと、ステップ実行などができるようにしてくれるプラグインです。


### rails-flog

https://github.com/pinzolo/rails-flog

`rails s` したあとに出力され続けるログの見た目を良い感じにしてくれるプラグインです。例えば、

```
# Parameters
Processing by IssuesController#create as HTML
  Parameters: {"utf8"=>"✓", "authenticity_token"=>"VYCWAsE+aAN+zSZq2H3ONNqaU8rlyfbnXLfbwDY1i10=", "issue"=>{"is_private"=>"0", "tracker_id"=>"1", "subject"=>"test ticket", "description"=>"test ticket description", "status_id"=>"1", "priority_id"=>"2", "assigned_to_id"=>"1", "parent_issue_id"=>"", "start_date"=>"2013-11-28", "due_date"=>"2013-11-29", "estimated_hours"=>"5", "done_ratio"=>"10"}, "commit"=>"Create", "project_id"=>"test"}

# SQL
  IssueCustomField Load (0.0ms)  SELECT "custom_fields".* FROM "custom_fields" WHERE "custom_fields"."type" IN ('IssueCustomField') AND (is_for_all = 't' OR id IN (SELECT DISTINCT cfp.custom_field_id FROM custom_fields_projects cfp WHERE cfp.project_id = 1)) ORDER BY custom_fields.position ASC
```

を、

```
# Parameters
Processing by IssuesController#create as HTML
  Parameters:
{
                  "utf8" => "✓",
    "authenticity_token" => "VYCWAsE+aAN+zSZq2H3ONNqaU8rlyfbnXLfbwDY1i10=",
                 "issue" => {
             "is_private" => "0",
             "tracker_id" => "1",
                "subject" => "test ticket",
            "description" => "test ticket description",
#         ----------------- 以下省略 -----------------


# SQL
  IssueCustomField Load (0.0ms)
    SELECT
        "custom_fields" . *
    FROM
        "custom_fields"
    WHERE
        "custom_fields" . "type" IN ('IssueCustomField')
        AND (
            is_for_all = 't'
            OR id IN (
                SELECT
#         ----------------- 以下省略 -----------------
```

のように出力してくれます。


### rspec-rails

https://github.com/rspec/rspec-rails

RSpec使ってます。


### better_errors

https://github.com/charliesome/better_errors

エラーページにスタックトレースが表示され、クリックすると該当のコード表示されたりと、良い感じのエラーページを表示してくれるようになります。


### binding_of_caller

https://github.com/banister/binding_of_caller

better_errorsのREPL機能を使用するために必要になるプラグインです。エラーが出たあと、該当箇所の変数の中身などがすぐに確認できるようになり、捗ります。


### bullet

https://github.com/flyerhzm/bullet

データベースの[N+1問題](https://www.google.com/search?q=n%2B1+%E5%95%8F%E9%A1%8C)を回避するためのプラグインです。N+1が起きている箇所をいろいろな方法で通知してくれます。


### capistrano, capistrano-rails, capistrano-rvm, capistrano-sidekiq, capistrano-unicorn-nginx

https://github.com/capistrano/capistrano
https://github.com/capistrano/rails
https://github.com/capistrano/rvm
https://github.com/seuros/capistrano-sidekiq
https://github.com/bruno-/capistrano-unicorn-nginx

Capistranoでデプロイしてます。


### meta_request

https://github.com/dejan/rails_panel

ChromeのDeveloper ToolsからRailsのリクエストの詳細を良い感じに見れるようにしてくれるプラグインです。リクエストの処理にかかった時間や、実行されたSQL、レンダリングされたビューファイルなどが表示されます。


### quiet_assets

https://github.com/evrone/quiet_assets

Asset Pipelineのログをコンパクトにしてくれるプラグインです。


### spring, spring-commands-rspec

https://github.com/rails/spring
https://github.com/jonleighton/spring-commands-rspec

Railsの各種コマンドを速く実行するようにしてくれるプラグインです。


### capybara

https://github.com/jnicklas/capybara

ブラウザの動きをシミュレートしてくれる受け入れテスト用フレームワークです。


### database_rewinder

https://github.com/amatsuda/database_rewinder

テスト毎にデータを消してくれるプラグインです。[Database Cleaner](https://github.com/bmabey/database_cleaner) と互換性があり、かつ、より速いらしいです。


### factory_girl_rails

https://github.com/thoughtbot/factory_girl_rails

テスト用のデータを作成してくれるツールです。


### nyan-cat-formatter

https://github.com/mattsears/nyan-cat-formatter

テスト実行時の進捗状況をかわいらしく表示してくれるプラグインです。


### poltergeist

WebKitでJavaScriptを動作させるためのCapybaraのドライバです。


## おしまい

全てご紹介したら結構なボリュームになってしまいました…。

こんな感じのgemを使って作っている [Annict](http://www.annict.com) を、どうぞよろしくお願いします。m(__)m