酢ろぐ!

カレーが嫌いなスマートフォンアプリプログラマのブログ。

`bundle exec pod update` 実行時に `bundler: failed to load command: pod` エラーが発生する

2023年10月7日の activesupport のアップデートによって CocoaPods が使えなくなった。すぐに修正されると思うが、直近で困ってる方のために備忘録を残す。

bundler: failed to load command: pod エラーが発生する

bundle update のあと、 bundle exec pod update の実行時に、bundler: failed to load command: pod と CocoaPods の読み込みに失敗するエラーが発生した。

$ bundle exec pod update                        
bundler: failed to load command: pod (/PATH/works/ptcgnote_app/ptcgnote/vendor/bundle/ruby/2.7.0/bin/pod)
Traceback (most recent call last):
    24: from /PATH/.rbenv/versions/2.7.4/bin/bundle:25:in `<main>'
  23: from /PATH/.rbenv/versions/2.7.4/bin/bundle:25:in `load'
   22: from /PATH/.rbenv/versions/2.7.4/lib/ruby/gems/2.7.0/gems/bundler-2.4.20/exe/bundle:29:in `<top (required)>'
  21: from /PATH/.rbenv/versions/2.7.4/lib/ruby/site_ruby/2.7.0/bundler/friendly_errors.rb:117:in `with_friendly_errors'
    20: from /PATH/.rbenv/versions/2.7.4/lib/ruby/gems/2.7.0/gems/bundler-2.4.20/exe/bundle:37:in `block in <top (required)>'
  19: from /PATH/.rbenv/versions/2.7.4/lib/ruby/site_ruby/2.7.0/bundler/cli.rb:28:in `start'
   18: from /PATH/.rbenv/versions/2.7.4/lib/ruby/site_ruby/2.7.0/bundler/vendor/thor/lib/thor/base.rb:485:in `start'
  17: from /PATH/.rbenv/versions/2.7.4/lib/ruby/site_ruby/2.7.0/bundler/cli.rb:34:in `dispatch'
    16: from /PATH/.rbenv/versions/2.7.4/lib/ruby/site_ruby/2.7.0/bundler/vendor/thor/lib/thor.rb:392:in `dispatch'
  15: from /PATH/.rbenv/versions/2.7.4/lib/ruby/site_ruby/2.7.0/bundler/vendor/thor/lib/thor/invocation.rb:127:in `invoke_command'
   14: from /PATH/.rbenv/versions/2.7.4/lib/ruby/site_ruby/2.7.0/bundler/vendor/thor/lib/thor/command.rb:27:in `run'
  13: from /PATH/.rbenv/versions/2.7.4/lib/ruby/site_ruby/2.7.0/bundler/cli.rb:492:in `exec'
    12: from /PATH/.rbenv/versions/2.7.4/lib/ruby/site_ruby/2.7.0/bundler/cli/exec.rb:23:in `run'
  11: from /PATH/.rbenv/versions/2.7.4/lib/ruby/site_ruby/2.7.0/bundler/cli/exec.rb:58:in `kernel_load'
   10: from /PATH/.rbenv/versions/2.7.4/lib/ruby/site_ruby/2.7.0/bundler/cli/exec.rb:58:in `load'
   9: from /PATH/works/ptcgnote_app/ptcgnote/vendor/bundle/ruby/2.7.0/bin/pod:25:in `<top (required)>'
     8: from /PATH/works/ptcgnote_app/ptcgnote/vendor/bundle/ruby/2.7.0/bin/pod:25:in `load'
   7: from /PATH/works/ptcgnote_app/ptcgnote/vendor/bundle/ruby/2.7.0/gems/cocoapods-1.13.0/bin/pod:36:in `<top (required)>'
    6: from /PATH/.rbenv/versions/2.7.4/lib/ruby/site_ruby/2.7.0/rubygems/core_ext/kernel_require.rb:38:in `require'
   5: from /PATH/.rbenv/versions/2.7.4/lib/ruby/site_ruby/2.7.0/rubygems/core_ext/kernel_require.rb:38:in `require'
     4: from /PATH/works/ptcgnote_app/ptcgnote/vendor/bundle/ruby/2.7.0/gems/cocoapods-1.13.0/lib/cocoapods.rb:9:in `<top (required)>'
   3: from /PATH/.rbenv/versions/2.7.4/lib/ruby/site_ruby/2.7.0/rubygems/core_ext/kernel_require.rb:38:in `require'
    2: from /PATH/.rbenv/versions/2.7.4/lib/ruby/site_ruby/2.7.0/rubygems/core_ext/kernel_require.rb:38:in `require'
   1: from /PATH/works/ptcgnote_app/ptcgnote/vendor/bundle/ruby/2.7.0/gems/activesupport-7.1.0/lib/active_support/core_ext/array/conversions.rb:8:in `<top (required)>'
/PATH/works/ptcgnote_app/ptcgnote/vendor/bundle/ruby/2.7.0/gems/activesupport-7.1.0/lib/active_support/core_ext/array/conversions.rb:108:in `<class:Array>': undefined method `deprecator' for ActiveSupport:Module (NoMethodError)
Did you mean?  deprecate_constant

エラーメッセージの内容は完全には理解できないが、ActiveSupport ライブラリ内で deprecator というメソッドが未定義であることが記載されている。 deprecatordeprecate_constant に名前が変更されたのかな?

解決方法

Gemfile.lock を確認したところ、activesupport のバージョンが v7.0.8 から v7.1.0 にアップデートされていることを確認した。このアップデートが破壊的な変更を含んでいるのであろう。

---    activesupport (7.0.8)
+++    activesupport (7.1.0)

問題発生の原因がわかった。影響範囲が広い(どの環境でも発生しうる)問題のため、そのうち CocoaPods 側でも対応してくれることだろう。

暫定的な対策としては、Gemfile を編集して activesupport のバージョンを 7.0.8 で固定すると、問題なく CocoaPods が使えるようになる。

source "https://rubygems.org"

gem 'cocoapods'
gem 'fastlane'
gem 'activesupport', '= 7.0.8'

Gemfile を弄れない環境の場合、Bundler の更新は止めておいた方が良さそうだ。