NnmnLog

Windows 10でRubyの開発環境を用意したい

作成: 2021-02-21
更新: 2021-02-21

はじめに

Windows 10 Home EditionRubyの開発環境を構築する方法の記録です。

RubyをWindowsへ直接インストールするのではなく、Windows上にLinux仮想マシンを構築し、Linux上にRubyをインストールします。

理由としては、Ruby on Railsの開発環境としても使うことも想定していて、多くの場合、リリース先の本番環境はLinuxであると思ったからです。

今回は、Linuxをインストールする仮想マシンとしてVirtualBoxを使います。 また、仮想マシンの作成や管理を簡単にするためにVagrantも使います。

環境について

使うもの

今回使うものは、主に以下です。

  • OS: Windows 10 Home Edition
  • VirtualBox 6.1.18
  • Vagrant 2.2.14
  • rbenv 1.1.2-44-gd604acb
  • Ruby 2.7.2
  • Linux仮想マシン
    • OS: Amazon Linux 2

Home EditionでもLinuxの実行環境にWSL(Windows Subsystem for Linux)を使う方法が可能になりつつありますが、僕の環境ではHyper-VとVirtualBoxの併用がうまくいかず断念しました。

作り方に興味がない人向け

こちらのGitリポジトリに一式あるので、cloneして、ディレクトリの中でvagrant upしてください。

使うツールの補足

VirtualBoxとは

本題とは関係ないですが、簡単に。

VirtualBoxは、Oracleの主導で開発されているオープンソースの仮想化ソフトウェアです。

これを使うことで、Windowsの中でLinuxなどの他のOSを実行することができるようになります。

Vagrantとは

Vagrantは、仮想マシンの作成や管理を簡単にするためのツールで、HashiCorp社が開発しています。

Vagrantfileという設定ファイルに書かれた内容をもとに、仮想マシンを起動、管理してくれます。

環境構築

環境を作成していきます。

以下のステップになります。

  1. 仮想化ツール(VirtualBox)とVagrantのインストール
  2. 仮想マシン(Amazon Linux 2)を作成する
  3. 仮想マシン(Amazon Linux 2)にrbenvをインストールする
  4. 仮想マシン(Amazon Linux 2)にRuby をインストールする

仮想化ツール(VirtualBox, Vagrant)のインストール

ここから環境構築に入ります。

詳細は割愛しますが、まずは仮想マシンをインストールします。

VirtualBoxは、ここから、Vagrantは、ここからインストーラーをダウンロードして入れます。

仮想マシン(Amazon Linux 2)を作成する

続いて、Linux仮想マシンを作成します。

ここからは、コマンドプロンプトを開き、WindowsでのCLI操作になります。

Windowsキー + Rを入力し、ファイル名を指定して実行というウィンドウが出たら、cmdと入力し、OKをクリックするとコマンドプロンプトが開きます。

  1. 作業用のディレクトリを作成して、その中に入ります。
    > mkdir ruby-on-amazon-linux-on-windows
    > cd ruby-on-amazon-linux-on-windows
    
  1. vagrant initコマンドで、Vagrant設定ファイルのひな形を生成します。

    Vagrantfileが作成されます。

    > vagrant init bento/amazonlinux-2
    
  1. vagrant upコマンドで仮想マシンを作成・起動します

    仮想マシンイメージのダウンロードなども行うため、作成にそこそこ時間がかかります。

    > vagrant up
    
  1. vagrant sshで仮想マシンにログインし、起動を確認します。

    以下のような画面が出ればOKです。

    > vagrant ssh
    Last login: Wed Feb 17 15:25:07 2021 from 10.0.2.2


           __|  __|_  )
           _|  (     /   Amazon Linux 2 AMI
          ___|\___|___|

    https://aws.amazon.com/amazon-linux-2/

    This system is built by the Bento project by Chef Software
    More information can be found at https://github.com/chef/bento
    [vagrant@vagrant ~]$
    

仮想マシン(Amazon Linux 2)にrbenvをインストールする

rbenvをインストールします。

vagrantでLinuxにログインした状態で、以下を実行します。

  1. 必要なツールとライブラリをインストールします。
    [vagrant@vagrant ~]$ sudo yum install -y git gcc openssl-devel readline-devel zlib-devel
    
  1. Githubからrbenvを取得してインストールします。
    [vagrant@vagrant ~]$ git clone https://github.com/rbenv/rbenv.git ~/.rbenv
    [vagrant@vagrant ~]$ cd ~/.rbenv && src/configure && make -C src
    
  1. Shellでrbenvコマンドを認識するように、設定ファイルにパスを登録します。
    [vagrant@vagrant ~]$ echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bash_profile
    [vagrant@vagrant ~]$ echo 'eval "$(rbenv init -)"' >> ~/.bash_profile
    
  1. Shellの設定ファイルを再読み込みし、rbenvコマンドを認識するようにします。
    [vagrant@vagrant ~]$ source ~/.bash_profile
    [vagrant@vagrant ~]$ rbenv --version
    rbenv 1.1.2-44-gd604acb1
    
  1. ruby-buildプラグインをインストールし、rbenvでrubyをビルドできるようにします。
    [vagrant@vagrant ~]$ mkdir -p "$(rbenv root)"/plugins
    [vagrant@vagrant ~]$ git clone https://github.com/rbenv/ruby-build.git "$(rbenv root)"/plugins/ruby-build
    

仮想マシン(Amazon Linux 2)にRuby をインストールする

rbenvの設定が終わったので、やっとRubyをインストールできます。

  1. rbenv installでRuby 2.7.2をインストールしてみます。

    結構時間がかかります。

    [vagrant@vagrant ~]$ rbenv install 2.7.2
    
  1. rbenv versionsでインストール済みのRubyのバージョンの一覧を見ることができます。
    [vagrant@vagrant ~]$ rbenv versions
      2.7.2
    
  1. rbenv globalコマンドで、デフォルトで使用するRubyのバージョンを指定します。

    これで、rubyコマンドを実行できるようになります。

    [vagrant@vagrant ~]$ rbenv global 2.7.2
    [vagrant@vagrant ~]$ ruby --version
    ruby 2.7.2p137 (2020-10-01 revision 5445e04352) [x86_64-linux]
    
  1. 動作確認します。

    rubyコマンドと、irbが使えるようになったことがわかります。

    [vagrant@vagrant ~]$ ruby -e 'puts "こんにちは、Ruby!"'
    こんにちは、Ruby!
    [vagrant@vagrant ~]$ irb
    irb(main):001:0> puts 'こんにちは、Ruby!'
    こんにちは、Ruby!
    => nil
    irb(main):002:0> exit
    [vagrant@vagrant ~]$ 
    

おまけ1: ホストマシン(Windows)のファイルを見れるようにする

これで、Rubyのインストールまでおわりました。

しかし、このままだとWindowsで書いたRubyのコードをLinuxで参照することができないので、使いづらいです。

Windowsで作成したファイルをLinuxから参照できるようにVagrantの共有フォルダの設定を行います。

次のステップでフォルダを共有します。

  1. 共有フォルダに必要なVagrantのプラグインをインストールする
  2. Vagrantfileと同じフォルダにsrcフォルダを作成する
  3. Vagrantfileに共有設定を追記する

手順

  1. vagrantから抜けてWindowsで作業します。
    [vagrant@vagrant ~]$ exit
    
  1. vagrant-vbguestプラグインが入っているか確認します。

    以下となっていればのように、vagrant-vbguestが表示されていなければインストールする必要があります。

    > vagrant plugin list
    No plugins installed.
    
  1. vagrant-vbguestプラグインをインストールする
    > vagrant plugin install vagrant-vbguest
    Installing the 'vagrant-vbguest' plugin. This can take a few minutes...
    Fetching micromachine-3.0.0.gem
    Fetching vagrant-vbguest-0.29.0.gem
    Installed the plugin 'vagrant-vbguest (0.29.0)'!

    > vagrant plugin list | Select-String "vagrant-vbguest"

    vagrant-vbguest (0.29.0, global)
    
  1. vbguestのステータスを確認します。

    Host OSとGuest OSにインストールされているGuestAdditionsのバージョンがあっていないようです。

    > vagrant vbguest --status
    [default] GuestAdditions versions on your host (6.1.18) and guest (6.1.16) do not match.
    
  1. vbguestのバージョンを合わせます
    > vagrant vbguest
    
  1. 設定を反映するため仮想マシンを再起動します
    > vagrant reboot
    
  1. vbguestのステータスを再度確認すると、OKになっています
    > vagrant vbguest --status
    [default] GuestAdditions 6.1.18 running --- OK.
    
  1. Vagrantfileにファイル共有設定を追加します

    Vagrantfileを開き、以下のコメントアウトされた行を変更します。

    # config.vm.synced_folder "../data", "/vagrant_data"
    
以下のように、コメントを解除しWindowsマシン上の`src`フォルダをLinux上で`/home/vagrant/src`として参照できるようにします。
    config.vm.synced_folder "./src", "/home/vagrant/src"
    
  1. 共有の確認のためのRubyスクリプトをsrcフォルダに作成します。

    Windowsでテキストエディター(メモ帳など)を開き、srcフォルダにhello.rbを以下の内容で作成します。

    puts "こんにちは、Ruby!"
    
  1. vagrantにログインし共有したフォルダを確認します。

    srcの中でhello.rbが共有されていることがわかります。

    > vagrant ssh
    [vagrant@vagrant ~]$ cd /home/vagrant/src
    [vagrant@vagrant src]$ ls
    hello.rb
    [vagrant@vagrant src]$ ruby hello.rb
    こんにちは、Ruby!
    

まとめ

長くなってしまいましたが、WindowsにRubyの実行環境を作ることができました。

今回の作業は一通り、こちらのGitリポジトリにある、Vagrantfileで自動化できたので、今後再利用できるといいなぁと思います。