インストール直後はロードできない

Rubyスクリプト内でGemをインストールして直後にロードしようとしてもLoadErrorになる。(systemgem install を呼ぶ例。Rake の sh でも同様。)

system("gem", "install", "--no-document", "bundler")
require "bundler"
# => in `require': cannot load such file -- bundler (LoadError)

読み込みパスをクリアするとロードできるようになる

Gem.clear_pathsで読み込みパスをクリアするとロードできるようになる。

begin
  require "bundler"
rescue LoadError
  system("gem", "install", "--no-document", "bundler") or raise
  Gem.clear_paths
  retry
end

バージョンを指定することもできる

gemメソッドを使用すればバージョンも指定してロードできる。

begin
  gem "bundler", "2.4.5"
rescue Gem::MissingSpecError
  system("gem", "install", "--no-document", "bundler", "-v", "2.4.5") or raise
  Gem.clear_paths
  retry
end