Багато розробників помилково вважають інтерфейс командного рядка (CLI) лише способом взаємодії з програмою для людини. Однак, як тільки ваш інструмент потрапляє у shell-скрипт або CI/CD конвеєр, він стає API, від якого залежать інші програмні системи. Це вимагає від розробника відповідального підходу до проектування, адже будь-яка зміна в поведінці може зламати автоматизовані процеси, на які покладаються користувачі вашого продукту.
Першим кроком до надійного CLI є чітке розділення потоків виведення. Стандартний вивід (stdout) має містити лише дані, придатні для парсингу, наприклад, JSON або CSV. Інформаційні повідомлення, попередження чи прогрес-бари слід спрямовувати у стандартний потік помилок (stderr). Змішування цих потоків робить інструмент непридатним для автоматизації, оскільки парсери не зможуть відрізнити корисну інформацію від звичайного тексту, призначеного для читання людиною.
Використання кодів виходу (exit codes) є критично важливим для інтеграції. Програма повинна повертати нуль у разі успіху та ненульове значення при помилках. Це дозволяє скриптам автоматично реагувати на збої. Важливо документально закріпити значення цих кодів, щоб зовнішні системи могли правильно інтерпретувати причини невдач, замість того, щоб продовжувати виконання після критичної помилки, що може призвести до серйозних проблем у роботі системи.
Хороший CLI повинен пропонувати вибір між зручністю для людей та придатністю для машин. Замість того, щоб намагатися догодити всім одночасно, надайте користувачам можливість обирати формат виводу через прапорці, наприклад, --format json. Це дозволяє зберігати читабельність за замовчуванням, одночасно підтримуючи складні автоматизовані сценарії. Пам'ятайте, що будь-яка зміна структури виводу є порушенням контракту, тому такі оновлення мають бути свідомими та добре задокументованими.
Передбачуваність поведінки — це основа довіри до вашого інструменту. Команди повинні мати чіткі семантичні правила: чи змінює програма файли, чи лише перевіряє їх? Чи потрібне підтвердження для деструктивних дій? Використання таких прапорців, як --check або --write, допомагає уникнути випадкових помилок. Крім того, прапорці та аргументи слід розглядати як публічний інтерфейс, зміна якого може зруйнувати робочі процеси багатьох користувачів, тому до таких змін слід ставитися вкрай обережно.
Нарешті, тестування CLI має виходити за межі перевірки внутрішньої логіки. Необхідно впроваджувати інтеграційні тести, які перевіряють поведінку програми в реальних умовах: коди виходу, вміст потоків, успішність парсингу JSON та обробку відсутніх файлів. Це забезпечує стабільність контракту між вашим інструментом та його користувачами. Зрештою, найкращі CLI-інструменти — це ті, на які можна покластися, не знаючи їхньої внутрішньої реалізації, що є ознакою зрілої інженерної культури.
🔗 Першоджерело: Читати оригінал
