使用 Slack 应用开始的工作日志(第1回)- 基本操作 -
Back to Top为了覆盖更广泛的受众,这篇文章已从日语翻译而来。
您可以在这里找到原始版本。
1. 前言
#前几天,我写了一篇关于工作日志的文章,链接如下。
不过,
- 这是一个技术博客,仅仅发表文章似乎不够。
- 既然我是技术人员,就想趁此机会做点什么。
因此,我以工作日志为题材制作了一个应用程序。
(不过这只是一个学习用的示例应用)
另外,最近在公司内部培训中学习了需求定义、设计、文档撰写等内容,所以也顺便把这些练习一番。
因此,本文以工作日志应用为例,主要介绍如何整理需求定义到设计的过程。希望能面向与我一样制作应用的工程师们,共享制作过程,而非设计的优劣。至于应用的具体实现部分,本文将略去,另在后续文章中发布。
2. 开发应用
#- 首先,这次的目标是仅开发出创建工作日志应用所需的最基本功能。
- 考虑到我在上一篇博客中提到过使用 Slack 创建工作日志,这次就尝试制作一个 Slack 应用(技术要素稍后整理)。
- 开发按以下步骤进行:
- 需求定义
- 设计
- 制造与测试(在博客中略去具体细节)
2-1. 需求定义
#- 本文的重点内容,篇幅稍长,还请耐心阅读😓
- 在需求定义阶段,将按照“期望→需求→要件→规范”的顺序进行编写。
2-1-1. 列出期望
#首先,“期望”是指“希望系统(本例中为应用)实现的功能”。这里先将关于工作日志应用可能实现的内容随想随记地写出来。
- 希望自动创建工作日志。
手写比较麻烦,希望由应用自动生成。 - 希望自动报告工作日志。
希望实现自动化报告,例如发布到 Slack 频道等。 - 希望在规定时间创建和报告工作日志。
希望根据定时等调度创建、报告工作日志。 - 希望调整工作日志的格式。
想创建工作日志模板,以便统一日志格式。 - 希望随时注册任务。
希望在工作过程中随时将要记录到日志的任务注册进来。
(在创建日志时再想要记录的内容并不高效,所以想提前注册。) - 希望管理任务的状态。
想能够了解任务的进展情况。 - 希望保留已注册的任务。
即使在应用停止、重启后,也能查阅之前注册的任务。 - 希望保留已创建的工作日志。
即使在应用停止、重启后,也能查阅之前创建的工作日志。 - 希望能够对工作日志进行汇总。
将已创建的多日工作日志汇总,作为周报、月报,或评估面谈资料。 - 希望获得反馈。
希望对所创建的工作日志内容获得反馈。
(可能让 AI 等进行评审)
2-1-2. 列出需求
#接下来,“需求”是指“在期望中被采纳实现的部分”。这次作为工作日志应用,仅选取必要的最基本期望作为需求。因此,需求如下。
- 希望注册任务。
使得能够注册在工作中进行的任务。 - 希望确认已注册的任务。
能够查看已注册的任务。 - 希望设置任务状态。
使得能够为已注册的任务设置状态。
任务状态如下:- 未开始
- 进行中
- 完成
- 希望创建工作日志。
从已注册的任务中创建工作日志。
工作日志中包含“当天执行的任务列表”和“次日预定执行的任务列表”。 - 希望保存已注册的任务。
确保已注册的任务不会丢失。 - 希望保存已创建的工作日志。
确保已创建的工作日志不会丢失。
对于1-4项我觉得没问题。至于5、6项虽然有点不同,但暂且先这么定。注册和持久化大多数情况下是成对出现的,所以我觉得应该在某处合并为一项更好。
2-1-3. 期望中不包含在需求内的内容
#在期望中列出的内容里,不作为需求采纳的部分也要一并明确说明。
- 工作日志的自动生成
将工作日志生成作为应用功能,但生成流程的触发需手动进行。 - 工作日志的自动报告
报告需手动进行。 - 工作日志的定时生成
不是必需功能,故不在范围内。 - 工作日志的模板
本次将工作日志模板固定。 - 工作日志的汇总
不是必需功能,故不在范围内。 - 工作日志的反馈
不是必需功能,故不在范围内。
2-1-4. 编写要件
#接着,基于上述需求来定义要件。要件是指“定义系统完成后要实现的内容”。
- 用户必须能够通过应用界面注册任务。
- 用户必须能够在应用界面查看已注册任务列表。
- 用户必须能够通过应用界面,为已注册任务设置预定义的任务状态。
- 用户必须能够指示应用创建工作日志。
应用必须基于已注册的任务生成工作日志,并将其内容展示给用户。 - 即使用户停止并重新启动应用,也必须能够查看停止前注册的任务。
- 即使用户停止并重新启动应用,也必须能够查看停止前创建的工作日志。
2-1-5. 编写规范
#最后,尝试定义规范。规范是指“全面描述要件的文档”。
- 任务的注册
- 用户在界面上输入任务内容。
- 应用将用户输入的任务内容与以下内容一并注册:
- 任务ID
- 注册日期
- 任务状态
- 任务ID应为能唯一标识任务的标识符。
- 注册日期使用注册时的当前日期,格式为 yyyy/MM/dd。
- 注册日期应基于用户执行任务注册时的日本标准时间(JST)。
- 同时,将任务状态设置为“未开始”。
- 任务内容为必填项,去除前后空白字符后若为空字符串则视为无效。
- 如果任务内容未输入,应用应显示注册失败的消息并结束流程。
- 任务内容允许的最大输入字符数为100字符,此时不区分全/半角,均按1字符计算。
- 任务列表的确认
- 用户指示应用显示已注册任务的列表。
- 应用在界面上显示已注册任务的列表。
- 列表按注册顺序(任务ID)的升序排列。
- 列表中显示任务内容、注册日期、任务状态。
- 任务状态的变更
- 用户可指定目标任务并更改其任务状态。
- 任务状态包括“未开始”、“进行中”、“完成”三种。
- 如果用户尝试更新不存在的任务(任务ID),应用应显示设置失败的消息并结束流程。
- 如果用户尝试设置为预定义状态外的值,应用应显示设置失败的消息并结束流程。
- 应用使用用户输入的任务ID和任务状态更新指定任务的状态。
- 状态之间不设转换限制,必须按用户指定状态进行设置。
- 工作日志的生成
- 用户在界面上指示应用生成工作日志。
- 应用接收指令后,从已注册任务中创建工作日志。
- 工作日志由以下项目构成:
- 生成日期
- 当日执行任务列表
- 次日预定执行任务列表
- 生成日期显示为生成时的当前日期。
- 生成日期格式为 yyyy年MM月dd日(WeekDay)
※WeekDay 表示星期,如月、火、水…等。 - 生成日期基于日志创建时点的日本标准时间(JST)。
- 当日执行任务列表包含满足以下所有条件的任务:
- 当日内更新了任务状态。
- 任务状态为“进行中”或“完成”。
- 次日预定执行任务列表包含满足以下所有条件的任务:
- 任务状态为“未开始”或“进行中”。
- 任务的保存
- 用户注册任务时,应用应将任务持久化。
- 用户查看任务列表时,应用应从持久化任务中生成列表。
- 用户设置任务状态时,应用应更新持久化任务的状态。
- 工作日志的保存
- 应用在生成工作日志时,应将其持久化。
2-2. 设计
#2-2-1. 方式设计
描述应用整体的设计方针。由于是设计阶段,也会写明具体的技术要素。
- 应用将作为 Slack 应用来实现。
- 应用需要 UI,但觉得制作桌面应用有些过于繁琐。
- 在工作中使用 Slack,如果能在 Slack 中创建工作日志,
创建→报告可在同一处完成,比较理想。 - 使用 Bolt for JavaScript 框架。
- 为了持久化数据,将使用数据库,选用 SQLite。
- 由于本次是本地运行的示例,
轻量的内存数据库已足够。
- 由于本次是本地运行的示例,
- 在持久化层采用 O/R 映射工具 Drizzle ORM。
- https://orm.drizzle.team/
- 这是个人喜好。
- 开发语言使用 TypeScript(JavaScript)。
- 前述 Bolt 框架可使用 Python 和 JavaScript,
但不擅长 Python,所以使用擅长的 JavaScript。 - 不使用 Deno。
Bolt for JavaScript 支持 Deno,个人也不排斥 Deno,
但不确定 Deno 的普及度,因此本次先不采用。
- 前述 Bolt 框架可使用 Python 和 JavaScript,
2-2-2. 功能设计
将规范中的5和6(已注册任务与工作日志的保存/持久化)分别合并到1和4中。因此功能共计4项,以下分别说明。
- 注册任务
- 输入任务内容
- 在应用私信(DM)中作为消息输入任务内容。
- 验证任务内容
- 如果任务内容未输入,则显示错误消息。错误消息以应用回复的形式展示。
- 如果任务内容超过100字符,则显示错误消息。错误消息以应用回复的形式展示。
- 注册任务内容
- 通过执行 Slack 应用命令启动任务内容的注册。
- 将任务内容保存到数据库。保存内容包括输入的任务内容、注册日期和初始任务状态(未开始)。
- 输入任务内容
- 查看任务
- 显示任务列表
- 通过执行命令显示任务列表。任务列表的各项目包含任务内容、状态、设置按钮共4项。
- 如果没有已注册任务,则显示错误消息。错误消息以应用回复的形式展示。
- 显示任务列表
- 设置任务状态
- 更新任务状态
- 在任务列表中点击设置按钮,将任务状态设置为所选值。
- 更新任务状态
- 生成工作日志
- 生成工作日志
工作日志为文本形式。应包含当日执行任务列表和次日执行任务列表。当日执行任务列表为任务状态为“进行中”或“完成”的任务。次日执行任务列表为任务状态为“未开始”或“进行中”的任务。如果不存在符合条件的任务,则在工作日志中包含文本“没有可用任务”,而不是列表。通过执行命令生成工作日志。生成的工作日志以应用回复的形式展示。 - 保存工作日志
将生成的工作日志保存到数据库。保存内容包括工作日志ID、注册日期和工作日志内容三项。
- 生成工作日志
2-3. 图
#兼作设计练习,同时进行绘图。
2-3-1. 用例图
2-3-2. 领域模型
2-3-4. 鲁棒性图
3. 关于已创建的应用
#应用已完成,这里仅记录运行结果。
※至于应用本身,会在其他文章中进行说明。
3-1. 功能运行确认
#3-1-1. 注册任务
首先,注册任务。
通过 /task_add 命令,将任务内容作为参数设置后发送。

注册成功后会收到回复消息。

3-1-2. 查看任务
接着,通过 /task_list 命令显示已注册任务。
列表显示命令无需参数。

列表按注册顺序显示。
另外,为了能更新状态,将状态显示为下拉框,并配置了用于执行更新操作的按钮。

另外,为了测试运行,已注册了3个任务。
3-1-3. 设置任务状态
接着尝试修改状态。
在3个任务中,将一个改为进行中,另一个改为完成。

在应用上修改状态后点击更新按钮,状态即被更新,并收到回复消息。
3-1-4. 创建工作日志
最后尝试生成工作日志。
执行 /businessDiary_create 命令。

命令受理后,先返回响应,然后显示生成的工作日志。
在当天任务列表中显示“进行中”或“完成”的任务。
在次日任务预定列表中显示“未开始”或“进行中”的任务。

4. 总结
#在本文中,以工作日志为题材,进行了应用程序的需求定义、设计与实现。整理的内容属于个人学习的一部分,希望能对同样在设计中苦恼并制作应用的朋友有所帮助。
实际上实践后的感想如下:
- 由于属于业余项目,某些地方有省略之处,但撇开这些不谈,仍有很多不足之处,希望通过此类练习提高能力。
- 此外,即使是这样一个示例级别的应用,真正进行需求定义与设计时,也感觉工作量相当可观。
- 不过应用开发本身(就感受而言)似乎进展顺利,因此我认为这类需求定义、设计流程并非多余。
- 以前使用过低代码工具进行开发,受制于“工具生成的产物(代码)= 设计文档”的思路,常常省略设计而直接实现。但像这次这样先设计再实现的流程感觉更高效,即使不是低代码,通过事先将设计文档化也更有助于理解规范,而不是在实现中反复试错。
关于工作日志应用,今后也计划兼顾技术学习进行功能扩展。另外,所采用的技术要素也计划在后续以文章形式发布。






