Ruby
Ubuntu
Nokogiri
RubyOnRails
WSL

WSL(Ubuntu)にRuby on Ralis開発環境を構築する

Windows subsystem for linuxにUbuntuをインストールした環境にRuby on Rails開発環境を構築しようと思ったので、手順をまとめました。
要所要所にnokogiriに関する情報を名指しで出してますが、これはnokogiriで躓いたためです。
以下を参考に、Rails 5.1.6を導入しています。
Ruby on Rails 4.2 を Ubuntu にインストールする手順をかなり丁寧に説明してみました

構築する内容

Windows10(バージョン 1709)
Ruby 2.5.1
Rails 5.1.6
Ubuntu 16.04.4 LTS(windows subsystem for linux)
以上を構築していきます。

手順

メインは、Ruby on Rails環境構築ですので、WSLの導入などはさらっと行きます。

Windows subsystem for linux有効化

 「Windowsの機能の有効化または無効」からWindows subsystem Linuxを有効にする。
 Windows StoreからUbuntuをインストール & コマンドライン起動

Ruby on Railsの開発環境構築

パッケージのインストール(とアップデート)

# アップデート
$ sudo apt-get update  

# 必要なパッケージのインストール
$ sudo apt-get -y install git curl g++ make  
$ sudo apt-get -y install libssl-dev libreadline-dev  
$ sudo apt-get -y install libyaml-dev libxml2-dev libxslt-dev  
$ sudo apt-get -y install sqlite3 libsqlite3-dev nodejs 

# nokogiriのための必須パッケージインストール  
$ sudo apt-get -y install build-essential patch zlib1g-dev liblzma-dev pkg-config  

rbenvのインストール

$ cd
$ git clone git://github.com/sstephenson/rbenv.git .rbenv

ruby-build のインストール

$ mkdir -p ~/.rbenv/plugins
$ cd ~/.rbenv/plugins
$ git clone git://github.com/sstephenson/ruby-build.git

Ruby のインストール

rbenvでRubyの最新バージョン確認

インストールできる一覧を取得

$ rbenv install -list

listから、最新の2.5.1をインストール

$ rbenv install 2.5.1
※ちょっと待ちます…

systemに一度2.5.1を適用させる

$ rbenv global 2.5.1

# rbenvバージョン確認
$ rbenv version
2.5.1

# rubyのバージョン確認
$ ruby -v
ruby 2.5.1 xxxxx

Railsのインストール

gemrcの作成

gemのインストールはドキュメントをインストールするため遅いので、以下を設定しておく。
(遅くてもドキュメントなどあったほうがいい人は、この手順スキップです。)

$ vi ~/.gemrc
install: --no-document
update: --no-document

また、余談ですが、gem install でインストールする際は、-N オプションでで上記と同様な動作をします。

# Rubygemsより
-N, -​-no-document - Disable documentation generation

Railsのインストール

システムにgemでインストールしてしまうのではなく、
bundlerで必要なものはvendor/bundleに格納し、
bundle execで呼び出す構成を作ります。

プロジェクトディレクトリ作成

$ mkdir project_name
$ cd project_name

プロジェクト毎にのRubyバージョンを固定できるようにするには、プロジェクトディレクトリ内で、以下を実行します。

$ rbenv local 2.5.1

プロジェクトの初期化

$ bundle init
Writing new Gemfile to /path/to/project/Gemfile

作成されたGemfileに、Railsを記載

$ vi Gemfile
# frozen_string_literal: true

source "https://rubygems.org"

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

# Railsを5.1.6に固定(お好みで)
# gem "rails" だけでもOK(最新版)
gem "rails", "5.1.6"

プロジェクト内にgemインストールする

$ bundle install --path vendor/bundle
$ bundle exec rails new .
# Gemfileの上書を聞かれますが、上書きしてよいです。

テスト実行

railsコマンドを実行するときは、bundle execをつけるのを忘れないでください。
プロジェクト内にrails をインストールしたためです。

bundle exec rails s
=> Booting Puma
=> Rails 5.1.6 application starting in development
=> Run `rails server -h` for more startup options
Puma starting in single mode...
* Version 3.11.3 (ruby 2.5.1-p57), codename: Love Song
* Min threads: 5, max threads: 5
* Environment: development
* Listening on tcp://0.0.0.0:3000
Use Ctrl-C to stop

実行したRailsにアクセス。
http://localhost:3000

こんな画面が出ればOKです。
Screenshot-2018-4-1 Ruby on Rails.png

以上です。

補足

bundle install --path vendor/bundleに失敗した場合、以下を試して再実行してみてください。

$ bundle config build.nokogiri --use-system-libraries
$ bundle install --path vendor/bundle

nokogiriのインストールに躓いた場合、いくつか原因があるようですが、
僕の場合、「pkg-config」がないことによる問題でした。
公式のインストールガイドにも載っていないので、この問題に気付くのにだいぶ時間がかかりました。

失敗したときは、vendor/bundle/ruby/2.5.0/extensions/x86_64-linux/2.5.0-static/nokogiri-1.8.2/mkmf.logなどにエラー原因が出ていたりするので、見てみましょう。