Railsの開発環境構築はこれでOK!rbenvの導入からRailsアプリ起動までの詳細手順

Ruby

こんにちは。Enjoy IT Life管理人の仁科(@nishina555)です。

プログラミングを行うにあたり、まず行わなくてはならないのものが開発環境の構築です。
開発環境の構築は一番はじめにやることでもあり、初学者にとっては一番はじめにつまずきやすいポイントでもあります。

今回はRuby on RailsのWebアプリ(以下Railsアプリ)に関する開発環境の構築手順について紹介をしたいと思います。
今回のゴールは『ローカル環境でRailsアプリが起動できるようになる』です。

単に実行コマンドを羅列するだけでなく、解説なども適宜加えました。Ruby on Railsをこれから勉強する方の参考になればと思います。

なお今回の開発環境はmacOS、rubyのバージョンは2.6.2、railsのバージョンは5.2.3となっています。

rbenvの導入からRailsアプリを起動するまでの手順まとめ

まずはじめに、今回紹介するコマンドをもとにrails-appという名前のRailsアプリを起動するまでの手順をまとめました。

コマンドの解説は不要、とにかく構築手順を知りたいという方は以下を参考にRailsアプリの起動をしてみてください。

### rbenvでrubyをインストールする
$ brew install rbenv ruby-build
$ rbenv install 2.6.2
$ vim ~/.zhsrc
  → eval "$(rbenv init -)" を追加
$ source ~/.zhsrc

### Railsアプリの準備
$ mkdir rails-app
$ cd rails-app
$ rbenv local 2.6.2
$ gem install bundler

### Railsアプリの作成
$ bundle init
$ vim Gemfile
  → gem railsの行のコメントアウトを外す
$ bundle install --path vender/bundle
$ bundle exec rails new .

### Railsアプリの起動
$ bundle exec rails s

以下では上記のコマンドについて項目ごとに解説をしていきます。

rbenvでrubyをインストールする

rubyはrbenvで管理する方法がオススメです。
rbenvが開発環境に用意されていない場合は、Railsアプリを作成する前にrbenvの導入を行いましょう。

まずrbenv、ruby-buildをbrewでインストールします。

$ brew update
$ brew install rbenv ruby-build

rbenvでインストールできるrubyのバージョンの一覧はrbenv install -lで確認ができます。

$ rbenv install -l

Available versions:
  1.8.5-p52
  1.8.5-p113
  1.8.5-p114
  ...
  (中略)
  ...
  truffleruby-1.0.0-rc9

今回はRailsアプリで利用するrubyのバージョンを2.6.2とします。rbenv installでrbenv経由でrubyをインストールできます。

$ rbenv install 2.6.2

実際にrubyがインストールされたかについてはrbenv versionsで確認ができます。
インストールされたバージョンが表示されればOKです。

$ rbenv versions

* system (set by /Users/toshiharu.nishina/.rbenv/version)
  2.6.2

次にrbenvのセットアップを行います。セットアップはrbenv initで行います。
コマンドを実行すると以下のようなガイドが表示されます。

$ rbenv init

# Load rbenv automatically by appending
# the following to ~/.zshrc:

eval "$(rbenv init -)"

ガイドに従い、シェルの設定ファイル(.bashrcや.zshrc)にeval "$(rbenv init -)"を追加します。

$ vim ~/.zshrc

.zshrc

+ eval "$(rbenv init -)"

追加後、rbenvのセットアップが正しく読み込まれているか確認してみましょう。
まずはシェルの再起動もしくは以下のようにsourceコマンドでシェルの設定を読み込み直します。

$ source ~/.zshrc

rbenvのrubyが使われているかrubyのバージョンを確認してみましょう。
which rubyでrbenv配下のrubyが参照されていれば設定はOKです。

$ which ruby

/Users/toshiharu.nishina/.rbenv/shims/ruby

rbenvについては『複数のバージョン管理も楽々!rbenvを利用したruby管理方法チュートリアル』で紹介していますので、興味のある方はご覧になってください。

複数のバージョン管理も楽々!rbenvを利用したruby管理方法チュートリアル

Railsアプリの準備

つぎにRailsアプリを作成する前に必要な準備を行います。

まずはRailsアプリ用の作業ディレクトリを作成します。

$ mkdir rails-app

作業ディレクトリに移動後、Railsアプリで利用するrubyの設定をします。

rbenvでrubyのバージョンを設定するにはrbenv globalもしくはrbenv localを実行します。

globalはデフォルトで利用するrubyのバージョンを変更するのに対し、localはコマンドを実行したディレクトリ配下で利用するrubyのバージョンを変更します。

今回はRailsアプリで利用するrubyのバージョンの指定なので、localを利用します。

$ cd rails-app
$ rbenv local 2.6.2

rubyのバージョンは以下で確認できます。

$ rbenv versions

  system
* 2.6.2 (set by /Users/toshiharu.nishina/git/rails-app/.ruby-version)

ruby -vでrbenvで指定したrubyのバージョンが正しく反映されているか確認しておくとよいでしょう。
この時、rubyのバージョンが反映されていない場合はrbenv initの設定が正しく行われていない可能性があるので確認をしなおしましょう。

$ ruby -v

ruby 2.6.2p47 (2019-03-13 revision 67232) [x86_64-darwin18]

次にbundlerの準備をします。
bundlerは『gem同士の依存関係やgemのバージョンを管理する』gemです。

Railsアプリで利用するgemは基本的にbundlerを利用してインストールしていくことになるので、Railsアプリを作成する前にbundlerの準備をしておきます。

Railsアプリで利用するrubyにbundlerがインストールされているか確認します。gemの一覧はgem listで確認できるので、その一覧にbundlerがあればOKです。

$ gem list | grep bundler

bundler (default: 1.17.2)

もしくはbundlerコマンドが実行できるか確認してみる方法でもOKです。

$ bundler -v

Bundler version 1.17.2

もしbundlerが見つからない場合はgem install bundlerでbundlerをインストールしておきましょう。

$ gem install bundler

Railsアプリの作成

ここから実際にRailsアプリを作成していきます。

Railsアプリで利用するgemはbundlerで管理します。bundlerの初期設定はbundle initで行います。
bundler initにより、bundlerでgemを管理する際に必要になるGemfileが作成されます。

$ bundle init
$ ls

Gemfile

bundlerはGemfileの中身を参照してgemのインストールをおこないます。

bundle initで生成されたGemfileはgem 'rails'の行がコメントアウトされており、このままではrailsのインストールが実行されません。
ですので、コメントアウトを外してbundlerでrailsをインストールできるようにします。

$ vim Gemfile

Gemfile

# frozen_string_literal: true

source "https://rubygems.org"

git_source(:github) {|repo_name| "https://github.com/#{repo_name}" }

- # gem "rails"
+ gem "rails"

bundlerを利用したgemのインストールはbundle installで行います。インストール先は--pathオプションで指定できます。

今回は--path /vender/bundleと指定し、Railsアプリに必要なgemはvender/bundle配下にインストールするようにしています。
インストール完了後、Gemfile.lock、venderディレクトリが作成されます。

$ bundle install --path vender/bundle
$ ls

Gemfile      Gemfile.lock vender

bundler経由でインストールされたgemはbundle listで確認できます。

$ bundle list

Gems included by the bundle:
  * actioncable (5.2.3)
  * actionmailer (5.2.3)
  * actionpack (5.2.3)
  * actionview (5.2.3)
  ...
  ...
  ...  

また、実際にインストールされたgemはGemfile.lockに掲載されています。

Gemfile.lock

GEM
  remote: https://rubygems.org/
  specs:
    actioncable (5.2.3)
      actionpack (= 5.2.3)
      nio4r (~> 2.0)
      websocket-driver (>= 0.6.1)
    actionmailer (5.2.3)
  ...
  ...

なお、bundle install実行時にパスを指定した場合、.bundle/configというファイルが作成されます。

.bundle/config

---
BUNDLE_PATH: "vender/bundle"

2回目以降『bundle install』を実行する際は生成されたconfigファイルが参照されるため、パスの指定を行わなくても初回に設定したパス(今回の例では『vender/bundle』配下)にgemがインストールされるようになります。

もし、gemのインストール先を指定しない場合はrubyのデフォルトのgemのインストール先に保存されます。

bundle installでパスを指定しなくてもRailsアプリを作成する上で問題になることはありません。

Railsアプリで利用するgemとrubyにインストールするgemをわけて管理したいときなどにパスの指定をします。(ちなみにぼくはRailsアプリのgemをインストールする際はパスを指定する派です。)

Gemfile?bundler?Rails開発するなら理解しておきたいgem管理の基礎知識

次にRailsアプリを作成します。
Railsアプリの新規作成はrails newで行います。

rails newを実行しようとすると『Gemfileを上書きしていいか』と聞かれるますが、yesを選択して問題ありません。
byebugやspringなど、Railsアプリ開発に必要なgemがインストールされます。

なお、bundle execはbundlerでインストールしたgemを利用する場合につけるコマンドです。
つまり以下のコマンドは『bundler経由でインストールしたrailsを利用して、Railsアプリを新規作成する』という意味になります。

$ bundle exec rails new .

意外とよくわかっていないbundlerについて

rails new実行後、以下のようなRailsアプリのディレクトリが構築されます。

.
├── Gemfile
├── Gemfile.lock
├── README.md
├── Rakefile
├── app
├── bin
├── config
├── config.ru
├── db
├── lib
├── log
├── package.json
├── public
├── storage
├── test
├── tmp
└── vendor/bundle
      └── ruby/2.6.0
            ├── bin
            ├── build_info
            ├── cache
            ├── doc
            ├── extensions
            ├── gems
            └── specifications

なお、今回はrails new実行時にオプションを指定しませんでしたが、参考までによく使うオプションを掲載しておきます。

rails newでよく使うオプション

オプション 内容
ーB, –skip-bundle bundle installを行わない
-T, –skip-test test::unitを組み込まない。RSpecに変更するときなどに利用する
-d, –database=DATABASE データベースの指定(デフォルトはsqlite3)

Railsアプリの起動

最後にRailsアプリを起動します。

Railsアプリはrails serverで起動します。rails sと省略することも可能です。
rails newのときと同様に、コマンドの先頭にbundle execをつけて実行します。

$ bundle exec rails s

=> Booting Puma
=> Rails 5.2.3 application starting in development
=> Run `rails server -h` for more startup options
Puma starting in single mode...
* Version 3.12.1 (ruby 2.6.2-p47), codename: Llamas in Pajamas
* Min threads: 5, max threads: 5
* Environment: development
* Listening on tcp://localhost:3000
Use Ctrl-C to stop

上記のようにListening on...のログが表示されたらRailsアプリの起動は完了しているので、localhost:3000にアクセスします。

以下のような画面が表示されればOKです。

rails server初期画面

まとめ: rubyはrbenvで管理。Railsアプリのgemはbundlerで管理

以上でRailsアプリの環境構築と起動方法の手順について紹介を終わります。

今回のまとめ
  • rubyのバージョンはrbenvで管理する
  • bundle init、bundle installでRailsアプリに必要なgemをインストール
  • rails newでRailsアプリの雛形を自動生成
  • rails sでRailsアプリを起動

なお、今回はローカル環境でRailsアプリを起動させる方法について紹介しましたが、ローカル環境の代わりにDocker環境を利用する方法も別記事で紹介しております。

詳しくは『ローカル開発環境の構築不要!Dockerを利用したRailsアプリ起動手順』をご覧になってください。

ローカル開発環境の構築不要!Dockerを利用したRailsアプリ起動手順

この記事がいいなと思いましたらツイッター(@nishina555)のフォローもよろしくお願いします!