Minitestコンフリクト問題

はじめに

明けましておめでとうございます。2019年はアウトプットの量を増やし、為になる技術ブログにしていきたい所存です。

今回の概要

「プロを目指す人の為のRuby入門」の第4章の課題写経中、エラーに遭遇しました。 作成中のプログラムはRubyメソッドをTDDで進めるシンプルなプログラムです。

テストコード

require 'minitest/autorun'
require './lib/rgb'

class RgbTest < Minitest::Test
  def test_to_hex
    assert_equal '#000000', to_hex(0, 0, 0)
    assert_equal '#ffffff', to_hex(255, 255, 255)
    assert_equal '#043c78', to_hex(4, 60, 120)
  end

  def test_to_ints
    assert_equal [0, 0, 0], to_ints('#000000')
    assert_equal [255, 255, 255], to_ints('#ffffff')
    assert_equal [4, 60, 120], to_ints('#043c78')
  end
end

コード

def to_hex(r, g, b)
  [r, g, b].inject('#') do |hex, n|
    hex + n.to_s(16).rjust(2, '0')
  end
end

def to_ints(hex)
  r = hex[1..2]
  g = hex[3..4]
  b = hex[5..6]

  ints = []

  [r, g, b].each do |s|
    ints << s.hex
  end
  ints
end

その際に、テストを実行すると

ruby test/rgb_test.rb

こんなエラーが出ました。

Traceback (most recent call last):
        13: from /Users/sugiwaka/.rbenv/versions/2.5.0/lib/ruby/gems/2.5.0/gems/minitest-5.11.3/lib/minitest.rb:63:in `block in autorun'
        12: from /Users/sugiwaka/.rbenv/versions/2.5.0/lib/ruby/gems/2.5.0/gems/minitest-5.11.3/lib/minitest.rb:121:in `run'
        11: from /Users/sugiwaka/.rbenv/versions/2.5.0/lib/ruby/gems/2.5.0/gems/minitest-5.11.3/lib/minitest.rb:92:in `load_plugins'
        10: from /Users/sugiwaka/.rbenv/versions/2.5.0/lib/ruby/gems/2.5.0/gems/minitest-5.11.3/lib/minitest.rb:92:in `each'
         9: from /Users/sugiwaka/.rbenv/versions/2.5.0/lib/ruby/gems/2.5.0/gems/minitest-5.11.3/lib/minitest.rb:98:in `block in load_plugins'
         8: from /Users/sugiwaka/.rbenv/versions/2.5.0/lib/ruby/2.5.0/rubygems/core_ext/kernel_require.rb:59:in `require'
         7: from /Users/sugiwaka/.rbenv/versions/2.5.0/lib/ruby/2.5.0/rubygems/core_ext/kernel_require.rb:59:in `require'
         6: from /Users/sugiwaka/.rbenv/versions/2.5.0/lib/ruby/gems/2.5.0/gems/railties-5.2.1/lib/minitest/rails_plugin.rb:4:in `<top (required)>'
         5: from /Users/sugiwaka/.rbenv/versions/2.5.0/lib/ruby/2.5.0/rubygems/core_ext/kernel_require.rb:39:in `require'
         4: from /Users/sugiwaka/.rbenv/versions/2.5.0/lib/ruby/2.5.0/rubygems/core_ext/kernel_require.rb:128:in `rescue in require'
         3: from /Users/sugiwaka/.rbenv/versions/2.5.0/lib/ruby/2.5.0/rubygems.rb:217:in `try_activate'
         2: from /Users/sugiwaka/.rbenv/versions/2.5.0/lib/ruby/2.5.0/rubygems.rb:224:in `rescue in try_activate'
         1: from /Users/sugiwaka/.rbenv/versions/2.5.0/lib/ruby/2.5.0/rubygems/specification.rb:1437:in `activate'
/Users/sugiwaka/.rbenv/versions/2.5.0/lib/ruby/2.5.0/rubygems/specification.rb:2324:in `raise_if_conflicts': Unable to activate railties-5.2.1, because activesup
port-5.2.2 conflicts with activesupport (= 5.2.1) (Gem::ConflictError)

minitestはrdenvをローカル環境に入れた時点で自動的に導入されるのですが、どうやらバージョンコンフリクトを起こしている模様です。 (https://qiita.com/jnchito/items/1e928f8088b2cc6bd3fa)

Unable to activate railties-5.2.1, because activesup
port-5.2.2 conflicts with activesupport (= 5.2.1) (Gem::ConflictError)

上記リンクに記載されている解決法(自分は --no-pluginsコマンドを使いました)で、手元のエラーは解決したのですが、 minitestプラグインがどう読み込まれているか気になったので、確認してみます。→次回

🐤