Create a binstub like following:
#!/usr/bin/env ruby require 'bootsnap' gem_name = 'rubocop' exe_name = 'rubocop' cache_dir = File.join(ENV['HOME'], '.cache', 'bootsnap', gem_name, exe_name) Bootsnap.setup(cache_dir: cache_dir, load_path_cache: false, autoload_paths_cache: false) load Gem.bin_path(gem_name, exe_name)
Gem.bin_path1 takes two arguments, 1st is name of gem, 2nd is name of executable. You can modify
exe_name to apply this binstub to other ruby CLI tools.
Without this binstub:
% time rubocop -v 0.70.0 rubocop -v 0.76s user 0.20s system 97% cpu 0.983 total
With this binstub, It takes a little more time at first run:
% time bin/rubocop -v 0.70.0 bin/rubocop -v 1.04s user 0.57s system 98% cpu 1.640 total
But once it runs, the cache is created. Then It becomes much faster:
% time bin/rubocop -v 0.70.0 bin/rubocop -v 0.53s user 0.23s system 79% cpu 0.969 total
You don't need to change any code of ruby CLI tools, Just create a binstub to optimize boot time.