VTRyo Blog

一歩ずつ前に進むブログ

Where are the dependent gems within Rubygem?

Rubygemを開発していて、他のgemを参考にしていると定義していないはずのメソッドが急に呼ばれていたりして「これ独自定義?じゃないよな……あ、やはりgemを使っている」としばらくして気づいた。

どうして途中まで依存したgemの存在に気づかなかったのかというと、
Gemfileに書かれてもいないし、requireも別のファイルに記述されていて気づかなかった。

gemのgemどこ問題、みんな引っかかったりしないの……?

gemspec

Rubygemが依存しているgemはGemfileには書かないケースもあるらしい。

依存しているgemは、gemspecにadd_runtime_dependency と記述されている。

docs.ruby-lang.org

gemspecのデフォルトにも、よく見たらここに登録してくれよって書いてあった。

  # Uncomment to register a new dependency of your gem
  # spec.add_dependency "example-gem", "~> 1.0"

Rubygemの開発に使用するgemはadd_runtime_dependencyと書くと良い。

# gemspec
spec.add_development_dependency 'rspec', '~> 3.0'

で、Gemfileはこれだけにしておけばよいのだ。

# Gemfile
source "https://rubygems.org"

# Specify your gem's dependencies in hoge.gemspec
gemspec

気になります

oauth2を見ると、Gemfileに記述されているではないか。

一体どういうルールの差で違いがあるのか掴めなかったので、知っている人がいたら教えて下さい:pray:

github.com