【Rails】macOSのアップデート後にrailsコマンドが失敗する事象の対処法

2021年10月14日 15:18

はじめに

久しぶりにRailsアプリに手を入れようと思い、rails serverコマンドを実行してRailsサーバーを立ち上げようとしたところ、エラーが出て起動に失敗してしまいました。

前回までの間にしたことの中で思い当たることと言えば、macOSのアップデートを行ったくらいです。そういえば以前から何度かmacOSのアップデートを行った後にRailsサーバーが起動できなくなる事象に陥っていたような気がします。今後は同様の事象が出ても焦ることのないように対処法をまとめておきたいと思います。

事象:エラー内容

ターミナルでrails serverコマンドを実行し、Railsサーバーを起動しようとしたところ、以下のエラーが出て起動に失敗してしまいました(実際のエラーメッセージは流れてしまったのでネットからの拾い物)。

ERROR:  Loading command: install (LoadError)
    dlopen(/Users/user/.rbenv/versions/2.5.3/lib/ruby/2.5.0/x86_64-darwin18/openssl.bundle, 9): Library not loaded: /usr/local/opt/openssl/lib/libssl.1.0.0.dylib
  Referenced from: /Users/user/.rbenv/versions/2.5.3/lib/ruby/2.5.0/x86_64-darwin18/openssl.bundle
  Reason: image not found - /Users/user/.rbenv/versions/2.5.3/lib/ruby/2.5.0/x86_64-darwin18/openssl.bundle

OpenSSLというライブラリがロードできないようです。

OpenSSLは、SSLプロトコル・TLSプロトコルの、オープンソースで開発・提供されるソフトウェアである。中心となっているライブラリは基本的な暗号化関数と様々なユーティリティ関数を実装している。様々なコンピュータ言語でOpenSSLライブラリを利用できるようにするラッパーもある。 ウィキペディア

原因

macOSでは、macOS High SierraからデフォルトのOpenSSLとして(OpenSSLではなく)OpenSSLを元にして作られているLibreSSLというライブラリを使用しています。OpenSSLは致命的な欠陥があるらしく、LibreSSLのほうが優れているとのことです。

LibreSSLは、TLS/SSLプロトコルのオープンソースによる実装である。TLSの実装にOpenSSLを利用していたOpenBSDの開発者が、2014年4月に明らかとなったOpenSSLのハートブリード脆弱性を受けて独自にフォークしたものである。 ウィキペディア

ターミナルで以下のコマンドを実行すると、デフォルトのOpenSSLが確認できます。

$ openssl version
LibreSSL 2.8.3

一方、Rubyで使用しているOpenSSLはOpenSSLです(Rubyに限らず様々なツールがOpenSSLに依存しているようです)。

おそらく、macOSをアップデートしたことにより、デフォルトのOpenSSLがOpenSSLからLibreSSLに変更され(あるいは戻され)、OpenSSLに依存しているツール(今回はRuby=Ruby on Rails)が動かなくなってしまったのだと思われます。

対処

方法①:Rubyの再インストール

Rubyの再インストールを行うことでOpenSSLの設定を再構成します。

# インストール済みのRubyバージョンを確認
$ rbenv versions
  system
* 2.6.3 (set by /Users/user/Products/app/.ruby-version)

# Rubyをアンインストール
$ rbenv uninstall 2.6.3

# Rubyをインストール
$ rbenv install 2.6.3

# システム全体で使うRubyバージョンを設定
$ rbenv global 2.6.3

Rubyの再インストールを行ったらBundlerをインストールします。

# Bundlerのインストール
$ gem install bundler

# GemfileのGemをインストール
$ bundle install

なお、bundle installコマンドに失敗する場合は以下の記事を参照してください。

方法②:macOSのOpenSSLを変更(未検証)

OpenSSLをインストールしていない場合は、以下のコマンドを実行してインストールします。

# HomebrewでOpenSSLをインストール
$ brew install openssl

# インストールしたOpenSSLの確認
$ brew info openssl
openssl@3: stable 3.0.0 (bottled) [keg-only]
Cryptography and SSL/TLS Toolkit
https://openssl.org/
...
==> Analytics
install: 66,090 (30 days), 66,103 (90 days), 66,109 (365 days)
install-on-request: 53,207 (30 days), 53,220 (90 days), 53,226 (365 days)
build-error: 0 (30 days)

macOSのOpenSSLをインストールしたOpenSSLを使用するように変更します。

# .bash_profiileに設定を追加
$ echo 'export PATH="/usr/local/opt/openssl/bin:$PATH"' >> ~/.bash_profile

# .bash_profileを反映
$ source ~/.bash_profile

これでmacOSでもLibreSSLではなくOpenSSLを使用するようになりました。

$ openssl version
OpenSSL 3.0.0  14 Oct 2021

まとめ

事象が発生しているツールがRuby(Ruby on Rails)だけの場合は方法①を行うだけで十分です。もしOpenSSLに依存しているツールが複数ある場合は方法②を行ってシステム設定から変更してしまったほうが楽だと思います。

本記事を参考にしていただければと思います。

関連記事

【Rails】ダウンロードしたフリーフォントをWebpackerを使って導入する方法
# はじめに Webサイトのデザインを彩るひとつの要素にフォントの種類があります。Google Fontsの登場により、様々なフォントが手軽に導入できるようになりました。しかし、世の中にはGoogle Fontsが提供するフォント以外にもたくさん [...]
2021年10月16日 13:26
【Rails】mimemagicに依存しているRailsアプリでbundle installコマンドが失敗する事象の対処法
# はじめに Railsアプリで`bundle install`コマンドを実行しようとしたところ、以下のエラーメッセージが出力されコマンドに失敗しました。 ``` Your bundle is locked to mimemagic (0 [...]
2021年10月14日 14:44
【Rails】Railsアプリのデバッグ《マルチデバイス篇》
# はじめに 近年のWebアプリはレスポンシブ対応が当たり前になっています。最低でもPCとスマートフォンに対応したデザイン、ときにはその中間のタブレットに対応したデザインなんかも作成する必要があります。 Webアプリの開発はPCを使って行う [...]
2021年5月23日 13:02
【Rails】Railsアプリのデバッグ《Better Errors篇》
# はじめに Railsアプリの開発中になんらかのエラーが発生すると、デフォルトでは以下のような画面が表示されます(画像をクリックすると拡大します)。 <a class="gallery" data-group="gallery" href [...]
2021年5月22日 19:42
【Rails】Railsアプリのデバッグ《byebug篇》
# はじめに Ruby on Railsに限りませんが、アプリの開発中にはエラーは付き物です。なにかしらのエラーが発生したときに、エラーの原因を特定しエラー箇所を修正することをデバッグと言います。Railsではデバッグの手助けとなる機能があらかじ [...]
2021年5月22日 15:30