寫個取代自己的工具:Coco —— 自動化項目分析與建議
作為一個資深的軟件工程師,我經(jīng)常遇到其他/她開發(fā)人員大量的重復問題。過去只靠寫博客,現(xiàn)在,我有了四種方式來解決:
- 博客。我的博客 phodal.com 上有 850+ 的博客
- 工具。創(chuàng)造開源工具解決重復性問題,如:ADR、Lemonj、Coca、Clij
- 開源電子書。系統(tǒng)性的歸納某一個領域相關實踐和模式,如:《Serverless 應用架構》
- 知識平臺。結合工具和電子書,如 DevOps 知識平臺:Ledge
即使如此,依舊沒有解決一個問題:我需要人力來分析項目、再拋出這些鏈接。于是,過去我一直就在想:能否做一個工具來取代自己? 當然了,我的真實意思不是:取代我自己,而是取代我做的那些重復性活動。(PS:等寫完之后,再寫一個自動化寫 PPT 的工具,就完美了。)
所以,我開始編寫一個新的工具,一個關于對代碼進行自動化分析與建議的工具。
Coco:自動化分析與建議工具
在 Coco 的 README ( https://github.com/phodal/coco )里,可以看到現(xiàn)在規(guī)劃的 1.0 的相關的 Todo 列表。從某種意義上來說,這是一個 AI 工具(專家系統(tǒng)),它依賴于資深工程師的大量的經(jīng)驗。它的難度主要在于:
- 工具的 MVP 版本。驗證工具在技術上是可行的(PS:從我的角度來看,它并不存在問題)
- 持續(xù)性的經(jīng)驗輸入。持續(xù)完善整個工具的建議體系和架構
- 上下游生態(tài)完善。獲取上下游工具相關的資料和數(shù)據(jù)(PS:如 DevOps、云原生相關)
- 避免功能膨脹。必要的情況下,通過插件的方式來擴展功能
Coco 與 Coca 的關系
Coca 是筆者(@phodal)寫的一個用于系統(tǒng)重構、系統(tǒng)遷移和系統(tǒng)分析的瑞士軍刀。它可以分析代碼中的測試壞味道、模塊化分析、行數(shù)統(tǒng)計、分析調用與依賴、Git 分析以及自動化重構等。
Coco 這個名字的來源是椰子雞,正如 Coca 項目(https://github.com/phodal/coca )的來源是 Coca Cola,只是維度上由喝的變成吃的而已。Coco 是 Coca 的姊妹工具,與 Coca 工具是相互補充。
Coco:自動化分析與建議工具
Coco 要實現(xiàn)的主要功能是:
- 分析。對項目進行全面化的分析,如 Git 歷史、模塊化分析、框架使用等
- 報告。以可視化和文檔的形式輸出項目的總覽信息(結合 D3 可視化的形式)
- 建議。針對于項目中的問題,進行自動化的建議
- 成熟度。(TBC,待定)
從里程碑來說,我們所要做的功能特別多。而結合 Coca 和 DevOps 知識平臺 Ledge 在開源社區(qū)經(jīng)受了一年多的洗禮,它們受到了越來越多的開發(fā)者的喜愛。與此同時,在這一年多的時間里,我也將自己的經(jīng)驗不斷也輸入到了項目中。
與此同時,我們將先創(chuàng)建一個組織:Inherd,作為這一系列工具的核心團隊。
Coco 技術棧
作為一個 CLI 工具,我本該選取 Golang 作為主要技術棧的。但是,經(jīng)常與 Ledge 的開發(fā)者們討論一番后,大家決定使用 Rust(雖然大部分人都沒有經(jīng)驗)作為主要語言。與此同時,作為一個已經(jīng)使用了一年的 Rust 語言的開發(fā)者,我覺得這并不是太大的難題。與此同時,這個工具未來也將在瀏覽器上運行,Rust 的 Web Assembly 支持比幾大主流語言友好。
除了 Rust 之外,我們還需要可視化相關的報告等,為此我們還需要前端相關技術棧的開發(fā),如 D3.js。當然了,能結合 Web Assembly + D3.js + 其它框架也是一個不錯選項。
Coco 進度
對于寫一個工具來說,最難的是開個頭,隨后就是補充功能和重構了,誰都能做。
當前主要進展:
- 使用 libgit2 實現(xiàn)對 Git 相關的分析中。
- 集成 Tokei 實現(xiàn) CLOC 相關的行數(shù)統(tǒng)計。
- 集成 Scie 的框架檢測功能,對技術棧進行可視化
以下主要模塊還未開始:
- 模塊化分析
- 可視化報告
- 標簽生成(AI,分詞)
- 改進建議
- 工具建議
本文轉載自微信公眾號「phodal」,可以通過以下二維碼關注。轉載本文請聯(lián)系phodal公眾號。