Gems on Ruby

Hiroshi SHIBATA
Hiroshi SHIBATAOSS programmer at GMO Pepabo, Inc.
RubyGems/Bundler/rbenv
Hiroshi SHIBATA / GMO Pepabo, Inc.
2018.08.26 LL Event 2018
Gems on Ruby
self.introduce
Executive Officer CPO(Chief Productivity Officer)
Director of Business Process Re-engineering Office
Director of Technical Division
at GMO Pepabo, Inc. @pepabo
Hiroshi SHIBATA @hsbt
https://www.hsbt.org
self.introduce
=> {
name: “SHIBATA Hiroshi”,
nickname: “hsbt”,
organizations: [“ruby”, “rubygems”, “bundler”,
“asakusarb”, “railsgirls”, “pepabo”, …],
commit_bits: [“ruby”, “rake”, “rubygems”, “bundler”,
“rdoc”, “psych”, “ruby-build”, “railsgirls”, “railsgirls-
jp”, …],
sites: [“hsbt.org”, “ruby-lang.org”, “rubyci.org”,
“railsgirls.com”, “railsgirls.jp”],
}
Gems on Ruby
Gems on Ruby
• History
• RubyGems
• Bundler
• rbenv/ruby-build
• RubyGems 3.0/4.0
• RubyGems & Bundler
Agenda
Answer
• Must buy “Web+DB
Press Vol.103”
• You should use
RubyGems/Bundler/
rbenv at all.
History
1.
• RAA(Ruby Application Archive)
• 2013/08: raa.ruby-lang.org 終了のご報告 https://
www.ruby-lang.org/ja/news/2013/08/08/rip-raa/
• RubyForge
• 2009/10: RubyForge To Be Phased Out, RubyGems.org
Takes Over Gem Hosting https://www.infoq.com/news/
2009/10/rubyforge-phased-out-rubygemsorg
• gems.github.com
• 2009/10: Gem Building is Defunct https://www.infoq.com/
news/2009/10/github-stops-gem-building
Packaging and Disribution(1)
• gemcutter.org:
• https://github.com/rubygems/gemcutter
• You can use `gem yank` command after you did invoke
`gem i gemcutter`.
• rubygems.org:
• gemcutter.org was renamed to rubygems.org.
• bundler:
• 2010: Released to 1.0.0 version.
Packaging and Disribution(2)
RubyGems
2.
• The package manager of Ruby libraries.
• `gem install rails -v “~> 5.2”`
• You can install specified version of Ruby libraries
that called `Gem`. RubyGems handles global
environment on your box.
• You could specify `gem ‘rails’, ‘~> 5.2’` syntax
without its dependency.
What’s rubygems?
What does mean “official”?
“official” means “Matz controllable”
Un-controllable examples:
• ruby-doc.org
• rubygems.org
• bundler.io
• Ruby version manager(rvm/rbenv/chruby)
“RubyTogether” maintains RubyGems, Bundler and
RubyGems.org(Rails Application).
• Merge latest stable version into Ruby Core
• Ruby 2.6.0 will bundle RubyGems 3.0(TBD)
• Ruby 2.7 or 3.0 will bundle RubyGems 4.0(TBD)
The policy of RubyGems versioning
• RubyGems have HackerOne project.
• 3 people handle vulnerability issues.
• But We have no workflow about security release.
• RubyGems 2.7.6 was accidentally released.
Security
Bundler
3.
• The vendoring tool of Ruby.
• RubyGems couldn’t care dependency of Ruby
libraries and isolate version managing with ruby
process.
• Bundler can do them with `Gemfile`
What’s bundler?
# frozen_string_literal: true
source "https://rubygems.org"
git_source(:github) { |repo| "https://github.com/#{repo}.git" }
gemspec
# We need a newish Rake since Active Job sets its test tasks' descriptions.
gem "rake", ">= 11.1"
• RubyGems 2.x, 3.x uses Molinillo-0.5.7
• Bundler 1.16.x also uses Molinillo-0.6.4
• These are different versions and behavior of
dependency resolver.
Dependency Resolver incompatible
~/D/g/r/rubygems (master) > ls lib/rubygems/resolver/molinillo/lib/molinillo
delegates dependency_graph.rb gem_metadata.rb resolution.rb state.rb
dependency_graph errors.rb modules resolver.rb
~/D/g/b/bundler (master) > ls lib/bundler/vendor/molinillo/lib/molinillo
compatibility.rb dependency_graph errors.rb modules resolver.rb
delegates dependency_graph.rb gem_metadata.rb resolution.rb state.rb
rbenv/ruby-build
4.
• The Ruby version manager (not ruby library)
• The Ruby language will be released Dec.25 every
year. You need to take care ruby versions in your
box like Ruby 2.3, 2.4, 2.5…
• Ruby isolates library locations used by Ruby
versions.
• rbenv(and ruby-build) provides an environment
that makes version switching and its build
definitions.
What’s rbenv?
Version number and release cycle
We plan to release every Christmas day.
• 2.1.0: 2013/12/25
• 2.2.0: 2014/12/25
• 2.3.0: 2015/12/25
• 2.4.0: 2016/12/25
• 2.5.0: 2017/12/25
• 2.6.0: 2018/12/25(TBD)
• …
• 3.0.0: 2020/xx/xx
Ruby package manager
RVM
• To support Binary installation
• Applied Custom patchset
• Automatic installation of latest rubygems and
bundler
rbenv/ruby-build
• Modify environment variables.
• I’m also maintain them
chruby/ruby-install
• Modify a few environment variables.
rbenv/ruby-build
You can get them from
• homebrew
• git clone
Basic instructions are:
$ rbenv install 2.5.0
$ rbenv install 2.6.0-dev
$ RUBY_CONFIGURE_OPT=—disable-install-doc rbenv install 2.4.3
$ rbenv install jruby-9.1.16.0
$ RUBY_CONFIGURE_OPT= rbenv install rbx-3.89
RubyGems 3 & 4
5.
• Removed deprecated methods.
• Removed to support for < Ruby 2.2.
• Added warnings of deprecated methods.
• Server/Client side 2FA
What’s new in RubyGems 3?
• Surprisedly, RG 2.7 still supports Ruby 1.8.
Ruby 1.8 in 2018
~/D/g/r/rubygems (2.7) > rg respond_to
test/rubygems/test_gem_request_set_gem_dependency_api.rb
630: tf.close! if tf.respond_to? :close!
test/rubygems/test_gem_source.rb
60: response.uri = URI('http://example') if response.respond_to? :uri
test/rubygems/test_gem_package.rb
755: tf.close! if tf.respond_to? :close!
test/rubygems/test_gem_util.rb
45: if File.respond_to?(:realpath)
test/rubygems/test_gem_installer.rb
58: str = str.dup.force_encoding("BINARY") if str.respond_to? :force_encoding
65:if Gem.respond_to?(:activate_bin_path)
893: skip unless "".respond_to?(:force_encoding)
test/rubygems/test_gem_specification.rb
2305: s.required_rubygems_version = Gem::Requirement.new("> 0".freeze) if s.respond_to? :required_ruby
2316: if s.respond_to? :specification_version then
…snip
• We can use Keywords argument, Refinement,
Other cool features in RubyGems now.
• Simple build matrix
Only support Ruby 2.2+
• It has non-compatible features.
• Make enable as default for conservative option.
• Behaviour changes with default gems installer.
• Executables in bin folder conflict with their gem
versions.
• Make ruby gem install to user-install by default.
RubyGems 4
• We got the installation time when already installed
gems.
• To use conservative is ignore re-install action.
Make conservative option as default
~ > gem i rails
clone http://rubyonrails.org -> /Users/hsbt/Documents/rubyonrails.org
git ls-remote http://rubyonrails.org
hg identify http://rubyonrails.org
svn info http://rubyonrails.org
error Could not find version control system: http://rubyonrails.org
exists /Users/hsbt/Documents/github.com/rails/rails
Successfully installed rails-5.2.0
1 gem installed
~ > gem i rails —conservative
~ >
• Rubygems 4 will install the all gems to `~/.gem`
• Pros: Ruby in linux distribution has many of FAQ for gem
installation for using `sudo`. This change resolve this
issues.
• Cons: Ruby version manager like rbenv is not support it.
And This is big incompatible feature.
Make `--user-install` as default
RubyGems
&
Bundler
6.
• We are working to integrate RubyGems and
Bundler.
• But It’s still working progress status because
there is no plan to release Bundler 2.
• RubyGems 3&4 drop to support under the Ruby
2.2. Because Bundler 1.x still supports Ruby 1.8
and 1.9.
• I’m waiting to release Bundler 2 for this
integration.
RubyGems/Bundler integration
• Bundler was located rubygems repository as git
submodule
Bundler Integration(rubygems.rb)
if USE_BUNDLER_FOR_GEMDEPS
ENV["BUNDLE_GEMFILE"] ||= File.expand_path(path)
require 'rubygems/user_interaction'
Gem::DefaultUserInteraction.use_ui(ui) do
require "bundler"
@gemdeps = Bundler.setup
Bundler.ui = nil
@gemdeps.requested_specs.map(&:to_spec).sort_by(&:name)
end
else
rs = Gem::RequestSet.new
@gemdeps = rs.load_gemdeps path
rs.resolve_current.map do |s|
s.full_spec.tap(&:activate)
end
end
Ruby is designed to make
programmers happy.
Yukihiro Matz Matsumoto
1 of 35

Recommended

The Future of Dependency Management for Ruby by
The Future of Dependency Management for RubyThe Future of Dependency Management for Ruby
The Future of Dependency Management for RubyHiroshi SHIBATA
7.4K views72 slides
RubyGems 3 & 4 by
RubyGems 3 & 4RubyGems 3 & 4
RubyGems 3 & 4Hiroshi SHIBATA
1.3K views36 slides
Dependency Resolution with Standard Libraries by
Dependency Resolution with Standard LibrariesDependency Resolution with Standard Libraries
Dependency Resolution with Standard LibrariesHiroshi SHIBATA
803 views24 slides
Gems on Ruby by
Gems on RubyGems on Ruby
Gems on RubyHiroshi SHIBATA
999 views42 slides
Roadmap for RubyGems 4 and Bundler 3 by
Roadmap for RubyGems 4 and Bundler 3Roadmap for RubyGems 4 and Bundler 3
Roadmap for RubyGems 4 and Bundler 3Hiroshi SHIBATA
794 views23 slides
20140425 ruby conftaiwan2014 by
20140425 ruby conftaiwan201420140425 ruby conftaiwan2014
20140425 ruby conftaiwan2014Hiroshi SHIBATA
1.4K views85 slides

More Related Content

What's hot

How to develop the Standard Libraries of Ruby? by
How to develop the Standard Libraries of Ruby?How to develop the Standard Libraries of Ruby?
How to develop the Standard Libraries of Ruby?Hiroshi SHIBATA
3.6K views25 slides
20140918 ruby kaigi2014 by
20140918 ruby kaigi201420140918 ruby kaigi2014
20140918 ruby kaigi2014Hiroshi SHIBATA
856 views52 slides
tDiary annual report 2009 - Sapporo Ruby Kaigi02 by
tDiary annual report 2009 - Sapporo Ruby Kaigi02tDiary annual report 2009 - Sapporo Ruby Kaigi02
tDiary annual report 2009 - Sapporo Ruby Kaigi02Hiroshi SHIBATA
1.5K views42 slides
20140925 rails pacific by
20140925 rails pacific20140925 rails pacific
20140925 rails pacificHiroshi SHIBATA
896 views77 slides
How to distribute Ruby to the world by
How to distribute Ruby to the worldHow to distribute Ruby to the world
How to distribute Ruby to the worldHiroshi SHIBATA
937 views47 slides
What's new in RubyGems3 by
What's new in RubyGems3What's new in RubyGems3
What's new in RubyGems3Hiroshi SHIBATA
3K views46 slides

What's hot(20)

How to develop the Standard Libraries of Ruby? by Hiroshi SHIBATA
How to develop the Standard Libraries of Ruby?How to develop the Standard Libraries of Ruby?
How to develop the Standard Libraries of Ruby?
Hiroshi SHIBATA3.6K views
tDiary annual report 2009 - Sapporo Ruby Kaigi02 by Hiroshi SHIBATA
tDiary annual report 2009 - Sapporo Ruby Kaigi02tDiary annual report 2009 - Sapporo Ruby Kaigi02
tDiary annual report 2009 - Sapporo Ruby Kaigi02
Hiroshi SHIBATA1.5K views
How to distribute Ruby to the world by Hiroshi SHIBATA
How to distribute Ruby to the worldHow to distribute Ruby to the world
How to distribute Ruby to the world
Hiroshi SHIBATA937 views
The details of CI/CD environment for Ruby by Hiroshi SHIBATA
The details of CI/CD environment for RubyThe details of CI/CD environment for Ruby
The details of CI/CD environment for Ruby
Hiroshi SHIBATA1.1K views
The Future of Bundled Bundler by Hiroshi SHIBATA
The Future of Bundled BundlerThe Future of Bundled Bundler
The Future of Bundled Bundler
Hiroshi SHIBATA4.7K views
Gemification for Ruby 2.5/3.0 by Hiroshi SHIBATA
Gemification for Ruby 2.5/3.0Gemification for Ruby 2.5/3.0
Gemification for Ruby 2.5/3.0
Hiroshi SHIBATA1.3K views
How to Begin to Develop Ruby Core by Hiroshi SHIBATA
How to Begin to Develop Ruby CoreHow to Begin to Develop Ruby Core
How to Begin to Develop Ruby Core
Hiroshi SHIBATA2.9K views
The Future of library dependency manageement of Ruby by Hiroshi SHIBATA
The Future of library dependency manageement of RubyThe Future of library dependency manageement of Ruby
The Future of library dependency manageement of Ruby
Hiroshi SHIBATA988 views
Middleware as Code with mruby by Hiroshi SHIBATA
Middleware as Code with mrubyMiddleware as Code with mruby
Middleware as Code with mruby
Hiroshi SHIBATA5.2K views
Gemification plan of Standard Library on Ruby by Hiroshi SHIBATA
Gemification plan of Standard Library on RubyGemification plan of Standard Library on Ruby
Gemification plan of Standard Library on Ruby
Hiroshi SHIBATA351 views
Large-scaled Deploy Over 100 Servers in 3 Minutes by Hiroshi SHIBATA
Large-scaled Deploy Over 100 Servers in 3 MinutesLarge-scaled Deploy Over 100 Servers in 3 Minutes
Large-scaled Deploy Over 100 Servers in 3 Minutes
Hiroshi SHIBATA3.8K views

Similar to Gems on Ruby

The secret of programming language development and future by
The secret of programming  language development and futureThe secret of programming  language development and future
The secret of programming language development and futureHiroshi SHIBATA
1.1K views76 slides
Middleware as Code with mruby by
Middleware as Code with mrubyMiddleware as Code with mruby
Middleware as Code with mrubyHiroshi SHIBATA
4.8K views67 slides
The story of language development by
The story of language developmentThe story of language development
The story of language developmentHiroshi SHIBATA
11K views45 slides
The Future of library dependency management of Ruby by
 The Future of library dependency management of Ruby The Future of library dependency management of Ruby
The Future of library dependency management of RubyHiroshi SHIBATA
644 views33 slides
Rspec and Capybara Intro Tutorial at RailsConf 2013 by
Rspec and Capybara Intro Tutorial at RailsConf 2013Rspec and Capybara Intro Tutorial at RailsConf 2013
Rspec and Capybara Intro Tutorial at RailsConf 2013Brian Sam-Bodden
29.7K views71 slides
Hacking with ruby2ruby by
Hacking with ruby2rubyHacking with ruby2ruby
Hacking with ruby2rubyMarc Chung
1.4K views60 slides

Similar to Gems on Ruby(20)

The secret of programming language development and future by Hiroshi SHIBATA
The secret of programming  language development and futureThe secret of programming  language development and future
The secret of programming language development and future
Hiroshi SHIBATA1.1K views
Middleware as Code with mruby by Hiroshi SHIBATA
Middleware as Code with mrubyMiddleware as Code with mruby
Middleware as Code with mruby
Hiroshi SHIBATA4.8K views
The story of language development by Hiroshi SHIBATA
The story of language developmentThe story of language development
The story of language development
Hiroshi SHIBATA11K views
The Future of library dependency management of Ruby by Hiroshi SHIBATA
 The Future of library dependency management of Ruby The Future of library dependency management of Ruby
The Future of library dependency management of Ruby
Hiroshi SHIBATA644 views
Rspec and Capybara Intro Tutorial at RailsConf 2013 by Brian Sam-Bodden
Rspec and Capybara Intro Tutorial at RailsConf 2013Rspec and Capybara Intro Tutorial at RailsConf 2013
Rspec and Capybara Intro Tutorial at RailsConf 2013
Brian Sam-Bodden29.7K views
Hacking with ruby2ruby by Marc Chung
Hacking with ruby2rubyHacking with ruby2ruby
Hacking with ruby2ruby
Marc Chung1.4K views
JRuby, Ruby, Rails and You on the Cloud by Hiro Asari
JRuby, Ruby, Rails and You on the CloudJRuby, Ruby, Rails and You on the Cloud
JRuby, Ruby, Rails and You on the Cloud
Hiro Asari1.3K views
mruby で mackerel のプラグインを作るはなし by Hiroshi SHIBATA
mruby で mackerel のプラグインを作るはなしmruby で mackerel のプラグインを作るはなし
mruby で mackerel のプラグインを作るはなし
Hiroshi SHIBATA12.8K views
Week6 by reneedv
Week6Week6
Week6
reneedv293 views
How to Begin Developing Ruby Core by Hiroshi SHIBATA
How to Begin Developing Ruby CoreHow to Begin Developing Ruby Core
How to Begin Developing Ruby Core
Hiroshi SHIBATA1.9K views
070929 Ruby勉強会#5 Rails開発ツールガイド by Tomoki Maeda
070929 Ruby勉強会#5 Rails開発ツールガイド070929 Ruby勉強会#5 Rails開発ツールガイド
070929 Ruby勉強会#5 Rails開発ツールガイド
Tomoki Maeda2K views
Toolbox of a Ruby Team by Arto Artnik
Toolbox of a Ruby TeamToolbox of a Ruby Team
Toolbox of a Ruby Team
Arto Artnik422 views
Open Source Saturday - How can I contribute to Ruby on Rails? by Pravin Mishra
Open Source Saturday - How can I contribute to Ruby on Rails?Open Source Saturday - How can I contribute to Ruby on Rails?
Open Source Saturday - How can I contribute to Ruby on Rails?
Pravin Mishra1.8K views
Practical Testing of Ruby Core by Hiroshi SHIBATA
Practical Testing of Ruby CorePractical Testing of Ruby Core
Practical Testing of Ruby Core
Hiroshi SHIBATA16.6K views
The Architecture of PicCollage Server by Lin Jen-Shin
The Architecture of PicCollage ServerThe Architecture of PicCollage Server
The Architecture of PicCollage Server
Lin Jen-Shin602 views

More from Hiroshi SHIBATA

How resolve Gem dependencies in your code? by
How resolve Gem dependencies in your code?How resolve Gem dependencies in your code?
How resolve Gem dependencies in your code?Hiroshi SHIBATA
47 views50 slides
How resolve Gem dependencies in your code? by
How resolve Gem dependencies in your code?How resolve Gem dependencies in your code?
How resolve Gem dependencies in your code?Hiroshi SHIBATA
16 views54 slides
Ruby コミッターと歩む Ruby を用いたプロダクト開発 by
Ruby コミッターと歩む Ruby を用いたプロダクト開発Ruby コミッターと歩む Ruby を用いたプロダクト開発
Ruby コミッターと歩む Ruby を用いたプロダクト開発Hiroshi SHIBATA
52 views14 slides
Why ANDPAD commit Ruby and RubyKaigi? by
Why ANDPAD commit Ruby and RubyKaigi?Why ANDPAD commit Ruby and RubyKaigi?
Why ANDPAD commit Ruby and RubyKaigi?Hiroshi SHIBATA
226 views17 slides
RailsGirls から始める エンジニアリングはじめの一歩 by
RailsGirls から始める エンジニアリングはじめの一歩RailsGirls から始める エンジニアリングはじめの一歩
RailsGirls から始める エンジニアリングはじめの一歩Hiroshi SHIBATA
846 views16 slides
OSS Security the hard way by
OSS Security the hard wayOSS Security the hard way
OSS Security the hard wayHiroshi SHIBATA
4.5K views62 slides

More from Hiroshi SHIBATA(7)

How resolve Gem dependencies in your code? by Hiroshi SHIBATA
How resolve Gem dependencies in your code?How resolve Gem dependencies in your code?
How resolve Gem dependencies in your code?
Hiroshi SHIBATA47 views
How resolve Gem dependencies in your code? by Hiroshi SHIBATA
How resolve Gem dependencies in your code?How resolve Gem dependencies in your code?
How resolve Gem dependencies in your code?
Hiroshi SHIBATA16 views
Ruby コミッターと歩む Ruby を用いたプロダクト開発 by Hiroshi SHIBATA
Ruby コミッターと歩む Ruby を用いたプロダクト開発Ruby コミッターと歩む Ruby を用いたプロダクト開発
Ruby コミッターと歩む Ruby を用いたプロダクト開発
Hiroshi SHIBATA52 views
Why ANDPAD commit Ruby and RubyKaigi? by Hiroshi SHIBATA
Why ANDPAD commit Ruby and RubyKaigi?Why ANDPAD commit Ruby and RubyKaigi?
Why ANDPAD commit Ruby and RubyKaigi?
Hiroshi SHIBATA226 views
RailsGirls から始める エンジニアリングはじめの一歩 by Hiroshi SHIBATA
RailsGirls から始める エンジニアリングはじめの一歩RailsGirls から始める エンジニアリングはじめの一歩
RailsGirls から始める エンジニアリングはじめの一歩
Hiroshi SHIBATA846 views
Productive Organization with Ruby by Hiroshi SHIBATA
Productive Organization with RubyProductive Organization with Ruby
Productive Organization with Ruby
Hiroshi SHIBATA545 views

Recently uploaded

Optimizing Communication to Optimize Human Behavior - LCBM by
Optimizing Communication to Optimize Human Behavior - LCBMOptimizing Communication to Optimize Human Behavior - LCBM
Optimizing Communication to Optimize Human Behavior - LCBMYaman Kumar
39 views49 slides
This talk was not generated with ChatGPT: how AI is changing science by
This talk was not generated with ChatGPT: how AI is changing scienceThis talk was not generated with ChatGPT: how AI is changing science
This talk was not generated with ChatGPT: how AI is changing scienceElena Simperl
34 views13 slides
The Coming AI Tsunami.pptx by
The Coming AI Tsunami.pptxThe Coming AI Tsunami.pptx
The Coming AI Tsunami.pptxjohnhandby
14 views12 slides
Enabling DPU Hardware Accelerators in XCP-ng Cloud Platform Environment - And... by
Enabling DPU Hardware Accelerators in XCP-ng Cloud Platform Environment - And...Enabling DPU Hardware Accelerators in XCP-ng Cloud Platform Environment - And...
Enabling DPU Hardware Accelerators in XCP-ng Cloud Platform Environment - And...ShapeBlue
120 views12 slides
Deep Tech and the Amplified Organisation: Core Concepts by
Deep Tech and the Amplified Organisation: Core ConceptsDeep Tech and the Amplified Organisation: Core Concepts
Deep Tech and the Amplified Organisation: Core ConceptsHolonomics
17 views21 slides
Transcript: Redefining the book supply chain: A glimpse into the future - Tec... by
Transcript: Redefining the book supply chain: A glimpse into the future - Tec...Transcript: Redefining the book supply chain: A glimpse into the future - Tec...
Transcript: Redefining the book supply chain: A glimpse into the future - Tec...BookNet Canada
43 views16 slides

Recently uploaded(20)

Optimizing Communication to Optimize Human Behavior - LCBM by Yaman Kumar
Optimizing Communication to Optimize Human Behavior - LCBMOptimizing Communication to Optimize Human Behavior - LCBM
Optimizing Communication to Optimize Human Behavior - LCBM
Yaman Kumar39 views
This talk was not generated with ChatGPT: how AI is changing science by Elena Simperl
This talk was not generated with ChatGPT: how AI is changing scienceThis talk was not generated with ChatGPT: how AI is changing science
This talk was not generated with ChatGPT: how AI is changing science
Elena Simperl34 views
The Coming AI Tsunami.pptx by johnhandby
The Coming AI Tsunami.pptxThe Coming AI Tsunami.pptx
The Coming AI Tsunami.pptx
johnhandby14 views
Enabling DPU Hardware Accelerators in XCP-ng Cloud Platform Environment - And... by ShapeBlue
Enabling DPU Hardware Accelerators in XCP-ng Cloud Platform Environment - And...Enabling DPU Hardware Accelerators in XCP-ng Cloud Platform Environment - And...
Enabling DPU Hardware Accelerators in XCP-ng Cloud Platform Environment - And...
ShapeBlue120 views
Deep Tech and the Amplified Organisation: Core Concepts by Holonomics
Deep Tech and the Amplified Organisation: Core ConceptsDeep Tech and the Amplified Organisation: Core Concepts
Deep Tech and the Amplified Organisation: Core Concepts
Holonomics17 views
Transcript: Redefining the book supply chain: A glimpse into the future - Tec... by BookNet Canada
Transcript: Redefining the book supply chain: A glimpse into the future - Tec...Transcript: Redefining the book supply chain: A glimpse into the future - Tec...
Transcript: Redefining the book supply chain: A glimpse into the future - Tec...
BookNet Canada43 views
NTGapps NTG LowCode Platform by Mustafa Kuğu
NTGapps NTG LowCode Platform NTGapps NTG LowCode Platform
NTGapps NTG LowCode Platform
Mustafa Kuğu474 views
The Role of Patterns in the Era of Large Language Models by Yunyao Li
The Role of Patterns in the Era of Large Language ModelsThe Role of Patterns in the Era of Large Language Models
The Role of Patterns in the Era of Large Language Models
Yunyao Li104 views
"Node.js vs workers — A comparison of two JavaScript runtimes", James M Snell by Fwdays
"Node.js vs workers — A comparison of two JavaScript runtimes", James M Snell"Node.js vs workers — A comparison of two JavaScript runtimes", James M Snell
"Node.js vs workers — A comparison of two JavaScript runtimes", James M Snell
Fwdays14 views
Redefining the book supply chain: A glimpse into the future - Tech Forum 2023 by BookNet Canada
Redefining the book supply chain: A glimpse into the future - Tech Forum 2023Redefining the book supply chain: A glimpse into the future - Tech Forum 2023
Redefining the book supply chain: A glimpse into the future - Tech Forum 2023
BookNet Canada46 views
Future of AR - Facebook Presentation by Rob McCarty
Future of AR - Facebook PresentationFuture of AR - Facebook Presentation
Future of AR - Facebook Presentation
Rob McCarty66 views
What is Authentication Active Directory_.pptx by HeenaMehta35
What is Authentication Active Directory_.pptxWhat is Authentication Active Directory_.pptx
What is Authentication Active Directory_.pptx
HeenaMehta3515 views
Innovation & Entrepreneurship strategies in Dairy Industry by PervaizDar1
Innovation & Entrepreneurship strategies in Dairy IndustryInnovation & Entrepreneurship strategies in Dairy Industry
Innovation & Entrepreneurship strategies in Dairy Industry
PervaizDar139 views
Bronack Skills - Risk Management and SRE v1.0 12-3-2023.pdf by ThomasBronack
Bronack Skills - Risk Management and SRE v1.0 12-3-2023.pdfBronack Skills - Risk Management and SRE v1.0 12-3-2023.pdf
Bronack Skills - Risk Management and SRE v1.0 12-3-2023.pdf
ThomasBronack31 views
"Running students' code in isolation. The hard way", Yurii Holiuk by Fwdays
"Running students' code in isolation. The hard way", Yurii Holiuk "Running students' code in isolation. The hard way", Yurii Holiuk
"Running students' code in isolation. The hard way", Yurii Holiuk
Fwdays38 views

Gems on Ruby

  • 1. RubyGems/Bundler/rbenv Hiroshi SHIBATA / GMO Pepabo, Inc. 2018.08.26 LL Event 2018 Gems on Ruby
  • 3. Executive Officer CPO(Chief Productivity Officer) Director of Business Process Re-engineering Office Director of Technical Division at GMO Pepabo, Inc. @pepabo Hiroshi SHIBATA @hsbt https://www.hsbt.org
  • 4. self.introduce => { name: “SHIBATA Hiroshi”, nickname: “hsbt”, organizations: [“ruby”, “rubygems”, “bundler”, “asakusarb”, “railsgirls”, “pepabo”, …], commit_bits: [“ruby”, “rake”, “rubygems”, “bundler”, “rdoc”, “psych”, “ruby-build”, “railsgirls”, “railsgirls- jp”, …], sites: [“hsbt.org”, “ruby-lang.org”, “rubyci.org”, “railsgirls.com”, “railsgirls.jp”], }
  • 7. • History • RubyGems • Bundler • rbenv/ruby-build • RubyGems 3.0/4.0 • RubyGems & Bundler Agenda
  • 8. Answer • Must buy “Web+DB Press Vol.103” • You should use RubyGems/Bundler/ rbenv at all.
  • 10. • RAA(Ruby Application Archive) • 2013/08: raa.ruby-lang.org 終了のご報告 https:// www.ruby-lang.org/ja/news/2013/08/08/rip-raa/ • RubyForge • 2009/10: RubyForge To Be Phased Out, RubyGems.org Takes Over Gem Hosting https://www.infoq.com/news/ 2009/10/rubyforge-phased-out-rubygemsorg • gems.github.com • 2009/10: Gem Building is Defunct https://www.infoq.com/ news/2009/10/github-stops-gem-building Packaging and Disribution(1)
  • 11. • gemcutter.org: • https://github.com/rubygems/gemcutter • You can use `gem yank` command after you did invoke `gem i gemcutter`. • rubygems.org: • gemcutter.org was renamed to rubygems.org. • bundler: • 2010: Released to 1.0.0 version. Packaging and Disribution(2)
  • 13. • The package manager of Ruby libraries. • `gem install rails -v “~> 5.2”` • You can install specified version of Ruby libraries that called `Gem`. RubyGems handles global environment on your box. • You could specify `gem ‘rails’, ‘~> 5.2’` syntax without its dependency. What’s rubygems?
  • 14. What does mean “official”? “official” means “Matz controllable” Un-controllable examples: • ruby-doc.org • rubygems.org • bundler.io • Ruby version manager(rvm/rbenv/chruby) “RubyTogether” maintains RubyGems, Bundler and RubyGems.org(Rails Application).
  • 15. • Merge latest stable version into Ruby Core • Ruby 2.6.0 will bundle RubyGems 3.0(TBD) • Ruby 2.7 or 3.0 will bundle RubyGems 4.0(TBD) The policy of RubyGems versioning
  • 16. • RubyGems have HackerOne project. • 3 people handle vulnerability issues. • But We have no workflow about security release. • RubyGems 2.7.6 was accidentally released. Security
  • 18. • The vendoring tool of Ruby. • RubyGems couldn’t care dependency of Ruby libraries and isolate version managing with ruby process. • Bundler can do them with `Gemfile` What’s bundler? # frozen_string_literal: true source "https://rubygems.org" git_source(:github) { |repo| "https://github.com/#{repo}.git" } gemspec # We need a newish Rake since Active Job sets its test tasks' descriptions. gem "rake", ">= 11.1"
  • 19. • RubyGems 2.x, 3.x uses Molinillo-0.5.7 • Bundler 1.16.x also uses Molinillo-0.6.4 • These are different versions and behavior of dependency resolver. Dependency Resolver incompatible ~/D/g/r/rubygems (master) > ls lib/rubygems/resolver/molinillo/lib/molinillo delegates dependency_graph.rb gem_metadata.rb resolution.rb state.rb dependency_graph errors.rb modules resolver.rb ~/D/g/b/bundler (master) > ls lib/bundler/vendor/molinillo/lib/molinillo compatibility.rb dependency_graph errors.rb modules resolver.rb delegates dependency_graph.rb gem_metadata.rb resolution.rb state.rb
  • 21. • The Ruby version manager (not ruby library) • The Ruby language will be released Dec.25 every year. You need to take care ruby versions in your box like Ruby 2.3, 2.4, 2.5… • Ruby isolates library locations used by Ruby versions. • rbenv(and ruby-build) provides an environment that makes version switching and its build definitions. What’s rbenv?
  • 22. Version number and release cycle We plan to release every Christmas day. • 2.1.0: 2013/12/25 • 2.2.0: 2014/12/25 • 2.3.0: 2015/12/25 • 2.4.0: 2016/12/25 • 2.5.0: 2017/12/25 • 2.6.0: 2018/12/25(TBD) • … • 3.0.0: 2020/xx/xx
  • 23. Ruby package manager RVM • To support Binary installation • Applied Custom patchset • Automatic installation of latest rubygems and bundler rbenv/ruby-build • Modify environment variables. • I’m also maintain them chruby/ruby-install • Modify a few environment variables.
  • 24. rbenv/ruby-build You can get them from • homebrew • git clone Basic instructions are: $ rbenv install 2.5.0 $ rbenv install 2.6.0-dev $ RUBY_CONFIGURE_OPT=—disable-install-doc rbenv install 2.4.3 $ rbenv install jruby-9.1.16.0 $ RUBY_CONFIGURE_OPT= rbenv install rbx-3.89
  • 25. RubyGems 3 & 4 5.
  • 26. • Removed deprecated methods. • Removed to support for < Ruby 2.2. • Added warnings of deprecated methods. • Server/Client side 2FA What’s new in RubyGems 3?
  • 27. • Surprisedly, RG 2.7 still supports Ruby 1.8. Ruby 1.8 in 2018 ~/D/g/r/rubygems (2.7) > rg respond_to test/rubygems/test_gem_request_set_gem_dependency_api.rb 630: tf.close! if tf.respond_to? :close! test/rubygems/test_gem_source.rb 60: response.uri = URI('http://example') if response.respond_to? :uri test/rubygems/test_gem_package.rb 755: tf.close! if tf.respond_to? :close! test/rubygems/test_gem_util.rb 45: if File.respond_to?(:realpath) test/rubygems/test_gem_installer.rb 58: str = str.dup.force_encoding("BINARY") if str.respond_to? :force_encoding 65:if Gem.respond_to?(:activate_bin_path) 893: skip unless "".respond_to?(:force_encoding) test/rubygems/test_gem_specification.rb 2305: s.required_rubygems_version = Gem::Requirement.new("> 0".freeze) if s.respond_to? :required_ruby 2316: if s.respond_to? :specification_version then …snip
  • 28. • We can use Keywords argument, Refinement, Other cool features in RubyGems now. • Simple build matrix Only support Ruby 2.2+
  • 29. • It has non-compatible features. • Make enable as default for conservative option. • Behaviour changes with default gems installer. • Executables in bin folder conflict with their gem versions. • Make ruby gem install to user-install by default. RubyGems 4
  • 30. • We got the installation time when already installed gems. • To use conservative is ignore re-install action. Make conservative option as default ~ > gem i rails clone http://rubyonrails.org -> /Users/hsbt/Documents/rubyonrails.org git ls-remote http://rubyonrails.org hg identify http://rubyonrails.org svn info http://rubyonrails.org error Could not find version control system: http://rubyonrails.org exists /Users/hsbt/Documents/github.com/rails/rails Successfully installed rails-5.2.0 1 gem installed ~ > gem i rails —conservative ~ >
  • 31. • Rubygems 4 will install the all gems to `~/.gem` • Pros: Ruby in linux distribution has many of FAQ for gem installation for using `sudo`. This change resolve this issues. • Cons: Ruby version manager like rbenv is not support it. And This is big incompatible feature. Make `--user-install` as default
  • 33. • We are working to integrate RubyGems and Bundler. • But It’s still working progress status because there is no plan to release Bundler 2. • RubyGems 3&4 drop to support under the Ruby 2.2. Because Bundler 1.x still supports Ruby 1.8 and 1.9. • I’m waiting to release Bundler 2 for this integration. RubyGems/Bundler integration
  • 34. • Bundler was located rubygems repository as git submodule Bundler Integration(rubygems.rb) if USE_BUNDLER_FOR_GEMDEPS ENV["BUNDLE_GEMFILE"] ||= File.expand_path(path) require 'rubygems/user_interaction' Gem::DefaultUserInteraction.use_ui(ui) do require "bundler" @gemdeps = Bundler.setup Bundler.ui = nil @gemdeps.requested_specs.map(&:to_spec).sort_by(&:name) end else rs = Gem::RequestSet.new @gemdeps = rs.load_gemdeps path rs.resolve_current.map do |s| s.full_spec.tap(&:activate) end end
  • 35. Ruby is designed to make programmers happy. Yukihiro Matz Matsumoto