LoginSignup
1

More than 3 years have passed since last update.

Organization

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などで動かしてみるとまた面白いかもしれないですね。

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
What you can do with signing up
1