Railsに触って半年ぐらい経つけど、未だにrails newした時に出来上がるGemfileの中身を理解していたなかったので調べてみた。

「そもそもGemfileとは?」という人はこちらへ⇒http://xxxcaqui.hatenablog.com/entry/2013/02/11/013421

rails newで生成されるGemfile

source 'https://rubygems.org'

# Bundle edge Rails instead: gem 'rails', github: 'rails/rails'
gem 'rails', '4.0.0'

# Use sqlite3 as the database for Active Record
gem 'sqlite3'

# Use SCSS for stylesheets
gem 'sass-rails', '~> 4.0.0'

# Use Uglifier as compressor for JavaScript assets
gem 'uglifier', '>= 1.3.0'

# Use CoffeeScript for .js.coffee assets and views
gem 'coffee-rails', '~> 4.0.0'

# See https://github.com/sstephenson/execjs#readme for more supported runtimes
# gem 'therubyracer', platforms: :ruby

# Use jquery as the JavaScript library
gem 'jquery-rails'

# Turbolinks makes following links in your web application faster. Read more: https://github.com/rails/turbolinks
gem 'turbolinks'

# Build JSON APIs with ease. Read more: https://github.com/rails/jbuilder
gem 'jbuilder', '~> 1.2'

group :doc do
  # bundle exec rake doc:rails generates the API under doc/api.
  gem 'sdoc', require: false
end

# Use ActiveModel has_secure_password
# gem 'bcrypt-ruby', '~> 3.0.0'

# Use unicorn as the app server
# gem 'unicorn'

# Use Capistrano for deployment
# gem 'capistrano', group: :development

# Use debugger
# gem 'debugger', group: [:development, :test]

長くなりますが、勉強のために上から順に見ていきます。

rails

まぁ、これはいいか。 ここでバージョンを指定すれば、bundle installした後bundle exec rails で指定したrailsバージョンで作業できる。

sqlite3

データベースですね、わかります。sqlite3はローカルにdb/development.sqlite3というファイルが生成されて、SQLite Database Browserでデータベースの構造を詳しく見ることもできる。ファイルとして保存してあるので、他の人へ渡す時とか楽。しかし、herokuでアプリを作るときはPostgreSQLを使えと言われる。 herokuのリファレンス(英語)を読むとなぜSQLiteが使えないのか書いてある。勝手に翻訳して解釈すると、複数のサーバー(dyno)を立ち上げると、まったく別の環境になるため、お互いのファイル(sqlite3ファイル)を更新することができないし、サーバーが起動中に書き換えられても一時的なファイルとして扱うため、再起動したら元に戻るみたい。怖いですね。素直にsqlite3以外を使いましょう。

Asset Pipeline

次の3つのgemはRails3.1から導入された Asset Pipelineに使われている。詳しくは⇒Rails3.1から導入されたAsset Pipelineがよくわかってなかったから調べた - (゚∀゚)o彡 sasata299’s blog

sass-rails

sassです。便利なCSSです。入れ子構造で書けたり、変数が使えたりする。

$blue:#23599b;

.top{
	color:$blue;
	h1{
		font-size: 12px;
	}
}

uglifier

javascriptを圧縮してくれる。 config/environments/production.rbの所で config.assets.js_compressor = :uglifierで呼び出されている。 ホワイトスペースを削除して、if-else文を三項演算子に変更するなど最適化をしてくれるので、素早く読み込める&難読化の効果が現れてくる。

coffee-rails

CoffeeScriptはJavaScriptに比べて簡潔さと可読性を向上させていて、だいたいJavaScriptよりも1/3程度の行数が削減できる。

therubyracer

Googleが開発したJavaScriptのエンジンであるV8をRubyから使えるようにするgem。他にもJavaScriptエンジンはあるけれど、V8はバージョンが上がるたびに高速化しており、スクリプト言語の中では最速の部類となっているみたい。Which programs are fastest? | Computer Language Benchmarks Gameしかし、gemインストール時で一番つまずくのもこのgemな気がする。

jquery-rails

ウェブブラウザ用のJavaScriptコードを容易に記述できるように設計された、JavaScriptライブラリ。CSSが操作できたり、Ajaxで動きのあるページを作ることが可能。

ページの移動をAjaxに置き換えることで、JavaScriptやCSSの読み込みを省略して高速化してくれる。しかし、ページ移動でJavaScriptで書かれていた広告が表示されないなどのエラーも起こる。英語だが、このサイトで解決策がまとめられている。Turbolinks Compatibility

jbuilder

JSON形式でレスポンスを出力してくれるテンプレートエンジン。Viewで記述できて、部分テンプレート等にも使える。日本語に翻訳されてて分かりやすい⇒#320 Jbuilder - RailsCasts

sdoc

Rubyのソースコードからコメント等を読み取りHTML+CSS+JavaScriptを吐き出して、ブラウザで閲覧しやすいドキュメントを作ってくれる。Sはsearchableのことで、ブラウザ上でクラスやメソッド名を検索できるようになる。

bcrypt-ruby

パスワードの暗号化をしてくれる機能。使い方は次のサイトが分かりやすい。bcrypt-rubyをRailsで使う - ばくのエンジニア日誌

unicorn

Rackアプリケーション向けのHTTPサーバー。RackとはRubyにおけるサーバーとアプリケーション間のインタフェースの役割を果たしていて、Rails以外の様々なフレームワークで実装されたアプリケーションでもサーバー側の構成を変えることなく置き換えることができたりする。 他にもRailsのサーバーは色々あるが、unicornは他のに比べてデプロイ時間が早かったり、メモリ効率が良かったりするらしい。 ちょっと記事としては古いが詳しく他のサーバーと比較して書かれているやつ⇒次世代Ruby on RailsサーバーUnicorn(汎用のRackアプリケーションサーバ)を使ってみた | TechRacho

capistrano

デプロイメントツール。アプリケーションを本番サーバーにインストールしたり、最新版に更新。サーバーの起動、再起動、停止。メンテナンス中への切り替えが可能。

debugger

その名の通りデバッガーツール。ここに詳しく載ってる。 ruby-debugを使ったRuby・Railsアプリケーションのデバッグ方法