In english: Writing better shell scripts using the power of Node with Google ZX.

Escrevendo shell scripts melhores usando o poder do Node com Google ZX

12/10/2022

Captura de tela da página do Google ZX no Github.

Há alguns dias descobri o ZX: uma ferramenta do Google que permite que você utilize Node.js para executar shell scripts complexos.

Daí você me pergunta: por que diabos eu escreveria shell scripts utilizando Javascript? Deixa eu te contar uma história:

O super script

Na empresa que trabalho, configurar o ambiente de desenvolvimento local era um processo longo e manual.

São muitos repositórios para clonar, várias imagens do docker para configurar, muita navegação entre diretórios para instalar dependências usando o npm e composer, vários arquivos .env para copiar, bancos de dados para criar, etc.

Neste ano criamos uma ferramenta de linha de comando escrita totalmente em shell script para automatizar o processo. Os resultados foram incríveis de cara: um processo que às vezes durava dias, agora leva uma hora.

Mas com o passar do tempo, percebemos que o script ainda estava longe do ideal...

  • Apenas pessoas desenvolvedoras com conhecimento intermediário ou avançado de shell scripts estavam engajando em manter o repositório do script vivo.
  • A modularidade era praticamente inexistente: era necessário importar variáveis e helpers no script de forma global.
  • Era difícil manter o código conciso e legível.
  • Era difícil tratar erros e exceções.
  • A legibilidade do repositório no geral não era boa.
  • Era difícil permitir que o usuário executasse apenas uma parte do processo (por exemplo, clonar repositórios ou instalar as dependências para todos eles).

Adaptando para o Google ZX

Verifiquei a documentação do ZX no Github e percebi que era uma ótima oportunidade de mudar as coisas.

A configuração era simples: instalar o ZX globalmente com o npm, criar um arquivo de extensão .mjs e executar os scripts a partir dali, conforme as instruções no Github. Para executar, é só executar zx arquivo.mjs no terminal.

Em alguns minutos já tinha alguns dos passos adaptados para uso, com vários benefícios:

  • Facilidade em modularizar funções e variáveis, aumentando o reuso do código.
  • Código mais legível e fácil de entender, especialmente para aqueles com conhecimento básico em shell scripting.
  • Maior controle do que o script retorna.
  • Facilidade em tratar erros e exceções.
  • Facilidade em dar estilos à textos no terminal (graças a integração com o Chalk).

Os benefícios eram claros, valia a pena seguir dessa forma. Adaptei a parte principal do script em alguns dias e fiquei bem feliz com os resultados.

Não posso mostrar o código, mas ficam algumas capturas de tela sem nenhuma informação sensível da empresa do script rodando.

Acredite, foi divertidíssimo reescrevê-lo.

Captura de tela do script rodando. É exibida uma mensagem dizendo que todos os pré-requisitos foram aceitos.

Captura de tela do script rodando. É exibida uma mensagem informando que o pré-requisito Docker não está instalado.


Se você trabalha com shell scripting, recomendo verificar o Google ZX. Pode te ajudar bastante!

Continue lendo...