ゼロからmacにVagrantとVirtualBoxを使ってCentOSを入れてから、Ruby on Railsの環境構築を整えるまでの手順

##はじめに
基本的に参考サイトに書いている内容を真似してもらえれば、大丈夫です。つまずきそうな部分や、上手くいかない部分を補足的に書いています。

## 1. centOSをmacに入れる
http://qiita.com/okmn/items/461e5cd3ff234d4b73ff
を参考にして入れてください。

*使わなくなった仮想環境を削除する方法は
http://qiita.com/mochizukikotaro/items/52f4434c3f69c4ba1f54
を参考してください。

## 2.zshとpreztoを入れる
zshは、補完機能など、bashよりも使いやすいので、入れると便利です。また、preztoはzshをカラフルにデコレーションしてくれるフレームワークで、コマンドが見やすくなります。なので、別にいいって方は、飛ばしても大丈夫です。

###2.1 zshのインストール
zshのインストールをします。yumを使うと、腐ったものが入って、preztoが使えないので、ソースから取ってくる必要があります。

```
$ wget http://sourceforge.net/projects/zsh/files/zsh/5.0.6/zsh-5.0.6.tar.gz
```

解凍する


```
$ tar zxvf zsh-5.0.6.tar.gz
$ ls
zsh-5.0.6  zsh-5.0.6.tar.gz
```

コンパイルしてインストール(おまじない感)

```
$ cd zsh-5.0.6
$ ./configure --enable-multibyte
$ make
$ sudo make install
```

無事インストールできたことを確認する。


```
$ zsh --version
zsh 5.0.6 (x86_64-unknown-linux-gnu)
```


##### ./configure時にエラーが出た場合

##### ①gccを入れるパターン

```
configure: error: no acceptable C compiler found in $PATH
```

というエラーが出た場合  
C言語のコンパイラを入れろということなので

```
$ sudo yum install gcc
```

をする。

##### ②ncurses-develを入れるパターン

```
configure: error: "No terminal handling library was found on your system.
This is probably a library called 'curses' or 'ncurses'.  You may
need to install a package called 'curses-devel' or 'ncurses-devel' on your
system."
```

というエラーが出た場合  
ncurses-develを入れれば解決できる


```
$ sudo yum install ncurses-devel
```

これで、解決！


####起動時にインストールしたzshが起動するようにする
zshを使えるようにはなりましたが、毎回毎回zshコマンドを打つのは面倒くさいので、起動時にzshを起動させるために、zshをログインシェルに設定します。
ここで、ログインシェルに設定するには、chsh -s コマンドで、zshのパスを設定してあげれば良いのですが、そのパスが、/etc/shellsというファイルの中に記述されていないと、エラーとなってしまうらしいので記述していきます。実際に見てみるとわかりやすいです。


```
$ cat /etc/shells
/bin/sh
/bin/bash
/sbin/nologin
/bin/dash
/bin/tcsh
/bin/csh
```

インストールしたzshのパスは当然ない。

zshのパスを確認する

```
$ which zsh
/usr/local/bin/zsh
```

よって、write権限を持っているsudoで、vimを開き書き換える

```
$ sudo vi /etc/shells #書き換える
$ cat /etc/shells
/bin/sh
/bin/bash
/sbin/nologin
/bin/dash
/bin/tcsh
/bin/csh
/usr/local/bin/zsh #追加した
```

ここで、ログインシェルを/usr/local/bin/zshに設定する

```
chsh -s /usr/local/bin/zsh
```

*注意
パスワードを要求されますが、パスワードとユーザー名は初期ではvagrantです。

###2.2 preztoを入れる

まずはgitを追加する(railsをインストールするときにも、gitのインストールをしていますが、ここでしているので、railsの時はとばしてください。)

```
$ sudo yum install git
```

zshを起動

```
$ zsh
```

[公式](https://github.com/sorin-ionescu/prezto)に載ってるコマンドを実行していく

```
$ git clone --recursive https://github.com/sorin-ionescu/prezto.git "${ZDOTDIR:-$HOME}/.zprezto"

#初期設定のファイルを追加する(これもおまじない感)
$ setopt EXTENDED_GLOB
for rcfile in "${ZDOTDIR:-$HOME}"/.zprezto/runcoms/^README.md(.N); do
  ln -s "$rcfile" "${ZDOTDIR:-$HOME}/.${rcfile:t}"
done
```

反映させる(再起動してもいい)

```
$ source ~/.zshrc
```

参考
http://yuk.hatenablog.com/entry/2014/09/09/014115

## 3. ruby on railsを入れる

https://tsuchikazu.net/linux_ruby_on_rails_install/
を参考に入れてください。

###詰まったところ
#### ①rbenv installでエラーがでた。

```
$ rbenv install 2.4.0
Downloading ruby-2.4.0.tar.bz2...
-> https://cache.ruby-lang.org/pub/ruby/2.4/ruby-2.4.0.tar.bz2
error: failed to download ruby-2.4.0.tar.bz2

BUILD FAILED (CentOS Linux 7 using ruby-build 20170523-7-g2de7a29)

```

http://qiita.com/kanuu/items/7efcbec499222802be3b
を参考にして

```
$ RUBY_BUILD_CURL_OPTS=--tlsv1.2 rbenv install 2.4.0
```

を打つと、インストールできた。

#### ②echoコマンドがよくわからなかった。
https://eng-entrance.com/linux-command-echo
がとてもわかりやすくて、スッキリ。

#### ③rails newでエラーが出てきた

$rails new railbookと打つと

```
An error occurred while installing sqlite3 (1.3.13), and Bundler cannot continue.
Make sure that `gem install sqlite3 -v '1.3.13'` succeeds before bundling.

In Gemfile:
  sqlite3
         run  bundle exec spring binstub --all
bundler: command not found: spring
Install missing gem executables with `bundle install`
```

と、エラーが出てきた。
http://qiita.com/NaokiIshimura/items/dfabac823cbad04d5ace
を参考にすると
sqlite-develを入れるらしい。

```
# インストール
$ sudo yum -y install sqlite-devel
$ bundle install

...
Bundle complete! 16 Gemfile dependencies, 71 gems now installed.
Use `bundle info [gemname]` to see where a bundled gem is installed.

$ rails g controller hello
      create  app/controllers/hello_controller.rb
      invoke  erb
      create    app/views/hello
      invoke  test_unit
      create    test/controllers/hello_controller_test.rb
      invoke  helper
      create    app/helpers/hello_helper.rb
      invoke    test_unit
      invoke  assets
      invoke    coffee
      create      app/assets/javascripts/hello.coffee
      invoke    scss
      create      app/assets/stylesheets/hello.scss
```

となり、解決できました。

#### ④rails g contoller でいっぱいエラーが出た

```
$ rails generate controller hello
/home/vagrant/.rbenv/versions/2.4.0/lib/ruby/gems/2.4.0/gems/bundler-1.15.4/lib/bundler/runtime.rb:85:in `rescue in block (2 levels) in require': There was an error while trying to load the gem 'uglifier'. (Bundler::GemRequireError)
Gem Load Error is: Could not find a JavaScript runtime. See https://github.com/rails/execjs for a list of available runtimes.
Backtrace for gem load error is:
/home/vagrant/.rbenv/versions/2.4.0/lib/ruby/gems/2.4.0/gems/execjs-2.7.0/lib/execjs/runtimes.rb:58:in `autodetect'
/home/vagrant/.rbenv/versions/2.4.0/lib/ruby/gems/2.4.0/gems/execjs-2.7.0/lib/execjs.rb:5:in `<module:ExecJS>'
/home/vagrant/.rbenv/versions/2.4.0/lib/ruby/gems/2.4.0/gems/execjs-2.7.0/lib/execjs.rb:4:in `<top (required)>'
/home/vagrant/.rbenv/versions/2.4.0/lib/ruby/gems/2.4.0/gems/uglifier-3.2.0/lib/uglifier.rb:5:in `require'
/home/vagrant/.rbenv/versions/2.4.0/lib/ruby/gems/2.4.0/gems/uglifier-3.2.0/lib/uglifier.rb:5:in `<top (required)>'
/home/vagrant/.rbenv/versions/2.4.0/lib/ruby/gems/2.4.0/gems/bundler-1.15.4/lib/bundler/runtime.rb:82:in `require'
/home/vagrant/.rbenv/versions/2.4.0/lib/ruby/gems/2.4.0/gems/bundler-1.15.4/lib/bundler/runtime.rb:82:in `block (2 levels) in require'
/home/vagrant/.rbenv/versions/2.4.0/lib/ruby/gems/2.4.0/gems/bundler-1.15.4/lib/bundler/runtime.rb:77:in `each'
/home/vagrant/.rbenv/versions/2.4.0/lib/ruby/gems/2.4.0/gems/bundler-1.15.4/lib/bundler/runtime.rb:77:in `block in require'
/home/vagrant/.rbenv/versions/2.4.0/lib/ruby/gems/2.4.0/gems/bundler-1.15.4/lib/bundler/runtime.rb:66:in `each'
/home/vagrant/.rbenv/versions/2.4.0/lib/ruby/gems/2.4.0/gems/bundler-1.15.4/lib/bundler/runtime.rb:66:in `require'
/home/vagrant/.rbenv/versions/2.4.0/lib/ruby/gems/2.4.0/gems/bundler-1.15.4/lib/bundler.rb:108:in `require'
/home/vagrant/railbook/config/application.rb:7:in `<top (required)>'
/home/vagrant/.rbenv/versions/2.4.0/lib/ruby/gems/2.4.0/gems/railties-5.1.3/lib/rails/command/actions.rb:15:in `require'
/home/vagrant/.rbenv/versions/2.4.0/lib/ruby/gems/2.4.0/gems/railties-5.1.3/lib/rails/command/actions.rb:15:in `require_application_and_environment!'
/home/vagrant/.rbenv/versions/2.4.0/lib/ruby/gems/2.4.0/gems/railties-5.1.3/lib/rails/commands/generate/generate_command.rb:19:in `perform'
/home/vagrant/.rbenv/versions/2.4.0/lib/ruby/gems/2.4.0/gems/thor-0.20.0/lib/thor/command.rb:27:in `run'
/home/vagrant/.rbenv/versions/2.4.0/lib/ruby/gems/2.4.0/gems/thor-0.20.0/lib/thor/invocation.rb:126:in `invoke_command'
/home/vagrant/.rbenv/versions/2.4.0/lib/ruby/gems/2.4.0/gems/thor-0.20.0/lib/thor.rb:387:in `dispatch'
/home/vagrant/.rbenv/versions/2.4.0/lib/ruby/gems/2.4.0/gems/railties-5.1.3/lib/rails/command/base.rb:63:in `perform'
/home/vagrant/.rbenv/versions/2.4.0/lib/ruby/gems/2.4.0/gems/railties-5.1.3/lib/rails/command.rb:44:in `invoke'
/home/vagrant/.rbenv/versions/2.4.0/lib/ruby/gems/2.4.0/gems/railties-5.1.3/lib/rails/commands.rb:16:in `<top (required)>'
bin/rails:4:in `require'
bin/rails:4:in `<main>'
Bundler Error Backtrace:
	from /home/vagrant/.rbenv/versions/2.4.0/lib/ruby/gems/2.4.0/gems/bundler-1.15.4/lib/bundler/runtime.rb:81:in `block (2 levels) in require'
	from /home/vagrant/.rbenv/versions/2.4.0/lib/ruby/gems/2.4.0/gems/bundler-1.15.4/lib/bundler/runtime.rb:77:in `each'
	from /home/vagrant/.rbenv/versions/2.4.0/lib/ruby/gems/2.4.0/gems/bundler-1.15.4/lib/bundler/runtime.rb:77:in `block in require'
	from /home/vagrant/.rbenv/versions/2.4.0/lib/ruby/gems/2.4.0/gems/bundler-1.15.4/lib/bundler/runtime.rb:66:in `each'
	from /home/vagrant/.rbenv/versions/2.4.0/lib/ruby/gems/2.4.0/gems/bundler-1.15.4/lib/bundler/runtime.rb:66:in `require'
	from /home/vagrant/.rbenv/versions/2.4.0/lib/ruby/gems/2.4.0/gems/bundler-1.15.4/lib/bundler.rb:108:in `require'
	from /home/vagrant/railbook/config/application.rb:7:in `<top (required)>'
	from /home/vagrant/.rbenv/versions/2.4.0/lib/ruby/gems/2.4.0/gems/railties-5.1.3/lib/rails/command/actions.rb:15:in `require'
	from /home/vagrant/.rbenv/versions/2.4.0/lib/ruby/gems/2.4.0/gems/railties-5.1.3/lib/rails/command/actions.rb:15:in `require_application_and_environment!'
	from /home/vagrant/.rbenv/versions/2.4.0/lib/ruby/gems/2.4.0/gems/railties-5.1.3/lib/rails/commands/generate/generate_command.rb:19:in `perform'
	from /home/vagrant/.rbenv/versions/2.4.0/lib/ruby/gems/2.4.0/gems/thor-0.20.0/lib/thor/comman# Use CoffeeScript for .coffee assets and views
d.rb:27:in `run'
	from /home/vagrant/.rbenv/versions/2.4.0/lib/ruby/gems/2.4.0/gems/thor-0.20.0/lib/thor/invocation.rb:126:in `invoke_command'
	from /home/vagrant/.rbenv/versions/2.4.0/lib/ruby/gems/2.4.0/gems/thor-0.20.0/lib/thor.rb:387:in `dispatch'
	from /home/vagrant/.rbenv/versions/2.4.0/lib/ruby/gems/2.4.0/gems/railties-5.1.3/lib/rails/command/base.rb:63:in `perform'
	from /home/vagrant/.rbenv/versions/2.4.0/lib/ruby/gems/2.4.0/gems/railties-5.1.3/lib/rails/command.rb:44:in `invoke'
	from /home/vagrant/.rbenv/versions/2.4.0/lib/ruby/gems/2.4.0/gems/railties-5.1.3/lib/rails/commands.rb:16:in `<top (required)>'
	from bin/rails:4:in `require'
	from bin/rails:4:in `<main>'
```

http://krs1.hatenablog.com/entry/2016/05/30/120000
を参考にするとGemfileの中にtherubyracerを入れる必要があるらしい

```Gemfile
gem 'therubyracer'
```

bundle installする

```
$ bundle install



Bundle complete! 17 Gemfile dependencies, 74 gems now installed.
Use `bundle info [gemname]` to see where a bundled gem is installed.

$ rails g controller hello
create  app/controllers/hello_controller.rb
      invoke  erb
      create    app/views/hello
      invoke  test_unit
      create    test/controllers/hello_controller_test.rb
      invoke  helper
      create    app/helpers/hello_helper.rb
      invoke    test_unit
      invoke  assets
      invoke    coffee
      create      app/assets/javascripts/hello.coffee
      invoke    scss
      create      app/assets/stylesheets/hello.scss
```

となり、解決できました。

#### ⑤localhost:3000/にアクセスできなかった

rails sでサーバーを立ててもブラウザで、
localhost:3000/
にアクセスすると何も表示されない。

http://mokokko.hatenablog.com/entry/2014/05/04/221452
を参考にすると、ネットワーク設定をするらしい。

一度、centOSから出る

```
$ exit
```

Vagrantfileを編集する

```:Vagrantfile
#次の１行を追加する
config.vm.network "forwarded_port", guest: 3000, host: 3000
```

Vagrantを再起動する

```
$ vagrant reload
```

これで、もう一度$rails s をして、ブラウザで、localhost:3000/
にアクセスすれば、表示できた！

### おわりに

色々、つまずいた...