Help us understand the problem. What is going on with this article?

Windows10のWSLでRails環境構築

はじめに

WSLを少し触ってみたので、WSLのコマンドラインからRailsの環境を構築します。

環境

  • OS: Windows10 Pro 64bit
    • Version: 1903
    • OS build: 18362.418

WSLの導入はこちらを参照してください。
WSL(Windows Subsystem for Linux)の概要と導入

必要なソフトウェアの設定、インストール

Rails Girls インストール・レシピ

WSLを使用した構築手順が掲載されていたので、上記サイトを参考にしました。

$ date
Sun Oct 20 16:43:08 JST 2019

date コマンドで日本時間 JST で、時刻も特に問題ありませんでした。念の為(パッケージのインストールに影響が出ないとは言い切れないので)レシピ通りに timezone を設定します。

$ sudo dpkg-reconfigure tzdata

# Asia/Tokyoを選択

Current default time zone: 'Asia/Tokyo'
Local time is now:      Sun Oct 20 16:52:08 JST 2019.
Universal Time is now:  Sun Oct 20 07:52:08 UTC 2019.

パッケージのアップデート、アップグレードは実施済みなので、必要なパッケージのインストールを実施します。

$ sudo apt install autoconf bison build-essential libssl1.0-dev libyaml-dev libreadline-dev zlib1g-dev libncurses5-dev libffi-dev libgdbm-dev sqlite3 libsqlite3-dev nodejs-dev node-gyp npm -y

$ sudo npm install --global yarn

(フロントエンド周りのパッケージ増えたな...)

Rubyのインストール

Rubyのインストールで必要なものをインストールしていきます。

rbenv/ruby-buildインストール

GitHub - rbenv/rbenv: Groom your app’s Ruby environment

おなじみのrbenvです。アプリケーション毎に、使用するrubyバージョンを管理できます。

$ git clone https://github.com/rbenv/rbenv.git ~/.rbenv

# rbenvのダウンロード

$ echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bashrc
$ echo 'eval "$(rbenv init -)"' >> ~/.bashrc

# rbenvのパスや、初期処理などを設定

$ source ~/.bashrc

# 設定を反映させる

GitHub - rbenv/ruby-build: Compile and install Ruby

こちらもおなじみruby-build。rubyのコンパイル、インストールで使用するものです。

$ git clone https://github.com/rbenv/ruby-build.git "$(rbenv root)"/plugins/ruby-build

Rubyインストール

rubyをインストールします。現在の安定版がRails Girls インストール・レシピに記載されているものと同じ、2.6.5なのでこれをインストールします。

$ rbenv install 2.6.5

# ruby 2.6.5をインストール

$ rbenv global 2.6.5

# 2.6.5をグローバル(システム全体で使用する初期値)に設定

$ ruby -v
ruby 2.6.5p114 (2019-10-01 revision 67812) [x86_64-linux]

インストール完了しました。

Railsのインストール

bundlerを使用してRailsをインストールしようかと思いましたが、プロジェクトごとにRailsのバージョンを管理できるので、レシピどおりインストールします。

Bundler: The best way to manage a Ruby application's gems

$ mkdir Workspace
$ cd Workspace

# 作業用のディレクトリを作成

$ gem install rails --no-document

# railsのインストール

$ rails -v
Rails 6.0.0

Railsの動作確認

$ rails new mockup

# 検証用のプロジェクトを作成

Retrying fetcher due to error (2/4): Bundler::HTTPError Could not fetch specs from https://rubygems.org/
Retrying fetcher due to error (3/4): Bundler::HTTPError Could not fetch specs from https://rubygems.org/
Retrying fetcher due to error (4/4): Bundler::HTTPError Could not fetch specs from https://rubygems.org/
Could not fetch specs from https://rubygems.org/

エラーが発生し、gemのインストールができなかったようです。エラー内容から原因を調べてみました。

rails5.2 bundle installがこけるので原因を調査してみた

$ gem -v
3.0.3

# バージョン確認

$ gem update --system
ERROR:  While executing gem ... (Gem::RemoteFetcher::UnknownHostError)
    timed out (https://rubygems.org/specs.4.8.gz)

# gemのアップデートを実施するも失敗

$ wget https://api.rubygems.org/specs.4.8.gz
--2019-10-20 18:22:16--  https://api.rubygems.org/specs.4.8.gz
Resolving api.rubygems.org (api.rubygems.org)... 2a04:4e42::70, 151.101.64.70, 151.101.192.70, ...
Connecting to api.rubygems.org (api.rubygems.org)|2a04:4e42::70|:443... failed: Resource temporarily unavailable.
Connecting to api.rubygems.org (api.rubygems.org)|151.101.64.70|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 3990714 (3.8M) [application/octet-stream]
Saving to: ‘specs.4.8.gz’

specs.4.8.gz                  100%[===============================================>]   3.81M  10.6MB/s    in 0.4s     
2019-10-20 18:22:38 (10.6 MB/s) - ‘specs.4.8.gz’ saved [3990714/3990714]

# IPv6のアドレスを使用した際にダウンロードに失敗している様子

症状がここに記載されていたとおり、IPv4での通信は問題無く、IPv6の通信に問題があるようです。IPv4の通信を優先するように設定を変更します。

gai.conf(5) — manpages-ja — Debian testing — Debian Manpages

$ sudo vi /etc/gai.conf

#    For sites which prefer IPv4 connections change the last line to
#
precedence ::ffff:0:0/96  100 # コメントイン

もう一度、プロジェクトを作成します。

$ rails new mockup
Overwrite /mnt/c/Users/xxx/Workspace/mockup/.gitignore? (enter "h" for help) [Ynaqdhm] y

$ cd mockup

# migrationなどの動作確認などは省略

$ rails s

http://localhost:3000/ にアクセスします。

image.png

おまけ

エラー調査の際に Powershellでipconfigを実行したときと、Ubuntuのコマンドラインでifconfigを実行した結果をみてみました。

PS C:\Users\xxx> ipconfig

Windows IP 構成

Wireless LAN adapter Wi-Fi:

省略
  IPv4アドレス . . . . . . . . . . . . : 192.168.1.1
  サブネット マスク . . . . . . . . . . : 255.255.255.0
  デフォルト ゲートウェイ . . . . . . . : 192.168.1.254
以下略
$ ifconfig

省略
wifi0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.1.1  netmask 255.255.255.0  broadcast 192.168.1.255
以下略

IPアドレスやインターフェースが同じです。省略しちゃってますがMACアドレスなども全く同じでした。WSLの仕組みを考えると不思議ではないですね。

終わりに

WSLの環境上で、Rails環境の構築が終わりました。やっぱりLinuxで環境構築できるのは楽ですね。
homebrewよりaptのほうがしっくりきます。Whitewater Foundry, Ltd. Co.という会社が有償のFedora Remix for WSLを作ってくれてるので、Red Hat系で採用されているdnfも行けそうですね。(CentOSやRHELとかもWSLに...無理かな...)

レシピ上だとsqlite3で動かしていたみたいなので、代わりにPostgreSQLとかをWindows for Dockerなどで動かしてみるとまた面白いかもしれないですね。

na-777
しがないエンジニアやってます
http://na-777.hatenablog.com/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした