読者です 読者をやめる 読者になる 読者になる

タイトル未設定

駆け出しエンジニアが興味を持ったことを落書くブログです。

Rails環境構築 on Mac

本記事の目的

Rails 4.2 チュートリアルのためにローカルに環境を作ろうとしたら、 いろいろ調べたいことがあったので、備忘録として簡単にまとめておきたいと思います。

方針

  • Ruby のバージョン管理にはrbenv を使用
  • rbenv のインストールはHomebrew 経由
  • bundler 以外のgem は プロジェクトフォルダへローカルインストール

方針補足

3つ目のローカルインストールは、以下のようなメリデメがあります。

 メリット

  • 複数プロジェクトが共存してもGemを管理しやすい
  • プロジェクトフォルダを削除するだけでRuby環境が初期状態に戻せる

 デメリット

  • rails やrake コマンド実行時にbundle exec を付ける必要がある
  • 1回目のbundle install 実行時に–path vendor/bundle を付ける必要がある

環境

  • OS:Mac OS X EI Capitan 10.11.6
  • Software
    • Homebrew 1.1.11
    • rbenv 1.1.0
    • ruby 2.2.3
    • gem 2.4.5.1
    • rails 4.2.2

構築手順

0. Homebrew のインストール

以前はXcodeのインストールとか必要だったようですが、今は公式に書いてあるコマンドで一発のようです。(未検証)

Homebrew — macOS 用パッケージマネージャー

以下のコマンドでインストール確認できます。

$ brew --version
Homebrew 1.1.11
Homebrew/homebrew-core (git revision 6199; last commit 2017-03-08)

1. rbenv のインストール

Homebrew 経由でrbenv をインストールします。

$ brew update
$ brew install rbenv

その後、rbenv関連のパスを通したりといった初期設定のコマンドを追加します。 パスを通すコマンドを.bash_profile に追加している記事もありましたが、なくても問題ありませんでした。

$ echo 'eval "$(rbenv init -)"' >> ~/.bash_profile
$ source ~/.bash_profile

最後にインストールを確認します。

$ rbenv -v
rbenv 1.1.0

rbenvインストール補足

なお、Rubyをビルドインするプラグインであるruby-build はrbenv と一緒にインストールされるようです。(未確認)

$ ruby-build --version
ruby-build 20170112

2. Ruby のインストール

MacOSX の初期状態では、Ruby 2.0.0 が入っているようです。

$ ruby -v
2.0.0

以下のコマンドでRuby 2.2.3 をインストールする。

$ rbenv install -v 2.2.3

-vオプションを付けないと、インストールの進捗がわからなくて不安になるので、付けるのがオススメです。

以下のコマンドを実行して、Ruby 2.2.3 が正しくインストールされたかを確認できます。

$ rbenv versions
$ rbenv global 2.2.3
$ ruby -v
ruby 2.2.3p173 (2015-08-18 revision 51636) [x86_64-darwin15]

必要かどうか未検証ですが、ここでopenssl と readline をインストールしました。

$ brew install openssl readline
$ brew list
openssl readline ...

Rubyインストール補足

Ruby のインストール時にopenssl やreadline、libiconv のパス渡しが必要だというサイトもありましたが、私の環境ではなくても動いています。

Rails開発環境の構築(複数バージョン共存可能)(Homebrew編) - Qiita

また、rbenv rehash はrbenv が最新だと不要だということで、なしでやりましたが大丈夫でした。

rbenvでrehashがいらなくなった – bgbgbg

3. SSL証明書のダウンロード

今の状態だと bundle install コマンドなどでSSL通信をしようとするとエラーになるため、SSL証明書をダウンロードする必要があります。

まず、証明書のパスを確認します。

$ ruby -ropenssl -e "p OpenSSL::X509::DEFAULT_CERT_FILE"
/usr/local/etc/openssl/cert.pem

確認したパスに証明書をダウンロードして完了です。

$ sudo curl "https://curl.haxx.se/ca/cacert.pem" -o /usr/local/etc/openssl/cert.pem

証明書はファイルサイズがそこそこあるので、ちゃんとダウンロードできたかを確認したい場合は、 cat コマンドではなくVimなどのエディタで確認するのがおすすめです。

$ vim /usr/local/etc/openssl/cert.pem
##
## Bundle of CA Root Certificates
##
## Certificate data from Mozilla as of: Wed Jan 18 04:12:05 2017 GMT
##
## This is a bundle of X.509 certificates of public Certificate Authorities
(以下省略)

4. bundler のインストール

今回はgem の中でbundler のみグローバルインストールします。

$ gem install bundler
$ gem which bundler
/Users/macuser/.rbenv/versions/2.2.3/lib/ruby/gems/2.2.0/gems/bundler-1.14.6/lib/bundler.rb

なお、gem install の前にrbenv exec を付けているサイトもありましたが、付けなくてもrbenv 管理下gem が実行されるので、なくて問題ありませんでした。

$ which gem
/Users/macuser/.rbenv/shims/gem

新しいRailsプロジェクトを作る

1. プロジェクトフォルダを作る

通常はここでrails new を実行しますが、 今回はRails もプロジェクトフォルダ内にローカルインストールするため、まだrails コマンドが使えません。

$ rails -v
Rails is not currently installed on this system. To get the latest version, simply type:

    $ sudo gem install rails

You can then rerun your "rails" command.

そこで先にプロジェクトファイルを作って移動します。

$ cd
$ mkdir workspace
$ cd workspace
$ mkdir hello-app
$ cd hello-app
$ pwd
/Users/macuser/workspace/hello-app

2. bundler 経由でRails をインストール

プロジェクトフォルダ内にGemfile を作ってRails をインストールします。

$ bundle init
$ vim Gemfile
# frozen_string_literal: true
source "https://rubygems.org"

gem "rails", "4.2.2"
$ bundle install --path vendor/bundle

path を指定することで、指定されたパスにGemfile に記載されたgem がインストールされます。

なお、この後のbundle update (またはinstall)ではpath指定は不要です。 一度パス指定をすると .bundle/config ファイルにgem のインストール先が記録されます。

これでRails がインストールされたことが確認できます。

$ bundle exec rails -v
Rails 4.2.2

bundle exec を付けることでbundler が管理しているgem を使ってコマンドを実行することができます。

ローカルインストール補足

ここまでの状態を確認するとローカルインストールについて理解が深まりました。

$ rails -v
Rails is not currently installed on this system. To get the latest version, simply type:

    $ sudo gem install rails

You can then rerun your "rails" command.

Rails のgem はbundler が管理しているので、Rails のインストール前と結果は変わりません。

$ gem list

bigdecimal (1.2.6)
bundler (1.14.6)
io-console (0.4.3)
json (1.8.1)
minitest (5.4.3)
power_assert (0.2.2)
psych (2.0.8)
rake (10.4.2)
rdoc (4.2.0)
test-unit (3.0.8)

同じように、rbenv が管理しているRuby 2.2.3 にはRails が入っていないことがわかります。

プロジェクトフォルダ内にローカルインストールされているgem は以下のいずれかのコマンドで確認できます。

$ bundle exec gem list
$ bundle list

3. プロジェクトフォルダをRails new する

ここまで来てやっとRails new を実行します。

$ pwd
/Users/macuser/workspace/hello-app
$ bundle exec rails new .

Gemfile の上書き確認はy -> [Enter] で続行できます。

プロジェクトフォルダはカレントディレクトリ(.) を指定します。 これでhello-app フォルダがRails プロジェクトフォルダになります。

この時、–skip-bundle をしないとgem がグローバルインストールになってしまうようと記載しているサイトもありましたが、 私の環境ではbundle init の時点でgem のインストール先設定が書いてある.bundle/config ファイルがあったので、なくても問題ありませんでした。

$ cat .bundle/config
---
BUNDLE_PATH: "vendor/bundle"
BUNDLE_DISABLE_SHARED_GEMS: "true"

4. .gitignore の設定

gem ファイルが全てvendor/bundle 配下に入っているので、このままだと大量のgem ファイルがgit 管理下に置かれてしまいます。

以下のコマンドを実行して、vendor/bundle をgit 管理外に設定します。

$ git config --global core.excludesfile ~/.gitignore_global
$ echo '/vendor/bundle' > ~/.gitignore_global

5. 動作確認

$ bundle exec rails s

http://localhost:3000 へアクセスして初期画面が表示されれば成功です。

f:id:sho-ezawa-dev:20170315190236p:plain

既存のプロジェクトに参加する

  1. ローカルにclone する
  2. Ruby のバージョンを合わせる
  3. gem をローカルインストールする

※力尽きたので手順のみメモ

おまけ

どこまでやったか分からなくなったのでやり直したい

以下のコマンドでrubyおよびそのgemを一掃して、rbenv インストール後からやり直せます。

$ rbenv global system
$ ruby -v
2.0.0
$ rbenv uninstall 2.2.3

参考

rbenvつかってrailsチュートリアルやってみよう! | niwatako$

Rails開発環境の構築(複数バージョン共存可能)(Homebrew編) - Qiita

rbenvおよびbundlerの基本的な使用方法 - Qoosky

複数バージョン共存可能なRails環境の構築 - Blowin' in the Wind

Bundler概要 - Qiita

bundle exec について詳しく調べてみた - しめ鯖日記