はじめに
WSLを少し触ってみたので、WSLのコマンドラインからRailsの環境を構築します。
環境
- OS: Windows10 Pro 64bit
- Version: 1903
- OS build: 18362.418
WSLの導入はこちらを参照してください。
WSL(Windows Subsystem for Linux)の概要と導入
必要なソフトウェアの設定、インストール
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/
にアクセスします。
おまけ
エラー調査の際に 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などで動かしてみるとまた面白いかもしれないですね。