Skip to content

nio4rインストールエラー(Mac M3)

問題の説明

Apple M3チップ搭載Mac(Sonoma)でbundle install実行時、nio4r gemのネイティブ拡張ビルドに失敗します。主なエラー内容:

plaintext
selector.c:301:26: error: incompatible function pointer types...
make failed, exit code 2
An error occurred while installing nio4r (2.5.8)

この問題は以下の要因で発生します:

  1. バージョン固有の不具合: nio4r v2.5.8にArmプラットフォームでの互換性問題
  2. コンパイラの厳密なチェック: M3チップ用にClangが-Wincompatible-function-pointer-typesエラーを出力
  3. Rails依存関係: actioncablepumaがnio4rを必須コンポーネントとして使用

推奨解決策

解決策 1️⃣: nio4rを最新版に更新

最も根本的な解決方法です。バージョン2.5.9でM3サポートが追加されました。

bash
# Gemfile修正
gem 'nio4r', '~> 2.5.9'
bash
# アップデート実行
bundle update nio4r

有効性:
https://github.com/socketry/nio4r/commit/dd69a1c053bf13a580ec6a4e392c15c269239fd6 で修正済み

注意

Railsのバージョンが古い場合、互換性あるnio4rバージョンを指定してください


解決策 2️⃣: コンパイラフラグの追加(緊急回避法)

nio4r更新が不可避の場合の一時的回避策:

bash
# プロジェクトルートで実行
bundle config build.nio4r --with-cflags="-Wno-incompatible-pointer-types"

単体インストールの場合:

bash
gem install nio4r -v 2.5.8 -- --with-cflags="-Wno-incompatible-pointer-types"

注意

これは警告を無視する対応で根本解決ではないため、あくまで暫定策として使用


解決策 3️⃣: Rubyバージョンのアップグレード

Ruby 3.0系で発生する問題のため、3.1以上へ更新:

bash
# asdf利用例
asdf install ruby 3.1.4
asdf local ruby 3.1.4

bundle install

解決策 4️⃣: Homebrewパッケージの補完

基盤ツール不足が要因の場合あり:

bash
brew install coreutils pkg-config

根本原因の解説

エラーの核心はselector.cの型互換性問題です:

c
// エラー発生箇所
return rb_ensure(func, (VALUE)args, NIO_Selector_unlock, self);
                      ~~~~~~~~~~~~~ // 型不一致

Armアーキテクチャでは厳密な型チェックが有効化されています。最新版nio4rでは、関数ポインタの型宣言を修正することで本問題を解消しています。

-Wno-incompatible-pointer-typesフラグはClangに対し、型不一致警告を無視してビルドを続行するよう指示しますが、言語仕様整合性を損なう可能性があります。


ベストプラクティス

  1. 最初にnio4r更新を実施 - 最も安全な根本解決
  2. Ruby 3.0利用時のみコンパイラフラグで回避
  3. 開発環境のツールチェーン更新を定期的に実施
bash
brew update && brew upgrade
xcode-select --install

Mac M3環境では最新ソフトウェアスタックが特に重要です。解決後も依存ライブラリのバージョン管理を徹底することで、同種問題を予防できます。