创建出色 CLI 应用程序用户体验的 3 个步骤

以下是我在 CLI 项目中获得成功用户体验的关键因素。
9 位读者喜欢这篇文章。
Business woman on laptop sitting in front of window

图片来源:Mapbox Uncharted ERG, CC-BY 3.0 US

当我和一位队友在会议室交谈时,我们的经理带着其他开发团队成员走了进来。门砰地一声关上,我们的经理透露他有一个重大消息要宣布。在我们眼前展开的是我们将要开发的下一个项目——一个开源 CLI(命令行界面)应用程序。

在本文中,我想分享我在开发过程中学到的东西,特别是希望在开始开发 Datree 的 CLI 之前就了解到的东西。也许下一个人可以使用这些技巧更快地创建一个出色的 CLI 应用程序。

我叫 Noaa Barki。我做全栈开发人员已经六年多了,我来告诉你一个小秘密——我有一种超能力:我的兴趣和专长平均分配在后端和前端开发之间。我根本无法在两者之间做出选择。

因此,当我的经理透露关于我们未来 CLI 的消息时,后端开发人员的我非常兴奋,因为我从未创建过 CLI(或任何开源项目)。几秒钟后,前端开发人员的我开始想,如何在 CLI 应用程序中构建出色的用户体验?

由于 Datree CLI 帮助工程师防止 Kubernetes 错误配置,我的用户主要是 DevOps 和工程师,所以我采访了我所有的 DevOps 朋友,并在网上搜索了关于一般 DevOps 角色的信息。

以下是我提出的步骤

  1. 设计命令
  2. 设计用户界面
  3. 提供向后兼容性

步骤 1:设计命令

完成战略流程后,就该设计命令了。我认为 CLI 应用程序就像魔术盒——它们拥有以神奇方式工作的强大功能,但前提是你必须知道如何使用它们。这意味着 CLI 应用程序必须直观且易于使用。

我的 CLI 命令六大原则

以下是我设计和开发 CLI 命令的六大原则和最佳实践

1. 输入标志与参数

必填字段使用参数,其他所有字段使用标志。例如,datree test 命令会打印策略结果,假设您希望用户能够将输出打印到特定文件中。如果您使用 datree test {pattern} {output-file},则很难从读取执行的命令中理解哪个参数是模式,哪个参数是文件路径。

例如,以下命令就会出现这种情况:datree test **/* **.YAML。但是,如果您使用 datree test {pattern} -output {output-path},则会清晰得多。

注意: 报告显示,大多数用户认为标志更清晰。

2. 枚举样式与布尔标志

最好使用枚举样式标志而不是布尔样式标志,因为这样您(开发人员和用户)需要考虑命令中标志存在或不存在的所有组合。枚举样式标志是假定值的标志。枚举样式标志使实现 Tab 键自动完成变得容易得多。

3. 使用熟悉的语言

请记住,CLI 更多是为人类而不是机器构建的。为您的命令和描述选择真实的语言。

4. 命名约定

使用以单数形式和动词-名词格式命名的 CLI 命令。这允许像祈使句或请求一样读取命令,例如:计算机,启动应用程序!

尽量减少您使用的命令总数,不要急于为新命令引入新动词。这让用户更容易记住命令名称。

5. 提示

提供绕过提示选项。如果需要提示才能完成命令,则用户无法编写命令脚本。为了避免用户感到沮丧,简单的 --output 标志可以成为允许用户解析输出并编写 CLI 脚本的宝贵解决方案。

6. 命令描述

根命令应列出所有命令及其描述。为所有命令提供命令描述(或完全不提供描述),选择您希望其适应的屏幕宽度(通常为 80 个字符宽度),并以小写字符开头。此外,不要以句点结尾,以避免不清晰的换行符或丢失的句点。

步骤 2:设计用户界面

现在您对用户有了明确的定义。您还计划和设计了命令和输出。接下来,是时候考虑使 CLI 应用程序美观、易于访问且易于学习了。

如果您仔细想想,几乎每个应用程序都必须在用户的入职和旅程中处理 UX(用户体验)挑战。Web 应用程序 UX 的 如何 部分要明显得多,因为您有许多组件库(例如 material-UI 和 bootstrap)可以更轻松地采用标准样式指南和功能流程。但是 CLI 应用程序呢?CLI 界面是否有任何设计约定?如何创建美观且易于访问的 CLI 功能设计?有没有办法使 CLI UI 像 GUI 一样友好?

CLI 应用程序的 UI 和 UX 三大最佳实践

1. 使用颜色

颜色是吸引用户眼球并帮助他们更快地阅读命令和输出的好方法。最推荐的字体颜色是品红色、青色、蓝色、绿色和灰色,但不要忘记背景颜色可以提供更多变化。我鼓励您使用黄色和红色,但请记住,这些颜色通常保留用于错误和警告。

2. 输入-输出一致性

在整个应用程序中保持输入和输出的一致性;这鼓励了可用性,并允许用户快速学习如何与新命令交互。

3. 参数排序

根据参数与命令操作的相关性选择参数的位置。考虑 NestJS 的 generate 命令 nest generate {schematic} {name},它需要 schematicname 作为参数。请注意,动作 generate 直接指向 schematic,而不是 name,因此 schematic 作为第一个参数更有意义。

步骤 3:提供向后兼容性

避免修改输出。现在您知道如何创建完美的 CLI 应用程序了,请不要忘记将用户放在心中,尤其是在启用 CLI 脚本编写时。请记住,命令输出的任何更改都可能破坏用户当前的脚本;因此,请避免修改输出。

总结

创建新的 CLI 既令人兴奋又具有挑战性,而使用有帮助且易于使用的 UX 则增加了挑战。我的经验表明,以下三个关键因素决定了 CLI 项目的成功 UX

  1. 设计命令
  2. 设计用户界面
  3. 提供向后兼容性

这些阶段中的每一个阶段都有其自身的组成部分,这些组成部分支持逻辑并使您的用户的生活更轻松。

我希望这些概念对您有所帮助,并且您有机会在您的下一个项目中应用它们。

User profile image.
规划和设计应用程序架构,以及研究和采用开发最佳实践和编码标准是我的真正热情所在。在过去的四年中,我的工作主要围绕理解全栈开发过程的每个部分以及了解应用程序的生态系统。

3 条评论

更多提示
1. 根据您使用的语言,寻找一个库来为您处理 CLI;避免自己实现它;它不像看起来那么容易。
2. 注意 stdout 和 stderr,以及它们之间的差异和用途。如果您提供任何将由其他脚本解析的输出,请将该输出以及仅该输出放在 stdout 中,并将所有其他内容(例如进度条、日志信息、警告和错误,甚至输入提示,如果您有的话)放在 stderr 中。
3. 如果您的程序的目的是输出一些特定信息,请不要提供输出标志,而是将该信息输出到 stdout,如果用户想要保存它,他们有权将 stdout 重定向到文件。这样,他们可以在不创建文件的情况下运行它(如果他们只想查看一次),并且他们可以将其管道传输到其他程序,从而简化脚本编写。

如果能用链接增强文章,链接到可能有助于 CLI 开发的文章和工具,那就太好了。但是,感谢这篇文章以及明确概述的原则。

好文章!我在一家软件开发公司工作,我们经常需要为小型/琐碎的任务创建命令行实用程序,但没有人考虑 CLI 的 UI/UX。该行业只关注 Web 和移动应用程序的 UI/UX。正如 Luca 所说,最好用有助于 CLI 开发的工具来增强这篇文章。谢谢!

Creative Commons License本作品根据 Creative Commons Attribution-Share Alike 4.0 International License 获得许可。
© . All rights reserved.