最近個人的に作った写真共有サイトを公開しました。
この写真共有サイトで実際に使っているおすすめGemを晒してみます。
あと、おまけで使ってないけど便利そうなGemとかも紹介。
一人で1からWebサービスを作る過程を書いた拙作のブログエントリもよかったら見てください。
【1人でWebサービス開発】新米Railsエンジニアが無謀にも写真共有サイトを作りました
だいぶ長いですが、Gemfileをそのまんま載せました。簡易説明付き。
主要なGemをあとで説明します。
source 'https://rubygems.org'
gem 'rails'
gem 'mysql2'
gem 'haml-rails' # HTMLを簡潔に書ける
gem 'sass-rails' # CSSを効率的に書ける
gem 'bootstrap-sass' # Twitter Bootstrapが使える
gem 'compass-rails' # Sassの機能拡張
gem 'uglifier' # JavaScriptの圧縮
gem 'coffee-rails' # JavaScriptを簡潔に書ける
gem 'jquery-rails' # jQueryが使える
# Authentication
gem 'omniauth' # 外部アカウントでログインできる
gem 'omniauth-twitter' # Omniauthを使ってTwitterログインできる
gem 'omniauth-facebook' # Omniauthを使ってFacebookログインできる
# Uploader
gem 'carrierwave' # 画像アップローダ
gem 'mini_magick' # CarrierWaveでリサイズなどができるようになる
gem 'fog' # CarrierWaveでAmazon S3に保存できるようになる
gem 'jbuilder' # JSONレスポンスを効率的に書ける
gem 'draper' # Presenterレイヤーを追加して、ビューを効率的に書ける
gem 'acts-as-taggable-on' # タグ機能を実装できる
gem 'kaminari' # ページャ
gem 'rails_autolink' # URLの自動リンク化
gem 'rails_config' # 定数管理
gem 'dotenv-rails' # 環境変数管理
gem 'sitemap_generator' # サイトマップ生成
gem 'whenever', :require => false # cronを登録できる
gem 'exception_notification' # エラーが発生したらメールを送ってくれる
gem 'newrelic_rpm' # パフォーマンス監視サービスを利用できる
group :development do
gem 'thin' # 開発用サーバ
gem 'rails-erd' # モデルのER図をPDFで出力してくれる
gem 'spring' # RspecなどでRailsをプリロードする
gem 'rails_best_practices' # Railsのベストプラクティスを教えてくれる
gem 'annotate', git: 'git://github.com/ctran/annotate_models.git' # テーブル情報をモデルファイルに追記してくれる
gem 'capistrano' # デプロイツール
gem 'bullet' # 余計なSQLを検出できる
# gem 'guard' # ファイルの変更を監視して作業を自動化 ※bundlerを使わないほうがいいためコメントアウト
gem 'guard-rspec' # ファイルが変更されたらRsepcを自動実行
gem 'guard-livereload' # ファイルが変更されたらページを自動リロード
gem 'quiet_assets' # アセットログの抑制
# debug
gem 'better_errors' # エラー画面を見やすくする
gem 'binding_of_caller' # better_errorsのエラー画面でREPLが使える
gem 'tapp' # プリントデバッグがしやすくなる
gem 'pry-rails' # railsでpryが使える
gem 'pry-byebug' # pryでデバックコマンドが使える
gem 'awesome_print' # プリントデバッグの出力を整形
gem 'hirb' # SQLの結果を見やすく整形してくれる
gem 'hirb-unicode' # hirbの日本語対応
end
group :test do
gem 'rspec' # テストツール
gem 'rspec-rails' # RailsでRspecが使える
gem 'factory_girl_rails' # テストデータの生成
gem 'database_cleaner' # テスト実行後にDBをクリア
gem 'capybara' # ブラウザでの操作をシミュレートしてテストができる
end
#== pending ====
# gem 'unicorn' # HTTPサーバ
# gem 'powder' # 開発用サーバ
# gem 'pry-remote' # powでデバッグできるようになる
omniauth
外部アカウントにOauthで認証してくれます。
対応している外部アカウントは以下のページに書いてあるのですが、めっちゃあります。
List of Strategies · intridea/omniauth Wiki
ただこのGemがやってくれるのは認証までなので、新規ユーザの作成やログイン状態の管理などは自分で実装する必要があります。
一通りの認証機能を実装したい場合はDeviseを使うといいかな。
OmniAuthで認証機能を作る - RuntimeError
carrierwave
画像アップローダ。
同じものだとpaperclipも有名。
複数のサイズの画像を作れたり、S3にアップロードするのも簡単です。
これで便利なのが、画像のURLを指定すると保存できる機能があるので、Omniauthで取得したユーザのプロフィール画像を簡単に保存できます。
Rails 超お手軽な画像アップローダー CarrierWave の使い方 | Workabroad.jp
acts-as-taggable-on
タグ機能を実装できます。
タグ機能を自分で実装しようとしていたけど、相当めんどくさくて、これを使ったらすぐに実装できました。
これを使うときは、jQuery Tag-it!を一緒に使うのがオススメです。
jQueryのタグの入力支援プラグインなのですが、ActsAsTaggableOnとのシームレスな連携に感動しました。
newrelic_rpm
Application Performance Management & Monitoring | New Relic
全然まだ使っていないですが、ちょー便利だとちまたで噂のモニタリングサービスです。
パフォーマンスやリソースなどの情報をNew Relicのウェブサイトから見れて、無料でも使えます。
これが活躍するほどのサービスにしたいなー
Rails + New Relic ならレスポンスタイム等のパフォーマンス監視が簡単にできるよ - 彼女からは、おいちゃんと呼ばれています
rails-erd
Rails ERD – Entity-Relationship Diagrams for Rails
モデルのER図をPDFで出力してくれます。
開発し始めの頃とかはモデルの関係があやふやなので役に立ちます。
Rails ERDを試してみた - rochefort's blog
rails_best_practices
Rails Best Practices | rails best practices list
このサイトで紹介されているRailsのベストプラクティスに則っているか自動でチェックしてくれます。
今回は勉強も含めてWebサービスを作ったので、いろいろ参考になります。
capistrano
Railsのデファクトスタンダードのデプロイツール。
僕の所感はなんかクセのあるツールだと思いますが、いつの間にかデプロイが終わってると感じるぐらいに簡単にデプロイできます。
ただバージョン2と3で大幅な変更がされて、古いドキュメントが多々あるので注意してください。
bullet
Railsで起きがちな「N+1 問題」を検出してくれます。
これも新米Railsエンジニアには助かります。
» Railsライブラリ紹介: N+1問題を検出する「bullet」 TECHSCORE BLOG
guard
ファイルの変更を監視して、登録しておいた動作を実行できます。
私はRspecの自動実行と、LiveReloadを使ってます。
LiveReloadいいですよー
Guardでファイル変更を監視して作業を自動化する - Tech-Sketch
better_errors
エラー画面がめっちゃリッチになります。
デフォルトのエラー画面はかなり質素なのですが、それがすごい見やすくなり、binding_of_caller
を入れるとREPLも使えます。
Railsならbetter_errorsを入れるとデバッグがはかどるなぁ - (゚∀゚)o彡 sasata299's blog
pry-rails
Railsでpryが使えます。
binding.pry
でブレークポイントを置くことができるし、便利機能がたくさんあるし、これがないと開発ができないです。
Happy Elements Labs: Rubyist必携 pry-railsを使いこなせば幸せになれる
powder
Pow: Zero-configuration Rack server for Mac OS X
開発用サーバPowのためのGem。
rails s
なんてしなくてもサーバが使えます。
めっちゃ便利なんだけど、powでpryが使うためのpry-remote
がうまく動かなくて今は保留中。
また今度試す。
開発サーバをThinからPowに切り替えて開発効率アップ! (Mac限定) - 酒と泪とRubyとRailsと
おまけ・よくある機能のGem
僕は勉強のために自前で実装していますが、よくある機能を実装するのに使える(かもしれない)Gemを紹介
コメント
自分でコメント機能を作ったときはポリモーフィック関連の勉強になりました。
実装する手間を省きたいなら以下のGemがいいかもです。
https://github.com/jackdempsey/acts_as_commentable
シンプルなコメントシステム
https://github.com/elight/acts_as_commentable_with_threading
返信などの階層構造を持つコメントシステム
ソーシャル
今回作ったWebサービスではTwitterライクのフォロー機能もあります。
新米Railsエンジニアにはなかなか厳しかったですが、このチュートリアルで乗り切りました。
Ruby on Rails チュートリアル:実例を使って Rails を学ぼう
これも実装する手間を省きたいなら以下のGemがいいかもです。
https://github.com/cmer/socialization
フォロー・ライク・メンションができるみたい。
https://github.com/tcocca/acts_as_follower
こちらはフォローとブロックができるようです。
タイムライン
https://github.com/pokonski/public_activity
誰が何をしたかが時系列で流れるタイムライン機能。
軽く一読した限り、すぐに使い方がわからなかったのでちょっと難しそう。
https://github.com/ledermann/unread
未読・既読をつけられる
ひとまずこれが公開時点のGemfileです。
なんか自分のGemfileをさらすとか少し恥ずかしい気分ですが、参考になれば幸いです。