質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.47%
Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Q&A

解決済

4回答

4200閲覧

Ruby on Railsの環境構築でのエラー

yasutaka0622

総合スコア3

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

0グッド

0クリップ

投稿2020/10/31 09:13

編集2020/11/01 15:02

前提・実現したいこと

Railsの環境構築

Rubyは最新のRuby+Devkit 2.7.2-1 (x64)をダウンロード済みで、bundleもダウンロード済みです。
sqlite3もダウンロード済みです。

発生している問題・エラーメッセージ

PS C:\Users\ユーザー名> gem install rails Temporarily enhancing PATH for MSYS/MINGW... Building native extensions. This could take a while... ERROR: Error installing rails: ERROR: Failed to build gem native extension. current directory: C:/Ruby27-x64/lib/ruby/gems/2.7.0/gems/websocket-driver-0.7.3/ext/websocket-driver C:/Ruby27-x64/bin/ruby.exe -I C:/Ruby27-x64/lib/ruby/2.7.0 -r ./siteconf20201031-12380-140p3my.rb extconf.rb creating Makefile current directory: C:/Ruby27-x64/lib/ruby/gems/2.7.0/gems/websocket-driver-0.7.3/ext/websocket-driver make "DESTDIR=" clean current directory: C:/Ruby27-x64/lib/ruby/gems/2.7.0/gems/websocket-driver-0.7.3/ext/websocket-driver make "DESTDIR=" generating websocket_mask-x64-mingw32.def compiling websocket_mask.c Cannot create temporary file in C:\Users?????\AppData\Local\Temp\: Invalid argument make: *** [Makefile:244: websocket_mask.o] エラー 3 make failed, exit code 2 Gem files will remain installed in C:/Ruby27-x64/lib/ruby/gems/2.7.0/gems/websocket-driver-0.7.3 for inspection. Results logged to C:/Ruby27-x64/lib/ruby/gems/2.7.0/extensions/x64-mingw32/2.7.0/websocket-driver-0.7.3/gem_make.out

試したこと

「Failed to build gem native extension. 」のエラー文を検索し、上記のエラー文に近い内容の
質問ページに記載されていた解決案を実行してみましたが、どれも同じ文面でエラーが出ました。
エラー文の内容のメインとしてはgem native extensionを作るのに失敗して、
gem fileがC:/Ruby27-x64/lib/ruby/gems/2.7.0/gems/websocket-driver-0.7.3にインストールされるはずが
C:/Ruby27-x64/lib/ruby/gems/2.7.0/extensions/x64-mingw32/2.7.0/websocket-driver-0.7.3にインストールされているのが
原因ということでしょうか?(該当ディレクトリを辿っていくと確かに上記の場所に「gem make.out」というファイルがありました。)
だとしてgem fileを指定のディレクトリにインストールさせる手順はあるのか、それとも全く間違えた見解なのかすら分かりません。

まだプログラミング自体に手をつけて半年ほどの未熟者です。
初歩的な問題であり、すでに答えのあるページがある可能性を考えると非常に申し訳ない気持ちがあふれますが、
どうか、お力添えをお願い致します。よろしくお願い致します。(かれこれ3週間くらい調べてて折れそうなんです。)

補足情報(FW/ツールのバージョンなど)

休日中であったにもかかわらず、
たくさんのご回答、非常に有益な情報提供が、
その日のうちに送られてきて、感涙です。
私の気持ちとしましては、全てのご回答に「ベストアンサー」です。

本当にたくさんのご回答ありがとうございました!
頂いた情報と私のようなアホのひよっこに温かい目をかけていただいた
そのエネルギーを糧に精進いたします!

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

m.ts10806

2020/10/31 09:22

過去質問など確認すると分かりますし、ネットでも言及されていることですが、Windows上にRails環境を構築するのはかなり敷居が高いです。 WSLとか、仮想環境でLinux系OS入れるのが確実です。 (幾度となく言及されているようなことたのであえて回答にはしません)
yasutaka0622

2020/10/31 09:32

早急なご対応ありがとうございます! それでは、WSL・Linux系OSについて勉強するところから始めてみます。
m.ts10806

2020/10/31 09:40

一応、簡単ですが回答しておきました。ご参考まで。 ※Railsチュートリアルは1度きちんと流しておいた方が良いです。私もまだ途中ですけど・・
guest

回答4

0

ベストアンサー

Windowsで失敗している人の原因はだいたい次のどれかです。

アカウント名に日本語が含まれる。

もし、PowerShellなどを起動したときに"C:\Users\寺尾"みたいな漢字等のASCII以外の文字になっている場合、様々な箇所でエラーが起きたりします。これは、Ruby自体は日本語を含めたマルチ言語対応になっていますが、さまざまなツールやライブラリの作者がマルチ言語をそこまで意識して作っていない場合があるからです。ここに日本語Windows特有の問題(ディレクトリのパスの取り方やエンコードに複数の方法がある)が桑って、ディレクトリのパスにASCII以外が含まれるとおかしくなる場合があります。ユーザーのディレクトリは関係無いと思うかも知れませんが、こういう場合、一時ファイルをおくテンポラリディレクトリが"C:\Users\寺尾\AppData\Local\Temp"といったようになったりするので、この問題が発生します。

なお、アカウントに日本語が含まれると、Ruby以外の様々なツール類でエラーが発生します。この現象を直すには単純にアカウント名を変更するだけではできず、高度な知識とレジストリ操作が必要です。ぶっちゃけ、作り直した方が早いです。日本語を含まないアカウント名を作り直して下さい。

参考記事記載のバージョンと異なるものを入れようとしている。

Windows7、Ruby2.2、Rails4での導入方法を書いた記事を参考に、Windows10、Ruby2.7、Rails6を入れるのはかなり厳しいところがあります。それぞれをわかっている人からいえば、バージョンの違いは大きくないのですが、実際に出てくるメッセージなり,注意すべき所とかは全く違います。

実は、このバージョン違いは0.0.1違うだけでも違うときがあります。その0.0.1の違いでバグが修正されていたり、逆に、新たなバグが発生したりするからです。その意味もわからず、別のバージョンを入れて動かないとか言う人が多すぎます。まずは、同じバージョンで確認すべきです。その記事の人はそのバージョンで確認しているのですから。

参考記事をよく読んでいない。

記事通りにやったけど動かないと言う人のほとんどは記事通りにやっていません。だいたい、何か一つ吹っ飛ばしています。課程が一つ抜けていれば動かないのは当然です。

まずは隅から隅まで読みましょう。コマンドはコピペで実行しましょう。間違わずに手打ちなんてプロでもできる物ではないのです。

よくあるのはコンパイル環境(Ruby IntallerのDevKit)をちゃんとセットアップしていなかったという物です。エラーが出て放置しているというのもあるかも知れません。

そもそも参考記事が古いまたは間違っている。

これが根本的に多いです。

まず、間違っているのは論外です。その記事を捨てて下さい。

次に古いことです。最新との違いがわかっている人であれば、古い記事でも参考にはなります。ですが、それは、古い記事を参考にしながら、最新情報を調べられる人の話です。初心者が古い記事を見ても、何の役にも立ちません。

まず、一年以上前の記事は見ないで下さい。一年経つとWindows 10は2回も大きなアップデートがあります。Rubyもマイナーバージョンが一つ上がります(今年はメジャーバージョンが上がりますが)。Railsもメジャーかマイナーのどちらかは上がっているでしょう。古い記事を参考に古いバージョン(例えば、いまならRails5)を入れてみるというのは一つの手かも知れませんが、それはそのまま新しいバージョンにも適用できるとは限らないのです。

その環境特有の問題。

たとえば、プロキシを通してしかインターネットに接続できない環境では、http_proxy、https_proxyといっは環境変数を設定しておくといったことがあります。その他には、セキュリティソフトウェア(トレンドマイクロやノートン、マカフィー等)が邪魔していたという事例も多いです。一般的ではない場合は、一般との違いも一緒に書かないと解決できない場合があります。

nokogiriやsqilte等のWindowsバイナリの罠に嵌まる。

最後にWindowsで扱いにくくしている元凶の話をします。これまでの話は、(アカウント名を日本語にできるかは不明なところもあるが)LinuxやMacでも言えることです。ここからはWindows特有の話です。

一般的なWindowsではOSに付属するような完全無料のCのコンパイル環境はありません(敢えて言えば、Build Tools for Visual Studio 2019でしょうが、ほとんどの人はこの存在を知りません)。そのため、オープンソースソフトウェアであっても、バイナリを用意しておくと言うのが主流でした。そのため、Rubyのライブラリを提供しているgemについてもWindowsについてはバイナリを用意するようになったのです。

さて、RubyのライブラリはRubyのみで書かれたものとCで書かれたものの二種類があります。Rubyのみで書かれた物はどんな環境でも動きますが、Cで書かれた物はそれぞれの環境でコンパイルしないと使えません。LinuxやMacではコンパイラが入っていることが普通、または、簡単に導入できる(コマンド一つ、または、Mac AppストアでXcode落として起動時に開発ツールをインストールするだけ)ので、Cで配って、その場でコンパイルされても問題ありません。しかし、Windowsでは用意されていないことが多数と思われるため、コンパイルした物を用意することにしました。

ここに大きな罠があります。Windows版Rubyは大きく分けるとCygwin版、Mingw版、MSVC版があり、それぞれx86とx64があります。Mingw版とMSVC版のC拡張ライブラリ(CのコードをコンパイルしたRubyで読み込めるラリぶらり)は互換性があるため同じ物が使えます。そんな感じで、x64のMingw版が用意するとしましょう。でも、ここで一つだけ用意すれば良いというわけではありません。RubyのC拡張ライブラリはマイナーバージョンが違うと互換性がないため、対応するマイナーバージョン毎に用意する必要があると言うことです。

例えば、いま、Ruby2.5以上でライブラリを作ったとしましょう。そうなると、Windowsのバイナリは、2.5、2.6、2.7の三種類用意する必要があります。もうすぐ3.0がでます。では、3.0はこれられのバイナリは使えません。そう、3.0のバイナリが用意されるまで、使えないと言うことになるのです。

さて、この話ですが、WindowsでもCはコンパイルすれば問題ありません。よく--platform=rubyをつけるといいよというやつは、このコンパイルしろという話です。ですが、これは自動的になりません。むしろ、3.0のバイナリがなくても3.0の環境でも入ってしまうでしょう。きづくのは、実際にRuby上で使おうとしたときに、はじめてバイナリがないというエラーが出ます。gem installは正常に成功するので、この仕組みをよく知らない人には原因がわからずおおきな悩みになります。

C拡張ライブラリのバイナリが全く用意されないライブラリでは、逆に常にコンパイルしようとするので、この問題は起きません。中途半端にバイナリを用意してしまったこと、そのバイナリがマイナーバージョン依存なのに、未対応マイナーバージョンを検知できないこと、そういった所が大きな問題だと思っています。ただ、Windows環境への対応はどうしても後回しなので、WindowsでのRubyは「わかっている大人向け」という渋い状態は続くと思います。


それでもWindowsで頑張りますか?

投稿2020/10/31 11:09

raccy

総合スコア21735

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yasutaka0622

2020/11/01 14:53

今まで見た記事より断然わかりやすく納得できました! 解決案に、たくさんの情報共有、非常にありがたいです。本当に励みになります。 Windowsと他でそこまで違いがあるんですね…。 頂いた情報とここまでご丁寧に回答して頂いたエネルギーを糧に、 精進します。 最後のメッセージに会心の一撃食らわせて頂きました。 現状windowsパソコンしか持っておりませんので、 今は基礎的な知識収集、勉強をして、 応用・実践できるレベルに達したところでMacに乗り換えますw ありがとうございました!
guest

0

このエラーは、テンポラリーディレクトリの名前に日本語が含まれているからです。

環境変数の設定で、TEMPTMPに、日本語が含まれない名前の、書き込める、一時ファイル用のディレクトリを指定してから、やり直しましょう。

投稿2020/10/31 13:30

otn

総合スコア84667

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

たった今、WindowsのRuby2.7でrailsアプリ(アプリ名:app)を作ってみましたが、
gem一式はアプリフォルダ(app)直下のvendor¥bundle配下にインストールされます。
ご参考まで。
イメージ説明

投稿2020/10/31 09:56

technocore

総合スコア7247

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

色々選ぶ先はありますが、私はVirtualBox+Ubuntuです。
いずれにしてもコマンドで色々やることのほうが多いので、先にLinux系OS入れてコマンドに慣れておくのが吉です。

※そのあたりすっ飛ばしたければCloud9がRailsチュートリアルでもすすめられています

投稿2020/10/31 09:36

m.ts10806

総合スコア80852

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.47%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問