【2023年版】"Rails is not currently installed on this system."というメッセージが出たときの対処方法

## はじめに：sudo gem install railsは実行するな！
初心者さんが新しいMacにRailsの開発環境をセットアップすると、`rails -s`や`rails -v`を実行したときに以下のようなメッセージが表示されることがあります。

```
$ rails -v
Rails is not currently installed on this system. To get the latest version, simply type:

    $ sudo gem install rails

You can then rerun your "rails" command.
```

日本語訳はこんな感じです。

```
Railsは現在このシステムにはインストールされていません。最新バージョンを入手するには、次のように入力してください：

    $ sudo gem install rails

そうすれば "rails" コマンドを再実行できます。
```

「エラーが出たらちゃんとエラーメッセージを読むんだ！」という先輩プログラマの助言に従うと、ここは `sudo gem install rails` を実行すべきと思うかもしれませんが、そうではありません。

`sudo gem install rails`は実行しないでください！

繰り返します。

:::note alert
`sudo gem install rails` は実行しないでください！
:::

:::note alert
`sudo gem install rails` は実行しないでください！
:::

:::note alert
`sudo gem install rails` は実行しないでください！
:::

大事なことなので3回言いました。

`sudo`を付けて`gem install rails`すると、予期せぬ問題に遭遇しやすい開発環境ができあがってしまいます。

「ちゃんとエラーメッセージを読め（読んでその指示に従え）」というルールはこのときだけは無視しないといけません（なんとややこしい……）。

## じゃあどうすればいいの？

以下の内容はrbenvでRubyのセットアップを行った、という前提で説明します。
なお、動作確認した環境は以下の通りです。

- macOS Ventura 13.4.1
- MacBook Pro 13-inch, M1, 2020
- rbenv 1.2.0

### ターミナルを再起動する

ターミナルで`which -a rails`というコマンドを実行してください。

```
$ which -a rails
/usr/bin/rails
/Users/your-name/.rbenv/shims/rails
```

上のように、`/usr/bin/rails`が最初に表示されていると、"Rails is not currently installed on this system."のメッセージが表示されます。

この状態になっていたら、ターミナルを一度全部閉じて、もう一度開き直してください。
そして、`which -a rails`をまた実行して、`/usr/bin/rails`が先頭に来ていないことを確認してください。

```
# ターミナル再起動後
$ which -a rails
/Users/your-name/.rbenv/shims/rails
/usr/bin/rails
```

この状態になっていれば、"Rails is not currently installed on this system."のメッセージは表示されないはずです。

```
$ rails -v
Rails 7.0.5
```

### ターミナルを再起動してもダメな場合

`ruby -v` でRubyのバージョンを確認してください。

```
$ ruby -v
ruby 2.6.10p210 (2022-04-12 revision 67958) [universal.arm64e-darwin22]
```

このとき、上記のように`universal.arm64e-darwin22`（Apple siliconの場合）や、`universal.x86_64-darwin21`（Intel chipの場合）のように、`universal` という文字が見えた場合は、macOS標準のRuby（systemにインストールされたRuby）が使われています。
そうすると"Rails is not currently installed on this system."のメッセージが表示されます。

次に`rbenv versions`でインストールされているRubyのバージョンと現在選択されているRubyを確認してください。

```
$ rbenv versions
* system
  3.1.1
  3.1.2
  3.2.0
  3.2.1
  3.2.2
```

このとき、"system"に`*`が付いていた場合はmacOS標準のRubyが使われています。

以下のどちらかのコマンドでmacOS標準以外のRubyを選択してください。

```
# マシン全体のデフォルトのバージョンを3.2.2とする
$ rbenv global 3.2.2

# カレントディレクトリにいる間だけ、バージョン3.2.2とする
$ rbenv local 3.2.2
```

こうすれば`universal`の付かないRubyのバージョンが表示されるはずです。

```
$ ruby -v
ruby 3.2.2 (2023-03-30 revision e51014f9c0) [arm64-darwin22]
```

`rbenv versions`でも上で指定したRubyのバージョンに`*`が付きます。

```
$ rbenv versions
  system
  3.1.1
  3.1.2
  3.2.0
  3.2.1
* 3.2.2 (set by /Users/your-name/.rbenv/version)
```

この状態であらためて`gem install rails`すれば、正常に`rails -v`できるはずです。

```
$ gem install rails
$ rails -v
Rails 7.0.5
```

### macOS標準でないRubyを使おうとしてもダメな場合

`curl -fsSL https://github.com/rbenv/rbenv-installer/raw/HEAD/bin/rbenv-doctor | bash`というコマンド（rbenv-doctor）をターミナルで実行してみてください。

```
$ curl -fsSL https://github.com/rbenv/rbenv-installer/raw/HEAD/bin/rbenv-doctor | bash
Checking for `rbenv' in PATH: /opt/homebrew/bin/rbenv
Checking for rbenv shims in PATH: OK
Checking `rbenv install' support: /opt/homebrew/bin/rbenv-install (ruby-build 20230424)
Counting installed Ruby versions: 33 versions
Auditing installed plugins: OK
```

rbenvのセットアップが正常に完了していれば上のようにすべて"OK"が表示されます。
何か問題があればその都度メッセージが表示されるので、そのメッセージに従って問題を解消していってください。
解決方法がわからない場合は先輩プログラマに助けを求めてください。

すべて"OK"にしたあとで、あらためて`gem install rails`すれば、正常に`rails -v`できるはずです。

```
$ gem install rails
$ rails -v
Rails 7.0.5
```

### rbenv-doctorが全部OKでもダメな場合

もしかするとPATHの設定がおかしいのかもしれません。ターミナル上で以下のコマンドを実行してください。

```
$ echo $PATH
```

このとき、`:/usr/bin:`よりも前に`:/Users/your-name/.rbenv/shims:`が表示されているかどうかを確認してください。

```
/Users/your-name/...略:/Users/your-name/.rbenv/shims:/opt/...略:/usr/bin:/usr/...略
```

この順番が逆になっている場合はPATHの設定に何か問題があるかもしれません。
`~/.zshrc`や`~/.zprofile`の内容におかしなところがないか確認してみてください。
「`~/.zshrc`や`~/.zprofile`を開いてもさっぱりわからん」という場合は先輩プログラマに助けを求めてください。

### それでもダメな場合

この記事のリンクを先輩プログラマに渡して「この記事のとおりにやってみたんですが、ダメでした！！😭」と助けを求めてください。

## Q. すでに sudo gem install rails しちゃった私はいったいどうすれば！？

この記事を読んでいる方は「どうしましょう、すでに `sudo gem install rails` しちゃったんですが😱」という人もおられるかもしれません。

そういう方は以下のような手順で、いったん各バージョンのRubyをアンインストールした方がいいかもしれません。
（そのまま使い続けると予期せぬ問題がまた起きて、繰り返しsudo付きのコマンドを実行したりするハメになりがち）

```
# 自分のマシンにインストールされているRubyのバージョンを確認
$ rbenv versions

# 対象のRubyバージョンをアンインストール
$ rbenv uninstall 3.2.2
```

それからもう一度RubyとRailsをインストールしてください。

```
$ rbenv install 3.2.2
$ gem install rails
$ rails -v
Rails 7.0.5
```

ただし、 `sudo gem install rails` を実行しているとディレクトリの削除ができず、アンインストールに失敗することも考えられます。
この場合の対処法はケースバイケースなので、一概に「これ」という手順を示すことはできません。
できれば頼れる先輩プログラマに助けを求めてください。

## ところでこのエラーメッセージは何なの？

冒頭で紹介した、

```
Rails is not currently installed on this system. To get the latest version, simply type:

    $ sudo gem install rails

You can then rerun your "rails" command.
```

というメッセージですが、このメッセージの出どころは`/usr/bin/rails`に書かれているRubyスクリプトです。

```
$ cat /usr/bin/rails
#!/usr/bin/ruby
# Stub rails command to load rails from Gems or print an error if not installed.
require 'rubygems'

version = ">= 0"
if ARGV.first =~ /^_(.*)_$/ and Gem::Version.correct? $1 then
  version = $1
  ARGV.shift
end

begin
  gem 'railties', version or raise
rescue Exception
  puts 'Rails is not currently installed on this system. To get the latest version, simply type:'
  puts
  puts '    $ sudo gem install rails'
  puts
  puts 'You can then rerun your "rails" command.'
  exit 0
end

load Gem.bin_path('railties', 'rails', version)
```

PATHの設定がおかしくなっていたりしてこのスクリプトがrbenv環境のRailsよりも先に読み込まれると、このメッセージが表示されてしまいます。

### このスクリプトは誰が何のために作ったの？

`/usr/bin/rails`はmacOSによってデフォルトで登録されるスクリプトのようです。

https://opensource.apple.com/source/ruby/ruby-145.40.1/extras/rails.auto.html

おそらく、macOS標準のRuby（systemにインストールされたRuby）でRailsを動かそうとした場合（かつ、まだRailsをインストールしていない場合）を想定しているのだと思いますが、Railsの開発をやろうとする人は99%、rbenvのようなバージョン管理ツールを使うはずで、macOS標準のRubyを使おうとする人は皆無だと思います。

なので、本当は`/usr/bin/rails`というスクリプトはなくて良いですし、`sudo gem install rails`を実行しろ、というメッセージも百害あって一利なしです。
ですが、いかんせん「macOSがデフォルトで用意しているRubyスクリプト」なので、「GitHubにpull requestを送る」みたいなこともできず、「さて、どうしたものか……」という状態になっています😓

## まとめ

というわけで、この記事では"Rails is not currently installed on this system."というメッセージが出たときの対処法を書いてみました。

"Rails is not currently installed on this system."というキーワードでネットを検索すると、多くの人がこのエラーに遭遇していることがわかります。

なるべくこの記事が検索の上位に上がって、`sudo gem install rails`を実行してしまう初心者さんが一人でも減ることを願っています🙏

## 謝辞

`/usr/bin/rails`というスクリプトの出どころについては、ruby-jpのSlackワークスペースで有志のRubyプログラマのみなさんに情報を教えていただきました。ご協力どうもありがとうございました。

https://ruby-jp.github.io/