Ferramentas CLI pessoais
Muitos utilitários de linha de comando começam como algumas instruções copiadas do histórico do terminal. Depois de repetir a mesma sequência algumas vezes, acabo transformando-a em um alias, uma função shell ou um script. Essas ferramentas pessoais são uma parte importante da minha experiência de desenvolvimento: reduzem o atrito das tarefas recorrentes e me permitem trabalhar com mais agilidade.
O custo de criar esses pequenos utilitários mudou. Um agente de programação pode transformar uma tarefa repetitiva em código funcional em poucos minutos. Ainda é necessário revisar o código gerado e testar os caminhos perigosos, mas escrever a implementação inicial raramente representa o mesmo obstáculo de antes. Com isso, ferramentas muito específicas se tornam viáveis, mesmo quando resolvem um problema que talvez só eu tenha.
Essa motivação não se resume a executar mais comandos por minuto. A produtividade de desenvolvedores é um assunto recorrente na literatura e envolve muito mais do que uma única métrica de atividade. O framework SPACE, por exemplo, organiza o tema em várias dimensões. Um framework prático para a experiência de desenvolvimento também examina os fatores que influenciam como o trabalho é vivenciado. A experiência de desenvolvimento, ou DevX, inclui a maneira como os desenvolvedores percebem as ferramentas, os fluxos e os sistemas que usam para trabalhar.
Neste texto, concentro-me em uma parte concreta dessa experiência: eliminar pequenos atritos de tarefas repetitivas no terminal.
Melhore sua experiência de linha de comando com fzf
O fzf é um fuzzy finder para o terminal. Ele recebe uma lista de linhas, abre um seletor interativo e retorna a opção escolhida. À medida que digito alguns fragmentos, a lista é filtrada. Assim, não preciso lembrar nem escrever uma string exata.
O padrão básico é simples:
selection=$(command-that-produces-options | fzf)command-that-uses "$selection"Esse padrão separa um aplicativo CLI em três partes:
- Produzir as opções possíveis.
- Permitir que o usuário pesquise e selecione uma delas.
- Executar uma ação usando a seleção.
O seletor pode incluir um prompt descritivo, seleção múltipla, atalhos de teclado e uma janela de pré-visualização. O comando que produz as opções pode associar caminhos, descrições, datas ou metadados do Git a cada item. A ação final deve validar o valor selecionado e tratar a tecla Esc como um cancelamento normal, não como um erro.
Esse padrão me permite criar interfaces para meus scripts sem precisar lembrar os valores válidos ou a sintaxe exata de cada um. Ele também cria consistência: depois de aprender como um comando com seleção fuzzy funciona, já entendo grande parte do próximo.
Exemplos das minhas próprias ferramentas
config-fz
Conforme minha configuração shell cresceu, lembrar os nomes dos comandos personalizados se tornou um problema por si só. Comecei a identificar cada comando com um nome e uma descrição curta. O config-fz reúne essas anotações e as envia ao fzf, permitindo que eu pesquise o catálogo por finalidade e execute o comando selecionado.
As anotações tornam a coleção autodocumentada. A seleção fuzzy me permite aproveitar um utilitário usado raramente sem precisar recordar seu nome exato. Para adicionar uma ferramenta ao catálogo, basta incluir um comentário ao lado da implementação.
gflog
Meu comando gflog formata o reflog do Git com o hash do commit, a posição no reflog, a data e o assunto. O Git já contém essas informações; a ferramenta apenas escolhe a representação compacta que considero mais útil ao investigar um estado anterior.
gz
O gz aplica o padrão de seleção fuzzy a branches e referências remotas. Ele exibe cada referência com seu hash, autor, data e assunto, envia a lista ao fzf e leva o repositório ao alvo selecionado.
Implemente o script que você já está executando
Preste atenção aos momentos em que você copia os mesmos comandos, reconstrói os mesmos argumentos, percorre os mesmos diretórios ou segue as mesmas instruções de recuperação. Descreva uma dessas rotinas para um agente de programação e peça que ele desenvolva um pequeno utilitário CLI. Quando a primeira versão estiver funcionando, melhore a interface com seleção fuzzy, pré-visualizações úteis, prompts claros e cancelamento seguro. Se a ação puder apagar ou sobrescrever dados, ofereça também um modo de simulação e peça confirmação antes de executá-la.
As ferramentas pessoais mais úteis geralmente começam com uma sequência específica demais para interessar a qualquer outra pessoa. É justamente por isso que elas se encaixam tão bem no nosso fluxo de trabalho. Se você não tem um script para um procedimento repetitivo, está condenado a agir como um: receber as mesmas entradas, seguir os mesmos passos e produzir repetidamente o mesmo resultado.