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 で、主に rubocopcodecov などの静的解析ツールの依存先としてインストールされます。
この 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 のビルド済みバイナリのアーキテクチャが一致していない ことが原因です。

ハマった点とトラブルシュート

  1. 「You don't have write permissions」エラー
    グローバル gem を触ろうとしている場合に出ます。gem install--user-install するか、rbenv の shims 配下で実行してください。

  2. 「ERROR: Failed to build gem native extension」
    コマンドライン・ツールが不足しているか、Xcode Command Line Tools のライセンス同意が未了です。
    xcode-select --install で再インストールし、ライセンスに同意してから再度実行してください。

  3. 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 化」によるビルド高速化の仕組みについて掘り下げていく予定です。

参考資料