WindowsにRubyOnRailsをインストールする方法
WindowsにRubyOnRainsをインストールする手順です。
今後 Ruby と Rails を使った案件が発生しそうだったので、久しぶりに環境構築しました。RonRなんてもう何年振り?!・・・記憶では・・8年・・世界が違うのですね・・・orz
まず最初にお伝えしないといけないのは、SSL関連のエラーが出たので「https://rubygems.org/」でのアクセスはしていません。この辺りに問題がある方は、別の記事を参照ください。
これから WindowsでRubyOnRailsの環境構築 をされる方のお役に立てればうれしいです。
目次
Rubyをインストールする
まずは Ruby のインストーラーを下記のサイトからダウンロードしましょう。
今回は Ruby 2.3.0 をダウンロードします。
ダウンロードしたファイルを実行し、インストーラを起動します。
下図の画面まできたら、「Ruby の実行ファイルへ環境変数 PATH を設定する」にチェックを入れます。インストール先は「C:/Ruby23」とします。
インストールが完了したらコマンドプロンプトを起動して以下をコマンドを実行して Ruby のバージョンをチェックします。
rubyコマンドが使えない場合はPCを再起動しましょう。
>ruby -v
ruby 2.3.0p0 (2015-12-25 revision 53290) [i386-mingw32]
DevKitをダウンロードする
次に DevKit をダウンロードしましょう。
上記と同じページの下の方に「DEVELOPMENT KIT」というものがあります。ここでは DevKit-mingw64-32-4.7.2-20130224-1151-sfx.exe をダウンロードします。
ダウンロードしたファイルを実行すると、下図のように解凍先のパスを指定する画面が出ます。ここでは「C:/Ruby23/devkit」としました。
解凍が終わったらコマンドプロンプトから下記のコマンドを実行します。
>ruby C:/Ruby23/devkit/dk.rb init
>ruby C:/Ruby23/devkit/dk.rb install
RubyGemsのアップデート
RubyGems とは、Ruby 言語用のパッケージ管理システムであり、Ruby のプログラムと "gem" と呼ばれるライブラリの配布用標準フォーマットを提供しているものです。正直、ここからハマりました^^;
まず、下記のコマンドを実行してください。
>gem update --system
なんのエラーも出ず、アップデートが完了した方は次のステップ「Bundlerのインストール」に進んでください。
下記のエラーが出た方は、プロキシ環境下の可能性があります。
ERROR: While executing gem ... (Gem::RemoteFetcher::UnknownHostError)
no such name (https://rubygems.org/specs.4.8.gz)
環境変数を設定することで回避できますので、下記のコマンドを実行しましょう。
>setx http_proxy http://proxy.exsample.com:8080 -m
exsample.com部分とポート番号(:8080)部分は、環境に合わせて変更してください。
もう一度実行して、下記のエラーが出た場合は要注意です。
Error fetching https://rubygems.org/:
SSL_connect returned=1 errno=0 state=SSLv3 read server certificate B: certificate verify failed (https://rubygems.org/specs.4.8.gz)
冒頭にも書きましたが、解決できていません。何をどう試したかは後述します。SSL 証明書を見つけることができないエラーのようです。HTTPS 接続に失敗しているのが原因っぽいので、HTTP 接続に変えちゃいます。なんのエラーも出てない方は、次のステップ「Bundlerのインストール」に進んでください。
現在の RubyGems のバージョンを確認しておきます。
>gem -v
2.5.1
下記のコマンドを実行します。
>gem source --list
*** CURRENT SOURCES ***
https://rubygems.org/
この https 部分を http に変更します。「souce -a」オプションで http の URL を指定します。
>gem source -a http://rubygems.org/
https://rubygems.org is recommended for security over http://rubygems.org/
セキュリティ上 https を推奨するとメッセージが出ます。ここはyとます。
Do you want to add this insecure source? [yn] y
http://rubygems.org/ added to sources
「souce -r」オプションで https の URL を削除します。
>gem source -r https://rubygems.org/
https://rubygems.org/ removed from sources
ちなみにこの設定は .gemrc に記述されています。場所は下記になります。
Windows7以降:C:/Users/ユーザー名.gemrc
改めて RubyGems のアップデートをおこないます。
>gem update --system
アップデートが終わったら、バージョンを確認します。
>gem -v
2.6.6
Bundlerのインストール
Bundler とは、Ruby のライブラリ管理ツールの事です。ライブラリのバージョン違いで動作しない問題を解決できます。特にチーム開発の際、何をインストールしたか意識しなくてよいので便利です。
下記のコマンドを実行します。
>gem install bundler
インストールが終わったら、バージョンを確認します。
>bundler -v
Bundler version 1.12.5
Railsのインストール
さて、いよいよ Rails をインストールします。
下記のコマンドを実行します。
>gem install rails --no-ri --no-rdoc
インストールが終わったら、バージョンを確認します。
>rails -v
Rails 5.0.0
ちなみにオプション「--version」を指定することで特定のバージョンをインストールすることもできます。
>gem install rails --version="~> 4.2.3" --no-ri --no-rdoc
Node.jsのインストール
Node.js はイベント化された入出力を扱う Unix 系プラットフォーム上のサーバーサイド JavaScript 環境のことです。これをを入れないと、scaffold で作ったアプリケーションで Type Error が発生するようです。
下記のサイトからダウンロードしてください。
ここでは「node-v6.2.2-x86.msi」をダウンロードしました。ダウンロードファイルを実行してインストールしましょう。全て「Next」で進んで構いません。
インストールが終わったら、下記のコマンドを実行してバージョンを確認します。
>node -v
v6.2.2
SQLiteのインストール
さて、ここからは少し手間がかかります。通常であれば「gem install sqlite3」のコマンド実行でよいと思うのですが、Ruby 2.3.0の場合、このコマンドでインストールすると、「scaffold」実行時に下記のエラーが出ます。
>gem install sqlite3
C:/Ruby23/lib/ruby/gems/2.3.0/gems/sqlite3-1.3.11-x86-mingw32/lib/sqlite3.rb:6:in `require': cannot load such file -- sqlite3/sqlite3_native (LoadError)
このエラーの原因はエラーの場所に行ってみればわかります。
このように「2.3」というディレクトリがなく、「sqlite3_native.so」が見つからないというエラーでした。そこで Ruby 2.3.0 用の sqlite3_native ファイルを作る必要があります。
下記の SQLite ダウンロードページへアクセスします。
Source Code の「sqlite-autoconf-3130000.tar.gz」をダウンロードします。
Precompiled Binaries for Windows の「sqlite-dll-win32-x86-3130000.zip」もダウンロードします。
まず「sqlite-autoconf-3130000.tar.gz」を解凍して適当な場所に配置します。
ここでは「C:/sqlite-autoconf-3130000」とします。
次に「sqlite-dll-win32-x86-3130000.zip」を解凍して、Ruby の実行ファイルがある場所にコピーします。ここでは「C:/Ruby23/bin」となります。
下記のコマンドを実行します。
>gem install sqlite3 -v "=1.3.11" --platform=ruby -- --with-sqlite3-include=C:/sqlite-autoconf-3130000 --with-sqlite3-lib=C:/Ruby23/bin
-v "=1.3.11" :
インストールするバージョンを指定しています。 バージョンを指定していないと最新版がインストールされるようです。
--platform=ruby :
環境にあった gem が使用されます。 デフォルトだと x86-mingw32 版になるので、明示的に指定しています。
オプション | パス | 例 |
---|---|---|
--with-sqlite3-include | 解凍したソースファイルの場所 | C:/sqlite-autoconf-3130000 |
--with-sqlite3-lib | sqlite3.dll をコピー場所(ruby.exe のある場所) | C:/Ruby23/bin |
ビルドしているのは、 sqlite3.dll ではなく、 それを ruby から使うための Native 拡張ライブラリー sqlite3_native.so です。ソースファイルは "sqlite3.h" を使用しています。
この辺りは「プログラマーズ雑記帳」さんが詳しく書かれていますので、参考にしてみてください。
・Windows 版 Ruby 2.0.0 で sqlite3 を使えるようにする プログラマーズ雑記帳
下記の場所に行ってみると、「sqlite3_native.so」が出来ていると思います。
C:/Ruby23/lib/ruby/gems2.3.0/gems/sqlite3-1.3.11/lib/sqlite3
不要な SQLite がインストールされている場合は、削除しましょう。
>gem uninstall sqlite3
動作確認用アプリを作成する
さて、環境も整ったので動作確認用アプリを作って検証しましょう。ここでは「C:/samples/rails」配下に Rails アプリを作ります。ご自身の環境に合わせて変更ください。
下記のコマンドを実行して作業ディレクトリを作ります。
>mkdir C:/samples/rails
>cd C:/samples/rails
>rails new hoge --skip-bundle
「rails new hoge」実行時に --skip-bundle オプションを付けると,アプリケーションソースコードの生成後に bundle install コマンドを実行しません。ここでオプションを付けたのは、SSL証明書エラーを回避するためです。SSL関連のエラーが出ていない場合は、こちらの操作は不要です。bundle install コマンドを実行してください。
下記のコマンドを実行します。
>cd hoge
>vim Gemfile
https を http に変更します。
source 'https://rubygems.org'
↓
source 'http://rubygems.org'
vi コマンドが扱えない方は、Gemfile を直接修正しても問題ありません。保存したら下記のコマンドを実行して、依存パッケージのインストールをおこないます。
>bundle install
結構時間がかかるので、気長に待ちましょう。
下記のコマンドを実行して、検証用アプリを作ります。
>rails g scaffold user name:string email:string
>rake db:migrate
下記のコマンドを実行して、アプリケーションを起動します。
>rails s
動作確認
ブラウザで http://localhost:3000/ を開いてみます。下図のような画面が出れば、Rails は正常に起動しています。
次に http://localhost:3000/users/ を開いてみます。
下図の画面から New User のリンクをクリックします。
Name と Email に何か入力して「Create User」ボタンを押下します。
「User was successfully created.」のメッセージが出れば動作検証はおしまいです。
参考サイト
当記事を執筆するにあたり、下記のサイトを参考にさせていただきました。ありがとうございます。
・Ruby on Rails 4.2 を Windows にインストールする手順をかなり丁寧に説明してみました - Rails 雑感 - Ruby on Rails with OIAX
・Windows10にRuby on Railsをインストール方法をやさしく解説 - [Skillhub (スキルハブ)]
SSL関連のエラーのまとめ
さて、冒頭で記載していた「SSL関連のエラー」が発生している問題。解決できていませんが、何をやったか掲載しておこうと思います。
まず、今回環境を作った Windows のネットワーク環境は、プロキシ配下にあります。冒頭の「RubyGemsのアップデート」で書いた通り、システム環境変数に http_proxy を追加しています。
RubyGems のバージョンは「2.5.1」と「2.6.6」で試しています。
ネット上の色々なサイトから得られた情報としては、下記のメッセージは RubyGems が SSL 証明書を見つけることができないエラーであるということがわかりました。
SSL_connect returned=1 errno=0 state=SSLv3 read server certificate B: certificate verify failed (https://rubygems.org/specs.4.8.gz)
「AddTrustExternalCARoot-2048.pem」を入れれば解決ということなので、じゃあ RubyGems の SSL 証明書ってどうなっているのよと思い、下記のコマンドをたたいて証明書の場所まで移動。
>gem which rubygems
C:/Ruby23/lib/ruby/site_ruby/2.3.0/rubygems.rb
>start C:/Ruby23/lib/ruby/site_ruby/2.3.0/rubygems
すると、こんな感じになっていました。
はい、「AddTrustExternalCARoot-2048.pem」ありました・・・。
証明書の場所を確認するコマンドをたていてみると、こんな感じに。
>ruby -ropenssl -e 'p OpenSSL::X509::DEFAULT_CERT_FILE'
C:/Users/Justin/Projects/knap-build/var/knapsack/software/x86-windows/openssl/1.0.1l/ssl/cert.pem
場所が違うのかと思って、乱暴ながら上記のディレクトリを作ってみます。こちらのページを参考に、「cacert.pem」をダウンロードし、「cert.pem」を配置してみました。
・Rubyのopensslの証明書が見つからない時ってどうすればいいの? - Qiita
実行したコマンドは下記のとおりです。
>cd C:/Users/Justin/Projects/knap-build/var/knapsack/software/x86-windows/openssl/1.0.1l/ssl
>curl -O http://curl.haxx.se/ca/cacert.pem
>cp cacert.pem cert.pem
こんな感じになりました。
「gem update --system」してみるも、結果は変わらず・・・・。
こちらのページに環境変数の設定で対応できると書いてありました。
・Windows上のRubyでSSL接続時にcertificate verify failedが出る場合の対処 - Qiita
環境変数に SSL_CERT_FILE を設定してみます。
>setx SSL_CERT_FILE C:/Ruby23/lib/ruby/2.3.0/rubygems/ssl_certs/AddTrustExternalCARoot-2048.pem
「gem update --system」してみるも、結果は変わらず・・・・。
と、ここまでやったところでお手上げ・・・と判断。HTTPS 接続を諦め、HTTP 接続で環境構築することにしました。
現在も解決策はわかっていません。
どなたかヒントがあればコメントいただけると助かります。
まとめ
いやー、友人たちからは「Linux ベースの Ruby は Windows じゃ環境作るの超大変だぜぃ」って聞いてたのですが、実際やってみるとホント大変・・・。正直、SSL関連の解決のために、丸1日使ってしまいました・・・。・・・なのに解決できず・・・。
8年前はどうしてたんだっけなぁ・・・。まったく思い出せない・・・。
とりあえず Ruby と Rails の習得が目的なので、環境構築はここまでにしておきます。今度は Windows10 でやってみようかなぁ・・・。bash も使えるって話だし。ただ Windows で Ruby はツライって聞くし、将来的には Vagrant とか検討しようと思ってます。
おつかれさまでした。