1人Webサービス開発で使っているGemfileそのまま公開 - Qiita
完全に↑の記事の人気に乗っかろうとしています。本当にありがとうございました。
上記記事で紹介されている「photoll」というスポット写真共有サイトのはてブ数が記事公開後に大きく増えたようなので、僕のサービスでも同じことが起こるのでは…!? と目論んでいます。必死なんです!!
Annict | アニクト - 観ているアニメをシェアしよう
僕が趣味で開発しているWebサービスです。アニメの視聴内容が記録できたり、感想などをTwitter/Facebookにシェアできるサービスです。
これもRailsで作っているサービスなので、そのGemfileの中身をご紹介したいと思います。
Gemfileの内容
各gemについてはこのあと書いていきます。
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
このプラグインを使うと、コントローラのメソッドの引数として params
で渡されるキーを指定すると、その引数から params
内のデータが取得できるようになります。
…うまく説明できないのでコード貼り付けときます。
class HogeController < ApplicationController
def fuga(piyo)
render text: piyo
end
end
もういちいち params
とか入力しなくて済みます!
activerecord-session_store
セッション情報をデータベースで管理するためのプラグインです。
asset_sync
app/assets/
内のファイルを、デプロイ時にAmazon S3などにアップロードしてくれるプラグインです。
bootstrap-sass
Bootstrap をRails + Sassな環境で良い感じに使えるようにしてくれるプラグインです。
bourbon
SassのMixinがいろいろ入っているライブラリです。Compass みたいなやつです。
thoughtbot というアメリカにあるWeb制作会社が作っているライブラリで、個人的にこの会社が好きなのでCompassを使わずこっちを使っています。
(僕レベルの初心者だとどっちを使ってもさして変わらない)
Bourbonとは全く関係ないですが、このthoughtbotという会社が配信している the bot cave というニュースレターがとてもおもしろいのでオススメです。thoughtbot社内で実験的に導入した技術、取り組みや、使うのを止めた技術などが背景も含めて紹介されています。最近配信頻度が落ちているのが残念です…。
browser
アクセスしてきたブラウザの情報を取得したり、ブラウザごとに見せるものを出し分けるためのヘルパーメソッドを提供してくれるプラグインです。
coffee-rails
RailsでCoffeeScriptを良い感じに使えるようにしてくれるプラグインです。
でも最近このプラグインを使うのをやめて、Gulp などでCoffeeScriptのソースコードをコンパイルしようかなと考えて始めています。
実験的に bojovs/rails-gulp-browserify-vuejs-app というRailsアプリを作ったので、良かったら見てみてください。coffee-rails (Sprockets) を止めたおかげで Browserify を使って CommonJSのModules/1.0 の記法で書けるようになるのが熱いです。
devise
ユーザ登録の処理なんかをまとめて提供してくれるプラグインです。
dragonfly-s3_data_store
Dragonfly で動的に生成されるサムネイル画像の元となる画像をAmazon S3で管理するためのプラグインです。
詳しくは以前Qiitaに投稿した「Heroku + Railsな環境で、Dragonflyを使って画像を動的にリサイズする (with Amazon S3/CloudFront) - Qiita」をご覧ください。
email_validator
メールアドレスのフォーマットを検証するバリデータプラグインです。
enumerize
職業や性別など、データベースで管理するのもあれだなあ…というデータ構造を良い感じに管理できるようにしてくれるプラグインです。
同じような機能として、Rails 4.1から ActiveRecord::Enum が提供されましたが、i18nに対応していない気がしたので、Enumerizeを使い続けています。
(そもそもAnnictがRails 4.0系で動いているという背景もある)
exception_notification
運用中にサーバエラー (Railsの例外) が発生したら、メールなどでその内容を送ってくれるプラグインです。
figaro
アプリケーション内で使用する設定値を管理してくれるプラグインです。環境変数に設定値を入れてくれるので、Herokuと相性が良かったです。
(今はHerokuでは運用しておらず、DigitalOceanで運用しています)
flutie
ページタイトルを管理するためのヘルパーや、コントローラやアクション名に対応したHTMLのclassの値を埋め込んでくれるヘルパーを提供してくれるプラグインです。
例えば home#index
なページにアクセスしたとき、<body class="home home-index">
というclassを付けてくれるので、CSSのコーディングが捗ります。
font-awesome-sass
Font Awesome をRailsから良い感じに使えるようにしてくれるプラグインです。
foreigner
データベースの外部キー制約を設定できるようにしてくれるプラグインです。
jbuilder
ActiveRecordのオブジェクトなどからJSONのデータ構造を定義するときに使用するプラグインです。
jquery-rails
jQueryをRailsから良い感じに使えるようにしてくれるプラグインです。これもSprocketsを使うのやめたら使わなくなるかと思います。
kaminari
ページネータを簡単に実装できるようにしてくれるプラグインです。
koala
FacebookのGraph APIにRubyからアクセスしやすくしてくれるプラグインです。
mysql2
データベースはMySQLを使ってます。
newrelic_rpm
New Relic を使うためのプラグインです。
ngmin-rails
Annict ではクライアントサイドのJavaScriptフレームワークに Angular.js を採用しています。
angular.module('whatever').controller('MyCtrl', function ($scope, $http) { ... });
例えばAngular.jsを利用して書かれた上のコードは、コードをminifyするとうまく動かなくなります。
ngmin というプラグインを使うと、上記コードを
angular.module('whatever').controller('MyCtrl', ['$scope', '$http', function ($scope, $http) { ... }]);
という感じに自動で変換し、minifyしても動くようにしてくれます。
ngmin-railsは、ngminをRailsから良い感じに使えるようにしてくれるプラグインになります。便利。
…しかし最近はAngular.jsをシンプルにした感じの Vue.js というフレームワークを使いたい欲が高まっているので、このプラグインはいずれ使わなくなるかも知れません。
omniauth-facebook
OmniAuth というOAuth認証を簡単に実装できるプラグインを使ってFacebook認証できるようにするためのプラグインです。
omniauth-twitter
Twitter認証するためのやつです。
rails-i18n
Railsがデフォルトで定義しているi18nの定義を各言語に翻訳しているプラグインです。
ransack
複雑なクエリを書くことなく検索機能が実装できるプラグインです。
デモサイト にあるような検索機能を、フォームに渡すパラメータ名を変えるだけで実装することができます。
sass-rails
SassをRailsで良い感じに(ry
Gulpを使い始めたらこのプラグインも使用しなくなると思います。
schema_plus
create_table :parts do |t|
t.string :name, index: true
t.string :product_code, index: { unique: true }
end
などと書けるようにしてくれるプラグインです。最近導入しました。
外部キー制約の設定もこのプラグインを使ってできるので、Foreigner は使うのやめても良い気がしています。
sidekiq
バックグラウンド処理を管理するプラグインです。
slim
HTMLはSlimの記法で書いてます。
TwitterのAPIにRubyからアクセスするためのプラグインです。
uglifier
JavaScriptをminifyするためのプラグインです。
unicorn
Rackアプリケーションを動かすためのHTTPサーバです。
awesome_print
rails c
などしてRubyのオブジェクトを出力するとき、良い感じの見た目で出力してくれるプラグインです。
hirb
rails c
などしてActiveRecordのオブジェクトを出力するとき、良い感じの見た目で出力してくれるプラグインです。
hirb-unicode
hirbをUnicodeに対応させるプラグインです。
pry-rails
irbのすごい版である Pry を、Railsから良い感じに使えるようにしてくれるプラグインです。
pry-byebug
binding.pry
したあと、ステップ実行などができるようにしてくれるプラグインです。
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
RSpec使ってます。
better_errors
エラーページにスタックトレースが表示され、クリックすると該当のコード表示されたりと、良い感じのエラーページを表示してくれるようになります。
binding_of_caller
better_errorsのREPL機能を使用するために必要になるプラグインです。エラーが出たあと、該当箇所の変数の中身などがすぐに確認できるようになり、捗ります。
bullet
データベースのN+1問題を回避するためのプラグインです。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
ChromeのDeveloper ToolsからRailsのリクエストの詳細を良い感じに見れるようにしてくれるプラグインです。リクエストの処理にかかった時間や、実行されたSQL、レンダリングされたビューファイルなどが表示されます。
quiet_assets
Asset Pipelineのログをコンパクトにしてくれるプラグインです。
spring, spring-commands-rspec
https://github.com/rails/spring
https://github.com/jonleighton/spring-commands-rspec
Railsの各種コマンドを速く実行するようにしてくれるプラグインです。
capybara
ブラウザの動きをシミュレートしてくれる受け入れテスト用フレームワークです。
database_rewinder
テスト毎にデータを消してくれるプラグインです。Database Cleaner と互換性があり、かつ、より速いらしいです。
factory_girl_rails
テスト用のデータを作成してくれるツールです。
nyan-cat-formatter
テスト実行時の進捗状況をかわいらしく表示してくれるプラグインです。
poltergeist
WebKitでJavaScriptを動作させるためのCapybaraのドライバです。
おしまい
全てご紹介したら結構なボリュームになってしまいました…。
こんな感じのgemを使って作っている Annict を、どうぞよろしくお願いします。m(__)m