Rust的Command Line Tool - Just

@NEOM

前陣子打算用rust來挑戰AOC,因為突然忙起來加上後面的題目越來越難就暫停了。最近在youtube上分享自己的解題方式時看到了Just這個酷東西,Demo的時候大大化簡了每次要輸入一長串的指令。


Just a Command Runner

Just其實很簡單,就是一個用來包裝一些任務腳本的工具。其實工作的時候也有接觸過類似的東西,就是用Go開發的Task,只是工作上只是使用前人寫好的Taskfile,而CI又是用另一套解決方案,對這樣的工具著墨不深。
對比一下這兩個工具,從功能層面來看Task可以作到更精細的任務安排,但同時也比較複雜,而Just的功能相對陽春很多,但一般情況下都足夠使用了。Taskfile的撰寫是基於Yaml,並且需要了解如何設定,這點學習成本有略高,而Just是基於Shell的,對我來說比較容易。至於其他功能像是環境變量設定其實都差不多。

Quick Start

第一步要先安裝Just CLI,可以直接使用Cargo Install:

cargo install just

安裝完畢後先找個資料夾新增一個檔案名稱為justfile,我們先來看說明書的第一個範例:

## justfile
recipe-name:
  echo 'This is a recipe!'

another-recipe:
  @echo 'This is another recipe.'

這個justfile中有兩個命令分別是recipe-nameanother-recipe,接下來就是撰寫各自的shell指令。
我們先跑一下just --list就會看到可以用的指令

❯ just --list         
Available recipes:
    another-receipe
    recipe-name

要執行指定的recipe就使用just <recipe-name>
更細節的功能可以參考Just Programmer's Manual

雜談

會想使用just這類型的工具是因為可以預先將環境變數都包裝在指令中,我們通常會將應用程式隔離在容器中,透過抽換不同環境變數來模擬不同的環境。工作上大家都會把這些東西設定在IDE中,但每個人習慣的IDE不同,設定不見的能夠輕易轉換。透過just可以讓所有的設定在justfile中一目了然,也比較方便共享(但IDE還是要另外設定),我目前想像得到的是在本機開發時可以在不同狀況下輕易的切換環境(自主開發,本機整合測試)。
教學文件有提到這類型command runner的幾個價值,在此之前我其實不太理解這些工具的作用,感謝Youtube上各種酷炫的demo(像是簡單幾個指令生成templete,或是各種不同層次的測試與壓測),過去因為閒麻煩不做的測試透過簡單的指令後,一切行雲流水一氣呵成。

P.S. 目前也有人貢獻了Github Action,想要在CI中使用也是沒有問題的。