はじめに
タイトルの通り、rails s
を実行した際に出たcannot load such file -- sqlite3/sqlite3_native
というエラーについて自分なりの解決方法を書きました。
色々試した中で成功した例を載せているだけなので参考程度に見ていただけると幸いです。
環境
・Windows11
・RubyInstallerの Ruby+Devkit 3.4.5-1 (x64)をインストール
・Rails 8.0.2.1
エラー
Railsをインストールしてrails new hoge
して新しいプロジェクトの作成を行いました。
hogeディレクトリに移動し、rails s
コマンドでRailsアプリを実行しようとしたところ、以下のエラーメッセージが出力され、実行できませんでした。
PS C:/Ruby/Practice> rails s C:/Ruby34-x64/lib/ruby/3.4.0/bundler/runtime.rb:71:in 'block (2 levels) in Bundler::Runtime#require':
There was an error while trying to load the gem 'sqlite3'.(Bundler::GemRequireError)
Gem Load Error is: cannot load such file -- sqlite3/sqlite3_native
sqlite3 のネイティブ拡張が正しく読み込めていないようです。
解決方法
筆者と同じ環境で新たにプロジェクトを作成した場合、Gemfile
からsqlite3
に指定されているバージョンは2.7以上であると思います。
# Use sqlite3 as the database for Active Record
gem "sqlite3", '~> 2.7', '>= 2.7.3'
それを下記のように変更してください。
# Use sqlite3 as the database for Active Record
gem "sqlite3", "= 2.1"
書き換えが完了したら、bundle install
してrails s
してください。
下記の画面が出てきたら成功です。
今回のエラーの原因考察
MSYS2/MinGW環境ではこのような問題が発生することがあるらしく、新しいバージョンのRubyがリリースされても、sqlite3の方がそのバージョンに対応していないときに起こるみたいです。
参考:https://teratail.com/questions/44920
下記エラー文のようにRailsはsqlite3 のバージョンが2.1
以上のものを必要としていますが、最初に指定されているバージョン2.7
では上手くいきませんでした。
(下記エラーはsqlite3のバージョンを1.6.9にしてbundle install
を実行したときに出てきたエラーです。)
Error loading the 'sqlite3' Active Record adapter.
Missing a gem it depends on? can't activate sqlite3 (>= 2.1),
already activated sqlite3-1.6.9. Make sure all dependencies are added to Gemfile.
また、>=2.1
と書いた場合も同じくcannot load such file -- sqlite3/sqlite3_native
と出たので、=2.1
で固定してしまうのが一番互換性が高いのではと思われます。