Ruby(Rails)を始めたばかりで手探りの状態で、ネットなどを見ながら勉強をしています。
その途中でテストフレームワークRSpecを使い方法を試している際にエラーが発生してしまいました。
Windows環境でrspec:installを実行
環境の準備などは終わっている状態で、rspec-railsをインストールした後に以下のコマンドを実行する際に、エラーが発生しました。
$ rails g rspec:install
identical .rspec
exist spec
create spec/C:/Users/oooo/AppData/Local/Temp/~/spec/spec_helper.rb
C:/Ruby24/lib/ruby/2.4.0/fileutils.rb:252:in `mkdir': Invalid argument @ dir_s_mkdir - C:.... (Errno::EINVAL)
...
とりあえず、エラーメッセージで検索をしてみたところ、rspec-railsのissue#1555が見つかりました。そこを眺めてみると、テンポラリーディレクトリの確認等が行われていたので、自分の環境を確認してみる事にしました。
テンポラリーの場所を確認と変更
とりあえずRuby上で環境変数とテンポラリーディレクトリがどうなっているのか確認してみました。
irb(main):001:0> require 'tempfile'
=> true
irb(main):002:0> Dir.tmpdir
=> "C:/Users/oooo/AppData/Local/Temp"
irb(main):003:0> p ENV['TMPDIR']
nil
=> nil
C:/Users/oooo/AppData/Local/Temp がテンポラリのディレクトリとなっているようであり、原因まではわかりませんがここだと問題があるようです。
そこでShellに
export TMPDIR=c:/tmp
を定義して先程のコマンドを実行してみました。
irb(main):001:0> require 'tempfile'
=> true
irb(main):002:0> Dir.tmpdir
=> "C:/tmp"
irb(main):003:0> p ENV['TMPDIR']
"C:\\tmp"
=> "C:\\tmp"
テンポラリーディレクトリと環境変数が設定した値になっている事は確認できました。
rspec:installに再挑戦
テンポラリーディレクトリが切り替わったので、rspec:installをもう一度試してみる事にしました。
$ rails g rspec:install
create .rspec
create spec
create spec/spec_helper.rb
create spec/rails_helper.rb
とりあえず、エラーが発生せずに処理が終わったことが確認できました。
まだRuby自体も始めたばかりなので、もっといい方法があるのかもしれませんが、今の段階ではこれで解決としました。