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

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

ただいまの
回答率

88.92%

bundle installで書き込み許可がなくエラー発生

解決済

回答 1

投稿

  • 評価
  • クリップ 0
  • VIEW 193

hocca

score 3

前提・実現したいこと

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

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • raccy

    2020/07/17 20:22

    "user_name"の部分に漢字やカタカナ、または、スペースが含まれていたりしますか?

    キャンセル

  • hocca

    2020/07/18 15:31

    漢字が含まれています

    キャンセル

回答 1

checkベストアンサー

0

次のどちらかを検討してください。

  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とかのコマンドが使える)が必要です。

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2020/07/18 23:02

    新規ユーザーを作成する方法で解決することができました。
    詳細な手順まで教えてくださり助かりました、本当にありがとうございました。

    キャンセル

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

  • ただいまの回答率 88.92%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る