markdown
はじめに (対象読者・この記事でわかること)
この記事は、Ruby を日々使っているけれど「irb を起動すると Ignoring jaro_winkler-1.5.2 because its extensions are not built. という警告が出る」ことに違和感を覚えている開発者向けです。
この記事を読むことで、
- なぜその警告が出るのか
- 警告を完全に消すための 3 パターンの手順
- 今後同様の「ネイティブ拡張が読み込めない」事象を自力で解決するための考え方
が身につきます。環境を再構築せずに、最短 5 分で解決できる方法を中心に解説します。
前提知識
- Ruby のバージョン 2.7 以降、または 3.x を rbenv や asdf で管理している
- Gemfile と
bundle installの基本的な使い方を知っている - ターミナルで
irbを起動できる環境が既にある
警告の正体:jaro_winkler が何をしようとしているのか
jaro_winkler は文字列の類似度を高速に計算するための gem で、主に rubocop や codecov などの静的解析ツールの依存先としてインストールされます。
この gem は「ネイティブ拡張」(C 言語で書かれた部分)を含んでおり、インストール時にコンパイルする必要があります。
ところが、
- Ruby をバージョンアップして
~/.gem以下の共有ディレクトリが変わった bundle install時に--deploymentフラグが効いていて開発用 gem がスキップされた- M1/M2/M3 Mac へ機種変更後、Rosetta 版 Ruby を使い続けている
などの理由で、.so / .bundle ファイルが生成されず、「拡張子がビルドされていない」旨の警告が irb の起動時に表示される、という仕組みです。
重要な点は、警告が出ても irb 自体は動作する ことです。しかし、依存先が多いため、放置していると他の gem でも同様の警告が連鎖する可能性があります。
確実に警告を消す 3 ステップ
以下の手順は、環境を壊さない範囲で最も確実 な方法を選べるように、3 パターンを用意しました。
どの手順も「警告が出たままの状態」→「警告が出なくなった状態」をターミナルのキャプチャ付きで確認できます。
ステップ1: 該当 gem を単体でリビルドする(最速 30 秒)
まずは「jaro_winkler だけを再コンパイル」してみます。
Bash# 1. 現在の Ruby バージョンを確認 ruby -v # => ruby 3.3.0 (2023-12-25 revision 5124f0761c) [arm64-darwin23] # 2. 該当 gem のバージョンを特定 gem list jaro_winkler # => jaro_winkler (1.5.2) # 3. 一度アンインストールして、ネイティブ拡張付きで再インストール gem uninstall jaro_winkler # => Successfully uninstalled jaro_winkler-1.5.2 gem install jaro_winkler -v 1.5.2 -- --with-cflags="-Wno-error=implicit-function-declaration" # => Building native extensions. This could take a while... # => Successfully installed jaro_winkler-1.5.2 # 4. 警告が消えたことを確認 irb # => irb(main):001:0> puts "OK!"
--with-cflags を付けるのは、Apple Clang 15 以ちゃんとで誤って「関数の暗黙的宣言をエラーに」してしまうためです。
このオプションが不要な環境(Linux や Clang 14 以前)では単に gem install jaro_winkler -v 1.5.2 で十分です。
ステップ2: bundle の再インストールで依存関係を整える(3 〜 5 分)
ステップ 1 だけで解決しない場合、bundle キャッシュが古い ことが多いです。
プロジェクトディレクトリで以下を実行します。
Bash# 1. ロックファイルを維持したままキャッシュをクリア bundle config --delete without bundle config --delete deployment bundle config set --local path 'vendor/bundle' # 必要に応じて rm -rf vendor/bundle/ruby/*/extensions rm -rf Gemfile.lock # 2. 依存関係を再解決&再ビルド bundle install --redownload # => Fetching gem metadata from https://rubygems.org/.......... # => Installing jaro_winkler 1.5.2 with native extensions # 3. 今度こそ警告が消えるか確認 bundle exec irb # => irb(main):001:0> puts "OK!"
--redownload を付けることで、gem 本体だけでなくネイティブ拡張も強制的に再ビルドされます。
bundle exec irb で起動した場合に警告が出なければ、グローバルな gem 環境が汚れていると判断できます。
ステップ3: Ruby 再インストール & 完全リビルド(10 分前後)
まれに、Ruby 自体が arm64 / x86_64 の混在 した状態でインストールされているケースがあります。
特に asdf で「プラグインを更新したけど再コンパイルしていない」場合に起きます。
Bash# 1. 現在の Ruby を一旦アンインストール asdf uninstall ruby 3.3.0 # rbenv の場合は rbenv uninstall 3.3.0 # 2. 最新の ruby-build を取得 asdf plugin-update ruby-build # 3. ネイティブ拡張用のツールが揃っていることを確認 brew install openssl@3 readline libyaml gmp # 4. 再インストール(Apple Silicon 用) RUBY_CONFIGURE_OPTS="--with-openssl-dir=$(brew --prefix openssl@3)" \ asdf install ruby 3.3.0 # 5. bundler も一緒に入れ直す gem install bundler bundle install # 6. 最終確認 irb # => irb(main):001:0> puts "完璧!"
このステップで完治しない場合、システム側の開発ツールが不足している か、Ruby のアーキテクチャと gem のビルド済みバイナリのアーキテクチャが一致していない ことが原因です。
ハマった点とトラブルシュート
-
「You don't have write permissions」エラー
グローバル gem を触ろうとしている場合に出ます。gem installを--user-installするか、rbenvの shims 配下で実行してください。 -
「ERROR: Failed to build gem native extension」
コマンドライン・ツールが不足しているか、Xcode Command Line Tools のライセンス同意が未了です。
xcode-select --installで再インストールし、ライセンスに同意してから再度実行してください。 -
M シリーズ Mac で「architecture not supported」
Ruby が Intel 版のままです。arch -arm64プレフィックスを付けるか、Ruby を再インストールしてください。
解決策まとめ
- 単体 gem の再ビルドで 90 % 解決
- ダメなら
bundle install --redownloadで依存関係を刷新 - それでもダメなら Ruby 自体をアーキテクチャ一致で再インストール
まとめ
本記事では、Ignoring jaro_winkler because its extensions are not built. という警告が出る仕組みと、確実に消すための 3 パターンの手順を解説しました。
- 警告の原因は「ネイティブ拡張がコンパイルされていない」こと
- 環境に応じて「gem 単体再ビルド」「bundle 再インストール」「Ruby 再インストール」を選べば 5 〜 10 分で解決
- 同様の警告が他の gem で出たときも、今回の考え方が適用できる
この記事を通して、ネイティブ拡張付き gem のトラブルに対する自力での調査・解決スキル が身につきました。
次回は、Ruby 3.4 で導入される「Gemfile の拡張子 .rb 化」によるビルド高速化の仕組みについて掘り下げていく予定です。
参考資料
- jaro_winkler README(ネイティブ拡張のビルド要件)
- ruby-build Wiki – Apple Silicon 対応
- Bundler 公式 – bundle install オプションまとめ
