質問: ### 前提・実現したいこと RubyでRspec学習のために、サイトの手順に従って環境構築をする際にbundle installを実行したところエラーが発生しました これを解決したいです ### 発生している問題・エラーメッセージ ``` There was an error while trying to write to `Bundler does not have write access to create a temp directory within C:/Users/user_name/AppData/Local/Temp. Bundler must have write access to your systems temp directory to function properly. `. It is likely that you need to grant write permissions for that path. ``` ### 該当のソースコード ``` # frozen_string_literal: true source "https://rubygems.org" git_source(:github) {|repo_name| "https://github.com/#{repo_name}" } gem "rspec", ">= 3.0.0" ``` ### 試したこと bundle installのパーミッションエラーについて、.bundle/configに BUNDLE_PATH: vendor/bundle と記述するようにという記事がありましたが、私はこれでは解決しませんでした ### 補足情報(FW/ツールのバージョンなど) Windows10 OS ruby 2.6.5 Bundler version 2.1.4
回答: 次のどちらかを検討してください。 1. **英数字のみのユーザー名でWindowsのユーザーを作り直して、そのユーザーで開発してください。** 2. **WSLを使用してください。** 【1.の解説】 RubyおよびRubyの各ライブラリ(bundlerを含む)は元々UNIX/Liunx向けに作られているため、Windows特有の処理について対応できていない所があります(これは、Ruby以外のUNIX/Linux向けに作られた多くのプログラミング言語で言えることなので、Rubyだけの特徴ではありません)。特にファイル名やディレクトリ名にASCII(英数字等)以外の文字(漢字やひらがな等)が含まれていると、文字コードを正しく処理する必要があるのですが、Windowsでは、ASNIとしてはWindows-31J、ワイド文字としてはUTF-16と内部処理が複数の文字コードを扱えるところに、Rubyは内部エンコードがデフォルトでUTF-8なのですが、コンソール表示はそのコンソールの文字コード(Windows-31Jだったり、UTF-8だったり)にあわせる必要があるなど、かなり複雑な処理が必要です(現在ほとんどのUNIX/LinuxはUTF-8で統一されているため、あまり問題は起きません)。そのため、**ファイルやディレクトリのパスの途中に漢字などのASCII以外の文字が含まれる場合、文字の処理がうまくいかず、対象のファイルやディレクトリにアクセスできない現象が発生する事があります。**(これ以外にも、スペースが含まれるとうまくいかない場合があります。これは、シェル経由で実行しようとする場合に発生しますが、現在は稀です。) 解決方法は三つです。 1. 原因を追及し、Rubyまたはライブラリを修正する。 2. 漢字等が含まれないパスになる場所を指定する。 3. 漢字等が含まれないパスになるように環境を変更する。 最初の1.はかなりの知識が無いと難しいです。もし、簡単にできるのであれば、既に修正されているはずだからです。次の2.ですが、今回はTEMPの場所なので、そこの環境変数だけを変えればうまくいくかも知れません。ただ、何を変えれば良いのかを詳しく調べる必要がありますし、また、どこかでまた同じことが発生する度に、対応が必要になってきます。 ということで、最終的な3.が一番簡単です。漢字の部分はユーザー名です。つまり、ユーザー名さえ、英数字であれば問題ないと言うことです。 既存のユーザーのユーザー名を変更する方法は一応あります。しかし、**お勧めはしません。**まず、ユーザー名だけではなく、ユーザーのプロファイルディレクトリを変更する必要があるからです。これを変更するには、GUIで名前を変更というようなやり方ではできません。Windowsがどのようにプロファイルを持っているのか(あるレジストリに書いてあるのですが)等をよく知った上で、手動でファイルの移動やレジストリの変更等をする必要があります。中途半端な知識ではトラブルの元なので、安易に行ってはいけません。(操作方法を間違うと、最悪ログインできなくなります) ということで、既存のユーザーはすっかりサッパリ諦めて、新規に英数字のみのユーザーを作成してください。それが一番簡単で、確実です。以下、その手順です。 1. 設定→アカウント→家族とその他のユーザー→その他のユーザーをこのPCに追加 2. 「このユーザーのサインイン情報がありません」をクリック 3. 「Microsoftアカウントを持たないユーザーを追加する」をクリック 4. ユーザー名を英数字のみにして適当に作成 5. 作成後、作成されたユーザーについて「アカウントの書類の変更」を押して、必要であれば「管理者」に変更 Microsofアカウントの紐付け等が必要な場合は、後で行ってください。ドキュメント等にあるファイルは移行されませんので、適当にコピーしてください。各アプリの設定の移行は難易度が高いため、設定し直しする事をお勧めします。 【2.の解説】 上で述べたとおり、Windows特有の問題が発生する可能性が高いことを述べました。逆に言うとLinux環境では問題は起きないと言うことです。Windows 10には簡単に用意できるLinux環境を公式に備わっています。それが、 Windows Subsystem for Linux (WSL) です。Windows特有の問題に悩まされたくない場合は、WSLを用いることをお勧めします。ただし、WSLを利用にあたって、次のことに注意してください。 * Windows 10 64bitである必要があります。(WSL2は32bitでも可能という情報がありますが、不明です) * WSL2はWindows 10 2004にアップデートしておく必要があります。(WSLはそれ以前も可能) * Linuxについての基礎的な知識(少なくともターミナルでcdとかのコマンドが使える)が必要です。