Shopify开发团队解释弃Ruby,改用Node重写CLI工具的原因

过去一直是程序语言Ruby爱用者,同时也是Ruby项目重要贡献者的电子商务开发和托管平台Shopify,在去年将原本以Ruby编写的Shopify CLI工具,使用Node重新改写,Shopify开发团队现在公开了他们这项决定背后的原因和权衡。

Shopify CLI是Shopify平台开发人员的重要工具,能够用于构建主题、应用程序和Hydrogen店面,使开发人员能以最佳实践创建新项目与平台集成,或是发布生产构件供店家使用。Shopify CLI开发团队发现,开发Shopify应用程序的开发人员,在使用CLI上一直存在部分体验问题,因此重新查看CLI开发语言选择,希望做出一些改变。

Shopify CLI在2018年末的时候开始发展,Shopify开发团队提到,考虑当时的语言资源和知识,他们仍认为Ruby是一个明智的选择。但是要使用Ruby开发的CLI,用户计算机上需要安装Ruby,开发团队则通过提供安装文件来解决这个问题,在2020年,Shopify开发团队将ThemeKit集成到CLI中,在单一CLI中提供所有的开发功能集。

但因为Shopify CLI后来添加UI扩展组件支持,让开发人员可以在平台使用自己的UI扩展组件,这使得CLI开始依赖Node工具转换和打包扩展程序代码。另一方面,Hydrogen开发团队也考虑使用Node构建新工具,而不是将Hydrogen工作流程集成到Shopify Ruby CLI上,因为过去用户常因没有完成特定额外的步骤,导致CLI执行遭遇问题,因此Hydrogen团队希望用户可以不再需要在系统安装Ruby Runtime,只要使用NPM安装指令就解决项目相依项目的需求。

考量Shopify越来越依赖JavaScript和Node Runtime的资源、工具和知识,因此Shopify开发团队重新查看开发语言的选择,希望新语言采用能尽量减少Runtime的安装需求,使开发人员体验获得提升,而且内部团队也可以简单贡献,最后他们决定以TypeScript重写CLI,并且在Node Runtime上运行。

Shopify内部正在使用的语言除了最熟悉的Ruby之外,其次是Node、Go和Rust,Go和Rust以技术层面来说也是理想的选择,Shopify开发团队提到,Go和Rust程序能够简单编译成二进制文件,因此用户不需要安装Runtime,但Shopify之所以最后选择Node,是因为内部团队更熟悉Node,他们不希望语言成为内部团队贡献CLI的障碍。

另外,使用Node来构建CLI,还有一个有别于Ruby的特性,Node具有灵活的模块系统和可扩展性,Node模块系统中同一递移组件的多个版本不会互相冲突。

Shopify CLI也在从Ruby更换到Node的过程,引入函数程序设计的概念,开发团队解释,Ruby CLI中的命令业务逻辑,属于有状态且具有非常多假设,使得程序代码更难理解、贡献和测试,在Node CLI中他们采用更具函数性的逻辑,开发团队没有教条式的遵守函数程序设计规范,但他们目标让逻辑成为传递状态的函数组合,把JavaScript对象和函数当作组合单元,通过操纵传递的实例创建对象副本。

Shopify开发团队提到,Node CLI明显改善了开发人员体验,虽然Hydrogen和应用程序开发人员现在只需要Node Runtime,但是主题开发人员仍需要Ruby和Node Runtime,Shopify开发团队目前已经着手移除对Ruby的依赖,这项工作将在今年稍晚时完成。