Ruby on Rails の windows へのインストールについて ( Ruby 2.4 以降用 )


ここでは、 MSYS2 をインストールし、 RubyInstaller または RubyInstaller2 から 7-Zip で圧縮されたファイル ( ファイルタイプが 7z のファイル ) をダウンロードして展開する方法でインストールする説明をします。 ( 以下の前置きはいらないという方はこちら )

windows 10 には ubuntu などの linux の実行環境として WSL ( Windows Subsystem for Linux ) が含まれており、そちらを使うことをお勧めします。 もし、メモリーとディスク容量に余裕があるなら、VirtualBox をインストールし、そこに ubuntu などの linux をインストールして使うことをお勧めします。 こちらは、linux 100% なので、Rails も含めて Ruby の全てのライブラリが使えるはずです。 ただし、WSL と VirtualBox を使う場合は linux の知識が必要になります。 でも、Ruby の PaaS さん達は linux を使っているようなので、開発も linux で行うのが無難だと思います。

でも、やっぱり Windows で気軽に使いたいという方は、RubyInstaller ( または RubyInstaller2 ) を使ってインストールしてください。 この時、Devkit 付きを使ってください。 インストーラーの指示に従えば開発環境一式をインストールできます。 また、複数のバージョンをインストールした場合、ridk use コマンドで Ruby のバージョンを切り替えることができるようです。 至れり尽くせり。 しかし、Ruby のライブラリの全てが Windows 用に用意されているわけではありません。 自分でコンパイルしなくてはいけないライブラリもあります。 ( 例えば、RubyInstaller2 参照 )
ただし、Rails のバージョンによっては sqlite3 の最新版 ( 1.4.1 ) に対応していないようです。 この場合は sqlite3 の 1.3.13 を使ってください。 Rails 5.2.3 以降では最新の sqlite3 に対応しています。

上記に記述したとおり windows 用の Ruby は RubyInstaller または、 RubyInstaller2 からダウンロードします。 そして RubyInstaller には、Ruby 2.4 以降と Ruby 2.3 以前のものがあるので注意してください。 Ruby 2.3 以前は gem のインストールに専用の DevKit が使われていましたが、Ruby 2.4 以降は MSYS2 が使われるようになりました。 そのため、それぞれインストール方法が異なります。 Ruby 2.3 以前については 『 Ruby on Rails を windows にインストールする方法の例 ( Ruby 2.3 以前用 ) 』 を参考にしてください。

なお、ここでは、特別な方法でインストールする手順を説明します。 すなわち、DevKit に含まれる MSYS2 と Ruby とを別々にインストールし、バッチファイルで Ruby のバージョンを設定するようにします。 何故このようにインストールしたかというと、単なる趣味です。 こんな方法もあるというサンプルです。

ちなみに、もし、Ruby 本体だけ使いたい場合は、例えば、Ruby の文法を確認するだけとか、Ruby の標準機能 ( 標準ライブラリ ) だけしか使わない場合などは、7zip ファイル ( ファイルタイプが 7z ) をダウンロードして展開し、PATH を設定するだけ ( 下記の 4, 5, 6, 7 ) で使えると思います。 MSYS2 が必要になるのは、gem、bundle コマンドでライブラリのインストール時にコンパイルされる時だけだと思います。

それでは手順を記述します。

ご注意

Ruby 3.1.0 からは MSYS2 での開発環境が MSVCRT から UCRT というものに変更された
ようです。 そのため、Ruby 3.0 以前と Ruby 3.1 以降とで異なります。
また、bundler 2.3.17 より古いバージョンを使うと、rails new xxxx で tzinfo-data が入
らずにエラーになります。 bundler 2.3.17 で変更されたみたいなので bundler 2.3.17
以降を使ってください。 gem update --system すれば bundler も最新に更新されます。

  1. Node.js をインストールします。
    Rails 6 では必須で、それ以外は任意です。 Rails では内部で JavaScript が使用されているようです。 Rails の『Guides』の『Getting Started with Rails』の『4.1 Starting up the Web Server』の部分に JavaScript の実行環境が無ければ execjs エラーが出ると記述されています。 ExecJS を見ると Windows では何も入れなくても動くかもしれません。 でも、とりあえず Node.js を入れておけば無難だと思います。
    Rails 6 では Yarn が必須です。 Yarn には Node.js が必要なので Rails 6 を使う場合は Node.js をインストールしてください。
  2. Rails 6 を使う場合は Yarn もインストールします。 Rails 7 では任意です。
    Node.js をインストール後、コマンドプロンプトから “npm install --global yarn” で
    インストールできました。 この場合は Yarn 1 がインストールされます。
    インストーラー ( msi ) も用意されています。 この時、最新版は Yarn 2 なのですが、Rails
    では Yarn 1 を使うので ( たぶん。もしかしたら Yarn 2 でも動くかもしれません。 その時は Yarn 2 を使ってください。 ) Yarn 2 のページの上部の

    をクリックして Yarn 1 に移動してこちらをインストールしてください。
    ちなみに、『INSTALL YARN』をクリックして Alternatives の
    『Click to expand / collapse』をクリックし、 Windows の Classic Stable (1.22.19) を選択して『Download Installer』をクリックしてインストーラをダウンロードし、それを実行すれば良いはずです。
  3. MSYS2 をインストールします。
    MSYS2 のページ で 『 msys2-x86_64-xxxxxxxx.exe 』 をクリックしてインストーラをダウンロードし実行します。 全てデフォルトでインストールするのが無難なようです。 その場合は c:\msys64 フォルダに インストールされるはずです。 インストールの最後に MSYS2 のターミナルが開きますが、ここでは何もせずに exit してください。 なお、DevKit 付きの Rubyinstaller でインストールする場合は、Ruby のインストール終了後に自動的に MSYS2 のインストーラが実行されるようです。
  4. Ruby を入れるフォルダを作ります。
    任意の場所に Ruby を入れるフォルダを作ります。 フォルダ名には空白を含めないようにしてください。 例えば、C:\trial\ruby などとします。 ruby フォルダの下に bin フォルダと workspace フォルダを作ります。 bin フォルダには Ruby 本体を入れます。 workspace フォルダで Rails アプリを作ったりします。
    • C:\trial\ruby\
      • bin\
      • workspace\
    という感じ。
  5. windows 用の 64bit 版 Ruby をダウンロードします。
    例えば、RubyInstaller の場合は、『 ダウンロード 』 ボタンをクリックし 『 Other Useful Downloads 』 の 『 7-ZIP ARCHIVES 』 から 2.4 以降で 『 (x64) 』 が付いたものをダウンロードしてください。
  6. ダウンロードしたファイルを解凍します。
    ・・・\ruby\bin フォルダの下にダウンロードした Ruby のバージョンに合わせて ruby-xx.yy.zz-x64 フォルダを作って、そこに、 7-ZIP を使って解凍します。
    • C:\trial\ruby\
      • bin\
        • ruby-xx.yy.zz-x64\
          • ここに Ruby のファイル群
      • workspace\
    という感じ。
  7. Ruby への PATH を設定します。
    windows のコマンドプロンプトで表示されるフォルダにバッチファイルを作成します。 例えば、ruby-xx.yy.zz-x64.bat とします。 そのバッチファイルに下記のように記述します。
    ただし、Ruby 3.1.0 から開発環境が MSVCRT から UCRT に変更されているので、4 行目が異なります。
    Ruby 3.0 以前の場合は
    ruby-xx.yy.zz-x64.bat
    
    1
    2
    3
    4
    5
    
    set RUBYOPT=-EUTF-8
    PATH = C:\trial\ruby\bin\ruby-xx.yy.zz-x64\bin;%PATH%
    set MSYS2_PATH_TYPE=inherit
    call C:\msys64\msys2_shell.cmd -mingw64 -where "C:\trial\ruby\workspace"
    cd C:\trial\ruby\workspace
    
    Ruby 3.1 以降の場合は
    ruby-xx.yy.zz-x64.bat
    
    1
    2
    3
    4
    5
    
    set RUBYOPT=-EUTF-8
    PATH = C:\trial\ruby\bin\ruby-xx.yy.zz-x64\bin;%PATH%
    set MSYS2_PATH_TYPE=inherit
    call C:\msys64\msys2_shell.cmd -ucrt64 -where "C:\trial\ruby\workspace"
    cd C:\trial\ruby\workspace
    
    1 行目
    Rails のみ使用する場合は必要ないと思うのですが、文字コードが UTF-8 で記述されたスクリプトファイルを Ruby で直接実行する場合に必要です。
    2 行目
    Ruby への PATH を設定します。
    3 行目と 4 行目
    任意です。 MSYS2 付属のターミナルを使用する場合に必要です。 windows のコマンドプロンプトから ridk exec を付けてコマンドを実行すれば MSYS2 のターミナルは不要です。 例えば、ridk exec pacman xxx や ridk exec rails new xxxx など。
    3 行目
    windows の PATH を MSYS2 のターミナルでも有効になるよう設定します。
    4 行目
    MSYS2MinGW 64-bit 用のターミナルを開きます。 MSYS2 のインストールで作成されたスタートメニューの MSYS2 MinGW 64-bit を参考にしました。
    Ruby 3.0 以前をインストールする場合は mingw64 用、Ruby 3.1 以降をインストールする場合は ucrt64 用のターミナルを開くようにします。
    -where オプションでターミナルが開いた後のカレントフォルダを workspace に設定します。 先頭に call を付けないと 5 行目が実行されないので注意してください。
    5 行目
    カレントフォルダを workspace に移動します。
    これで、コマンドプロンプトを開いた後、ruby-xx.yy.zz-x64.bat を実行することで Ruby が使用できるようになります。 windows のコマンドプロンプトと MSYS2 のターミナルの 2 つが開きますが、gem ライブラリのインストール ( rails new ・・・, bundle install, bundle update, gem install ・・・ 等 ) の時だけ MSYS2 のターミナルを使い、それ以外はコマンドプロンプトを使うのが良いと思います。 なお、windows のコマンドプロンプトからでも ridk exec の後にコマンドを記述すると MSYS2 の環境でコマンドが実行されるので、gem や bundle コマンドも使えます。 たとえば、『 ridk exec bundle update 』 など。

    しかし、ちょっと困ったことがあります。 MSYS2 のターミナルから rails server コマンドを実行すると Ruby のプロセスが 2 つ起動されるのですが、Ctrl-C で rails server を終了すると Ruby のプロセスが 1 つ残ってしまい、続けて rails server するとエラーが発生します。 この場合、残った Ruby のプロセスを windows 側 ( タスクマネージャーや taskkill コマンド等 ) から終了するしか方法が無いようです。 原因は不明です。 私の PC だけの現象かもしれません。 Ruby をインストーラでインストールしなかったためかもしれません。 なお、windows のコマンドプロンプトから rails server した場合は、Ctrl-C で rails server を終了すると、Ruby のプロセスが 2 つとも終了します。 なので、rails server も windows のコマンドプロンプトから実行するのが無難なようです。

    もう一つ。 windows のコマンドプロンプトと MSYS2 のターミナルとではホームフォルダが異なり、 MSYS2 では c:\msys64\home\ユーザ名 がホームフォルダになります。 そのため、コマンドプロンプトで使用していたコマンドの設定が MSYS2 に引き継がれません。再度、 MSYS2 にてコマンドの設定をするか、コマンドプロンプトのホームにある設定ファイル ( 例えば git for windows の場合は .gitconfig ファイル ) を MSYS2 のホームにコピーしてください。
  8. MSYS2 に開発用のコマンド類をインストールします。
    MSYS2 のターミナルで下記の 2 行を実行してください。 全てデフォルトでかまいません。
    ただし、Ruby 3.1.0 から開発環境が MSVCRT から UCRT に変更されているので、インストールするものが異なります。
    Ruby 3.0 以前の場合は
    $ pacman -Sy pacman
    $ pacman -S base-devel mingw-w64-x86_64-toolchain
    
    Ruby 3.1 以降の場合は
    $ pacman -Sy pacman
    $ pacman -S base-devel mingw-w64-ucrt-x86_64-toolchain
    
  9. SQLite3 を入れなくても Rails が動くようです。 お手数をかけて申し訳ありませんでした。
    一応残しておきます。
    1. SQLite3 をダウンロードします。
      SQLite Home Page で、『 Download 』 ボタンをクリックし、64 bit 版の Ruby に合わせて 『 Precompiled Binaries for Windows 』 の 『 sqlite-dll-win64-x64-3280000.zip 』 ( 2019 年 4 月現在 ) をダウンロードします。
    2. sqlite3.dll を Ruby の bin フォルダにコピーします。
      ダウンロードしたファイルは zip ファイルなので、エクスプローラーで中に入っている sqlite3.dll ファイルを ・・・\ruby\bin\ruby-xx.yy.zz-x64\bin にコピーします。
      • C:\trial\ruby\
        • bin\
          • ruby-xx.yy.zz-x64\
            • bin\
              • ここに sqlite3.dll をコピーする
        • workspace\
      という感じ。
  10. gem 本体を最新の状態にします。
    $ gem update --system
    
  11. Rails をインストールします。
    $ gem install rails
    
    ここでエラーになった場合は、諦めて、日を改めて、再度、Rails をインストールしてみてください。 ここでエラーになるのは、エラーになった gem ライブラリが今回インストールしたバージョンの windows 版 Ruby に対応していないことが原因だと思います。 何らかの対応策があると思いますが、わかりません。 バージョンを下げてインストールしなおすか、そのバージョンに対応されるまで待つのが良いと思います。 例えば、Rails で使われる nokogiri も、Ruby 2.6.0 が 2018 年 12 月 25 日にリリースされ、 nokogiri は 2019 年 1 月 4 日に windows 版 Ruby 2.6 に対応したものがリリースされています。

以上で Rails が windows に入ったはずです。


でも、rails sever すると

・・・cannot load・・・(LoadError)・・・

のようなエラーメッセージが出た時は、十中八九、windows 版 Ruby 用のファイルが無い場合です。 このような場合でも日を改めて該当する gem ライブラリを再インストールすればエラーが出なくなることがあります。 sqlite3 がそうでした。 でも、対応されない場合もあるようです。 bcrypt がそのようで、Ruby 2.6 以降は提供されていないようです。 この場合は次の手順で小細工をします。 でも、Ruby 2.6.3、Rails 5.0.7.2 では、最新の bcrypt 3.1.13 がインストールできました。 mingw32 版が無くてもインストールできました。 bcrypt については小細工が不要かもしれません。

  1. Ruby のバージョンに対応したフォルダがあることを確認します。
    例えば、
    • C:\trial\ruby\
      • bin\
        • ruby-xx.yy.zz-x64\
          • lib\
            • ruby\
              • gems\
                • xx.yy.0\
                  • gems\
                    • gemライブラリ名-バージョン-x64-mingw32\
                      • lib\
                        • 2.0\
                        • 2.1\
                        • 2.2\
                        • 2.3\
    という感じ。 なお、最後の lib\ の下にもう一段 gem ライブラリ名 というフォルダがある場合もあります。



    • lib\
      • gem ライブラリ名\
        • 2.0\
        • 2.1\
        • 2.2\
        • 2.3\
    という感じ。
    フォルダがこのような構成になっていない場合は、ネットで調べてください。 なお、2.3 のフォルダ等いくつか無い場合もありますが、何らかの Ruby のバージョンに対応した フォルダがあれば良いはずです。 以降は、フォルダがこのような構成になっていることを前提に記述します。
  2. gem ライブラリの Ruby のバージョンに対応したフォルダがある所に xx.yy フォルダを作成します。



    • lib\
      • gem ライブラリ名\ )
        • 2.0\
        • 2.1\
        • 2.2\
        • 2.3\
        • xx.yy\
    という感じ。
  3. gem ライブラリをコンパイルします。
    $ gem install <gem ライブラリ名> --platform=ruby
    
    なお、 sqlite3 については、 RubyInstaller2 にコンパイル方法が記述されており、
    $ pacman -S mingw-w64-x86_64-sqlite3
    $ gem install sqlite3 --platform ruby
    
    とした方が良いみたいです。 windows のコマンドプロンプトから実行する場合は
    $ ridk exec pacman -S mingw-w64-x86_64-sqlite3
    $ gem install sqlite3 --platform ruby
    
    だそうです。
    RubyInstaller2 には、 nokogiri についても記述がありますが、 nokogiri の gem には対応する Ruby のバージョンが指定されているようなので、急がない場合は、対応されるまで待った方が良いと思います。

    ここでエラーになったら、ネットで調べてください。
  4. コンパイルで作成されたファイルを xx.yy フォルダにコピーします。
    • C:\trial\ruby\
      • bin\
        • ruby-xx.yy.zz-x64\
          • lib\
            • ruby\
              • gems\
                • xx.yy.0\
                  • gems\
                    • gem ライブラリ名-バージョン\
                      • lib\
                        • gem ライブラリ名\ )
                          • ファイルタイプが so のファイルを
                    • gem ライブラリ名-バージョン-x64-mingw32\
                      • lib\
                        • gem ライブラリ名\ )
                          • 2.0\
                          • 2.1\
                          • 2.2\
                          • 2.3\
                          • 2.4\
                            • ここにコピーする。
    という感じ。

以上です。
今後、新しいバージョンの Ruby を入れる場合も、上記と同様の方法で、 RubyInstaller または RubyInstaller2 から 7-ZIP で圧縮されたファイルをダウンロードし、 C:\trial\ruby\bin フォルダに新しいフォルダを作って解凍します。 そして、バッチファイルも新しいものを作り、新しい Ruby への PATH を設定すれば良いと思います。 この場合、コマンドプロンプトを開いた後、バッチファイルを選択することで Ruby の環境を切り替えられます。 Ruby の環境を切り替えたい時はコマンドプロンプトを開き直すという手間がいるのが邪魔くさいですが。

inserted by FC2 system