LoginSignup
5

More than 5 years have passed since last update.

gemを作ろうと思ったら、configすら読み込めなくて悲しくなった

Last updated at Posted at 2016-08-24

いろんなサイトを参考に、まずはgem用のプロジェクトを作った

$ bundle gem test_gem -t

で、必要部分を修正

test_gem.gemspec
  spec.summary       = %q{ output excel }
  spec.description   = %q{ output excel by java }
  spec.homepage      = "https://github.com/aaa/test_gem"

挨拶メソッド用意

lib/test_gem.rb
require "test_gem/version"

module TestGem
  # Your code goes here...
  def self.greet
    p 'hello'
  end
end

実行するには以下のコマンドから確認するらしい

$ rake install
$ irb
irb(main):001:0> require 'test_gem'
=> true
irb(main):002:0> TestGem.greet
"hello"
=> "hello"

ここまでは完璧!

そしてconfigファイルを作ろうとしたときに事件は起こった
ここでも他のgemを参考に、以下のファイルを作成

lib/test_gem/config.rb
require 'active_support/configurable'
module TestGem
  def self.configure(&block)
    yield @config ||= TestGem::Configuration.new
  end

  def self.config
    @config
  end

  class Configuration
    include ActiveSupport::Configurable
    config_accessor :tmp_dir
  end

  configure do |config|
    config.tmp_dir = "tmp/test_gem"
  end
end

挨拶メソッドのファイルを更新

lib/test_gem.rb
require "test_gem/version"
require "test_gem/config"

module TestGem
  # Your code goes here...
  def self.greet
    p config.tmp_dir
  end
end

コマンド実行して確認

$ rake install
$ irb
irb(main):001:0> require 'test_gem'
LoadError: cannot load such file -- test_gem/config
    from /Users/xxxxxxx/.rbenv/versions/2.3.1/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in `require'
    from /Users/xxxxxxx/.rbenv/versions/2.3.1/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in `require'
    from /Users/xxxxxxx/.rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/test_gem-0.1.0/lib/json_report_builder.rb:2:in `<top (required)>'
    from /Users/xxxxxxx/.rbenv/versions/2.3.1/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:127:in `require'
    from /Users/xxxxxxx/.rbenv/versions/2.3.1/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:127:in `rescue in require'
    from /Users/xxxxxxx/.rbenv/versions/2.3.1/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:40:in `require'
    from (irb):1
    from /Users/xxxxxxx/.rbenv/versions/2.3.1/bin/irb:11:in `<main>'

なんだって!?
タイポかなぁとかいろいろ考えたけど、何をやってもうまくいかず・・・

最終的な解決方法は・・・

$ git add .

これだけでした

詳しい仕組みは見てないけれども、どうやらgitで管理されているファイルだけが
rake install の対象になるっぽい

test_gem.gemspec
  spec.files         = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }

これが関係しているのかな

とりあえず一度gitの管理にファイルが入れば、そのファイルを更新したらちゃんと更新した内容が反映されます

$ rake install
$ irb
irb(main):001:0> require 'test_gem'
=> true
irb(main):002:0> TestGem.greet
"tmp/test_gem"
=> "tmp/test_gem"

この状態から出力内容を変更し、

lib/test_gem/config.rb
  configure do |config|
    config.tmp_dir = "tmp/test_gem_change"
  end

再度実行すると

$ rake install
$ irb
irb(main):001:0> require 'test_gem'
=> true
irb(main):002:0> TestGem.greet
"tmp/test_gem_change"
=> "tmp/test_gem_change"

となります

無事スタートを切れてよかった・・・

追記

実行方法だけど、もっと簡単でさらにgit addしなくてもいいものがありましたw

$ bin/console

これならわざわざ毎回requireとか書かなくてもいいし、、、
かなり時間を無駄にしたー

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5