Читать книгу Создай приложение без кода в терминале - - Страница 2

Глава 2. **Основные инструменты для no-code в CLI**

Оглавление

В современном мире разработки программного обеспечения концепция no-code набирает всё большую популярность, позволяя создавать приложения без необходимости глубокого знания программирования. Однако, когда речь заходит о работе в командной строке (CLI), многие ошибочно полагают, что это удел исключительно опытных разработчиков. На самом деле, существует множество инструментов, которые позволяют реализовывать no-code подходы прямо в терминале, упрощая создание, управление и развёртывание приложений. В этой главе мы рассмотрим основные инструменты для no-code в CLI, их возможности, преимущества и примеры использования.


### 1. **Терминальные интерфейсы и конструкторы**


Одним из ключевых направлений no-code в CLI являются инструменты, которые позволяют создавать пользовательские интерфейсы прямо в терминале. Они предоставляют визуальные или декларативные способы построения интерактивных приложений без написания кода.


#### **1.1. Bubble Tea (Go)**

Bubble Tea – это фреймворк для создания терминальных интерфейсов на языке Go. Он позволяет разрабатывать сложные TUI (Terminal User Interface) приложения с минимальным количеством кода. Хотя Bubble Tea требует базовых знаний Go, его подход основан на компонентной архитектуре, что делает его доступным даже для новичков.


**Преимущества:**

– Гибкость и расширяемость.

– Поддержка анимаций и сложных взаимодействий.

– Активное сообщество и документация.


**Пример использования:**

```go

package main


import (

"fmt"

"os"


tea "github.com/charmbracelet/bubbletea"

)


type model struct {

choices []string

cursor int

selected map[int]struct{}

}


func initialModel() model {

return model{

choices: []string{"Option 1", "Option 2", "Option 3"},

selected: make(map[int]struct{}),

}

}


func (m model) Init() tea.Cmd {

return nil

}


func (m model) Update(msg tea.Msg) (tea.Model, tea.Cmd) {

switch msg := msg.(type) {

case tea.KeyMsg:

switch msg.String() {

case "ctrl+c", "q":

return m, tea.Quit

case "up":

if m.cursor > 0 {

m.cursor–

}

case "down":

if m.cursor < len(m.choices)-1 {

m.cursor++

}

case " ":

_, ok := m.selected[m.cursor]

if ok {

delete(m.selected, m.cursor)

} else {

m.selected[m.cursor] = struct{}{}

}

}

}

return m, nil

}


func (m model) View() string {

s := "What would you like to do?\n\n"

for i, choice := range m.choices {

cursor := " "

if m.cursor == i {

cursor = ">"

}

checked := " "

if _, ok := m.selected[i]; ok {

checked = "x"

}

s += fmt.Sprintf("%s [%s] %s\n", cursor, checked, choice)

}

s += "\nPress q to quit.\n"

return s

}


func main() {

p := tea.NewProgram(initialModel())

if _, err := p.Run(); err != nil {

fmt.Printf("Alas, there's been an error: %v", err)

os.Exit(1)

}

}

```

Этот пример демонстрирует простое меню с выбором опций, которое можно запустить в терминале. Несмотря на то, что код написан на Go, его структура интуитивно понятна, и при желании можно использовать шаблоны для генерации подобных интерфейсов без глубокого погружения в программирование.


#### **1.2. Textual (Python)**

Textual – это фреймворк для создания богатых терминальных приложений на Python. Он предоставляет высокоуровневые абстракции для работы с интерфейсами, что делает его идеальным инструментом для no-code подходов.


**Преимущества:**

– Простота использования благодаря Python.

– Поддержка виджетов и стилей.

– Возможность создания сложных приложений с минимальными усилиями.


**Пример использования:**

```python

from textual.app import App, ComposeResult

from textual.widgets import Header, Footer, Button, Static


class MyApp(App):

def compose(self) -> ComposeResult:

yield Header()

yield Static("Welcome to Textual!", id="welcome")

yield Button("Click me!", id="button")

yield Footer()


def on_button_pressed(self, event: Button.Pressed) -> None:

self.query_one("#welcome", Static).update("Button was clicked!")


if __name__ == "__main__":

app = MyApp()

app.run()

```

Этот код создаёт простое приложение с заголовком, кнопкой и подвалом. При нажатии на кнопку текст обновляется. Textual позволяет быстро прототипировать интерфейсы, что делает его отличным выбором для no-code разработки в CLI.


### 2. **Инструменты для автоматизации и скриптинга**


Автоматизация задач – одна из ключевых возможностей CLI. Существуют инструменты, которые позволяют создавать сложные сценарии без написания кода, используя визуальные редакторы или декларативные конфигурации.


#### **2.1. Makefile**

Makefile – это классический инструмент для автоматизации сборки и выполнения задач. Хотя он требует знания синтаксиса, его можно рассматривать как no-code решение для управления процессами в терминале.


**Преимущества:**

– Простота и универсальность.

– Возможность управления зависимостями между задачами.

– Широко используется в Unix-системах.


**Пример использования:**

```makefile

.PHONY: build run clean


build:

docker build -t myapp .


run:

docker run -it myapp


clean:

docker rmi myapp

```

Этот Makefile определяет три задачи: сборка Docker-образа, запуск контейнера и очистка. Пользователь может просто ввести `make build` или `make run` в терминале, не зная деталей выполнения команд.


#### **2.2. Taskfile (Task)**

Taskfile – это современная альтернатива Makefile, написанная на Go. Она предоставляет более удобный синтаксис и дополнительные возможности, такие как переменные и условия.


**Преимущества:**

– Более читаемый синтаксис по сравнению с Makefile.

– Поддержка переменных и условий.

– Кросс-платформенность.


**Пример использования:**

```yaml

version: '3'


tasks:

build:

cmds:

– docker build -t myapp .

sources:

– Dockerfile

– ./src/**

generates:

– myapp


run:

cmds:

– docker run -it myapp

deps: [build]


clean:

cmds:

– docker rmi myapp

```

Этот Taskfile определяет те же задачи, что и Makefile, но с более понятным синтаксисом. Инструмент автоматически отслеживает зависимости и выполняет задачи в правильном порядке.


### 3. **Инструменты для работы с данными**


Работа с данными – неотъемлемая часть многих приложений. В CLI существуют инструменты, которые позволяют обрабатывать и анализировать данные без написания кода.


#### **3.1. jq**

jq – это легковесный и гибкий инструмент для обработки JSON данных в командной строке. Он позволяет фильтровать, преобразовывать и извлекать данные из JSON-структур с помощью простого синтаксиса.


**Преимущества:**

– Мощный и гибкий синтаксис для работы с JSON.

– Возможность обработки больших объёмов данных.

– Широко используется в скриптах и пайплайнах.


**Пример использования:**

```bash

echo '{"name": "John", "age": 30, "city": "New York"}' | jq '.name'

```

Эта команда извлекает значение поля `name` из JSON-объекта. jq поддерживает сложные запросы, такие как фильтрация, сортировка и преобразование данных.


#### **3.2. xsv**

xsv – это инструмент для работы с CSV-файлами в командной строке. Он предоставляет широкий набор команд для анализа и обработки табличных данных.


**Преимущества:**

– Быстрая обработка больших CSV-файлов.

– Поддержка различных операций, таких как фильтрация, сортировка и агрегация.

– Удобный интерфейс командной строки.


**Пример использования:**

```bash

xsv select name,age data.csv | xsv sort -n age

```

Эта команда выбирает столбцы `name` и `age` из файла `data.csv` и сортирует их по возрасту. xsv позволяет выполнять сложные операции с данными без необходимости писать скрипты на Python или R.


### 4. **Инструменты для развёртывания и управления инфраструктурой**


No-code подходы в CLI также применимы к развёртыванию и управлению инфраструктурой. Существуют инструменты, которые позволяют описывать инфраструктуру в декларативном виде и автоматизировать её развёртывание.


#### **4.1. Terraform**

Terraform – это инструмент для управления инфраструктурой как кодом (Infrastructure as Code, IaC). Он позволяет описывать инфраструктуру в декларативных конфигурационных файлах и автоматизировать её развёртывание.


**Преимущества:**

– Поддержка множества облачных провайдеров.

– Декларативный подход к описанию инфраструктуры.

– Возможность управления состоянием инфраструктуры.


**Пример использования:**

```hcl

provider "aws" {

region = "us-west-2"

}


resource "aws_instance" "example" {

ami = "ami-0c55b159cbfafe1f0"

instance_type = "t2.micro"

}

```

Этот код описывает создание виртуальной машины в AWS. Terraform автоматически развернёт инфраструктуру на основе этого описания, что делает его мощным инструментом для no-code управления инфраструктурой.


#### **4.2. Ansible**

Ansible – это инструмент для автоматизации управления конфигурацией и развёртывания приложений. Он использует YAML для описания задач, что делает его доступным для пользователей без глубоких знаний программирования.


**Преимущества:**

– Простота использования благодаря YAML.

– Поддержка большого количества модулей для различных задач.

– Возможность управления удалёнными серверами.


**Пример использования:**

```yaml

––

– name: Install and start Apache

hosts: webservers

tasks:

– name: Install Apache

apt:

name: apache2

state: present

– name: Start Apache service

service:

name: apache2

state: started

```

Этот плейбук устанавливает и запускает веб-сервер Apache на удалённых серверах. Ansible позволяет автоматизировать рутинные задачи без необходимости писать скрипты на Bash или Python.


### 5. **Инструменты для создания CLI-приложений без кода**


Существуют инструменты, которые позволяют создавать полноценные CLI-приложения без написания кода, используя визуальные редакторы или декларативные конфигурации.


#### **5.1. Cobalt**

Cobalt – это фреймворк для создания CLI-приложений на основе конфигурационных файлов. Он позволяет описывать команды, аргументы и флаги в YAML, что делает его идеальным для no-code разработки.


**Преимущества:**

– Простота создания CLI-приложений.

– Поддержка сложных сценариев с минимальными усилиями.

– Возможность интеграции с другими инструментами.


**Пример использования:**

```yaml

name: myapp

version: 1.0.0

commands:

greet:

description: Greet the user

arguments:

name:

description: Your name

required: true

action: echo "Hello, {{name}}!"

```

Этот конфигурационный файл описывает простое приложение с командой `greet`, которая принимает аргумент `name` и выводит приветствие. Cobalt автоматически генерирует CLI-интерфейс на основе этого описания.


#### **5.2. CLIgen**

CLIgen – это инструмент для генерации CLI-приложений на основе шаблонов. Он позволяет создавать сложные интерфейсы командной строки без необходимости писать код.


**Преимущества:**

– Быстрое прототипирование CLI-приложений.

– Поддержка шаблонов и переменных.

– Возможность генерации кода на различных языках.


**Пример использования:**

```yaml

name: myapp

commands:

– name: version

description: Show version

action: echo "1.0.0"

– name: help

description: Show help

action: echo "Usage: myapp [command]"

```

Этот шаблон описывает приложение с двумя командами: `version` и `help`. CLIgen автоматически сгенерирует исполняемый файл на основе этого описания.


### Заключение


В этой главе мы рассмотрели основные инструменты для no-code разработки в CLI. От создания терминальных интерфейсов до автоматизации задач и управления инфраструктурой – современные инструменты позволяют реализовывать сложные сценарии без необходимости глубокого знания программирования. Использование этих инструментов открывает новые возможности для разработчиков и пользователей, желающих быстро и эффективно создавать приложения в командной строке.


В следующей главе мы погрузимся в практические примеры создания no-code приложений в CLI, используя рассмотренные инструменты.


Создай приложение без кода в терминале

Подняться наверх