圖片來源: 

Shopify

過去一直是程式語言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的依賴,這項工作將在今年稍晚時完成。

熱門新聞

Advertisement