Techioz Blog

Ruby gem のインストール中の Gem::Requirement::BadRequirementError を修正

概要

私は Ruby を初めて使用しますが、過去に Linux 仮想マシンにいくつかの gem をインストールしました。ただし、新しい gem をインストールしようとすると、次のメッセージが表示されます: Gem::Requirement::BadRequirementError

このコマンドで google-api-client gem をインストールしようとしたときのエラー メッセージ全体は次のとおりです。

ERROR:  While executing gem ... (Gem::Requirement::BadRequirementError)
    Illformed requirement ["google-api-client"]

      raise BadRequirementError, "Illformed requirement [#{obj.inspect}]"
            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
        /home/blainefreestone/.rbenv/versions/3.2.2/lib/ruby/3.2.0/rubygems/requirement.rb:106:in `parse'
        /home/blainefreestone/.rbenv/versions/3.2.2/lib/ruby/3.2.0/rubygems/requirement.rb:138:in `block in initialize'
        /home/blainefreestone/.rbenv/versions/3.2.2/lib/ruby/3.2.0/rubygems/requirement.rb:138:in `map!'
        /home/blainefreestone/.rbenv/versions/3.2.2/lib/ruby/3.2.0/rubygems/requirement.rb:138:in `initialize'
        /home/blainefreestone/.rbenv/versions/3.2.2/lib/ruby/3.2.0/rubygems/version_option.rb:55:in `new'
        /home/blainefreestone/.rbenv/versions/3.2.2/lib/ruby/3.2.0/rubygems/version_option.rb:55:in `block in add_version_option'
        /home/blainefreestone/.rbenv/versions/3.2.2/lib/ruby/3.2.0/rubygems/optparse/lib/optparse.rb:583:in `conv_arg'
        /home/blainefreestone/.rbenv/versions/3.2.2/lib/ruby/3.2.0/rubygems/optparse/lib/optparse.rb:738:in `parse'
        /home/blainefreestone/.rbenv/versions/3.2.2/lib/ruby/3.2.0/rubygems/optparse/lib/optparse.rb:1686:in `block in parse_in_order'
        /home/blainefreestone/.rbenv/versions/3.2.2/lib/ruby/3.2.0/rubygems/optparse/lib/optparse.rb:1636:in `catch'
        /home/blainefreestone/.rbenv/versions/3.2.2/lib/ruby/3.2.0/rubygems/optparse/lib/optparse.rb:1636:in `parse_in_order'
        /home/blainefreestone/.rbenv/versions/3.2.2/lib/ruby/3.2.0/rubygems/optparse/lib/optparse.rb:1630:in `order!'
        /home/blainefreestone/.rbenv/versions/3.2.2/lib/ruby/3.2.0/rubygems/optparse/lib/optparse.rb:1739:in `permute!'
        /home/blainefreestone/.rbenv/versions/3.2.2/lib/ruby/3.2.0/rubygems/optparse/lib/optparse.rb:1764:in `parse!'
        /home/blainefreestone/.rbenv/versions/3.2.2/lib/ruby/3.2.0/rubygems/command.rb:448:in `handle_options'
        /home/blainefreestone/.rbenv/versions/3.2.2/lib/ruby/3.2.0/rubygems/command.rb:313:in `invoke_with_build_args'
        /home/blainefreestone/.rbenv/versions/3.2.2/lib/ruby/3.2.0/rubygems/command_manager.rb:252:in `invoke_command'
        /home/blainefreestone/.rbenv/versions/3.2.2/lib/ruby/3.2.0/rubygems/command_manager.rb:192:in `process_args'
        /home/blainefreestone/.rbenv/versions/3.2.2/lib/ruby/3.2.0/rubygems/command_manager.rb:150:in `run'
        /home/blainefreestone/.rbenv/versions/3.2.2/lib/ruby/3.2.0/rubygems/gem_runner.rb:51:in `run'
        /home/blainefreestone/.rbenv/versions/3.2.2/bin/gem:10:in `<main>'

この質問を調査しましたが、すべての答えは特定の gem の問題に関係しています。これは、インストールしようとするすべての gem に対して同じことを行います。

解決策

-v オプションは、gem の特定のバージョンをインストールする場合に gem install で使用されます。たとえば、次のようになります。

gem install google-api-client -v 0.53.0

しかし、CLI 呼び出しではバージョン番号が欠落しているため、そのエラー メッセージが表示されます。

gem の利用可能な最新バージョンをインストールしたいだけの場合は、次のように -v 部分を削除して gem をインストールします。

gem install google-api-client