Upgrade to Pro — share decks privately, control downloads, hide ads and more …

The Journey of rubocop-daemon into RuboCop

Hayato Kawai
May 16, 2024

The Journey of rubocop-daemon into RuboCop

I talked at RubyKaigi 2024 LT!

rubocop-daemon was developed independently as a personal project before being integrated into the RuboCop core as a Server Mode. In this LT, I will discuss how rubocop-daemon came into being and the process leading to its integration into the RuboCop core, sharing the lessons learned along the way. Specifically, I will focus on the challenges faced as an OSS project owner and the effective strategies for engaging with OSS projects.

Hayato Kawai

May 16, 2024


  1. Motivation for Creating rubocop-daemon • Running RuboCop in an editor

    is slow, typically taking about 1-2 seconds ◦ Immediate feedback during coding is essential; the code written 1 second ago is too old!
  2. Why RuboCop is Slow • Each command execution reloads RuboCop:

    $ rubocop … require 'rubocop' RuboCop::CLI.new.run Terminal RuboCop $ rubocop … require 'rubocop' RuboCop::CLI.new.run
  3. require 'rubocop' is Slow • Just require 'rubocop' takes about

    0.8 seconds without even the core 'lint' functionality $ rubocop … require 'rubocop' RuboCop::CLI.new.run Terminal RuboCop $ rubocop … require 'rubocop' RuboCop::CLI.new.run
  4. Architecture of rubocop-daemon • Save require 'rubocop' time by having

    a rubocop-daemon server preload it ◦ similar to how an HTTP server operates: rubocop-daemon (server) $ rubocop-daemon exec … Terminal $ rubocop-daemon exec …
  5. Exciting OSS Buzz • Being recognized as a third-party gem

    within the RuboCop community is rewarding • Active issues and patches are also rewarding ◦ It signs that the tool is beneficial and widely used
  6. Challenges of OSS: Increasing Support Needs • The more widely

    it is used, the more support for diverse environments is needed ◦ In rubocop-daemon, some editors/plugins require setup guides ▪ e.g. Vim, VSCode, …
  7. Challenges of OSS: Not All Patches Can be Integrated •

    Integrating a patch means taking ownership of that code ◦ taking the responsibility for future issues and reviews.
  8. Challenges of OSS: Not All Patches Can be Integrated •

    In recognition of the time spent writing the patches, I want to integrate them. ◦ It would be difficult to maintain everything
  9. Finally integrated into RuboCop core in 2022 🎉 • I'm

    happy that my feature is widely used by the RuboCop community ◦ (I'm honored to have my name credited in the RuboCop files) • Effectively handed over maintenance to RuboCop core team, who deserves trusting
  10. Conclusion: OSS is a Great Culture • OSS is a

    great culture but also brings challenges to OSS owners • Contributing upstream isn't the only option ◦ You can instead start with a third-party gem!