Кулстори про CLI


Я — Игорь


Иногда надо делать CLI

И это бывает больно


А зачем?


А зачем?


Шорткаты

# Было

npx reveal-md slide-sources/saint_p_lightning/index.md  \
    --static assets/slides/saint_p_meetup_2021 \
    --static-dirs=slide-sources/saint_p_lightning/img

# Стало

make slides-2021-saint-p

Мейк — это хорошо


makefile.site

А что с рутиной?


Шелл скриптинг не всегда хорош

На fish хорош, а вот на (ba z)sh не очень

Альтернативы — библиотеки для CLI


Не люблю чувствовать себя тупым

Самое важное требование к библиотекам


Тор не помогает

class MyCLI < Thor
  desc "hello NAME", "say hello to NAME"
  def hello(name)
    puts "Hello #{name}"
  end
end

MyCLI.start(ARGV)

method_defined — хорошо

Но не очень просто


А как тестить?

Очевидно: запускать и смотреть на stdout Не очень очевидно: запускать через rspec/minitest и тоже тестить


dry-cli: теперь проще

module MyCLI
  extend Dry::CLI::Registry

  class Hello < Dry::CLI::Command
    desc "say hello to NAME"
    argument :name

    def call(name:, **)
      puts "Hello #{name}"
    end
  end

  register 'hello', Hello
end

Dry::CLI.new(MyCLI).call

Больше текста, проще кот

Your mileage may vary, though


А ещё там меньше интеграций

Спросить у пользователя ввести что-нибудь? Ставь tty-shell

Нужны цвета? Ставь tty-color


Спасибо