はじめに: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
は実行しないでください!
繰り返します。
sudo gem install rails
は実行しないでください!
sudo gem install rails
は実行しないでください!
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
$ ruby -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によってデフォルトで登録されるスクリプトのようです。
おそらく、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プログラマのみなさんに情報を教えていただきました。ご協力どうもありがとうございました。