cargo-makeを少し使いやすくする
タスクランナーとしてcargo-makeを使用しています. ここでは、より使いやすくするためのPowerShellスクリプトを作成したのでここに残しておきます.
cargo-makeはタスクランナーです. 汎用的に使えるタスクランナーを探していて、他にも Just がありました. cargo-makeは基本的にRust言語の開発用ツールですが、Rust言語以外でも汎用的に使うことができます. また、Makefile形式よりかはTOML形式の記述に統一していきたいとも思っていて、cargo-makeを利用しています. ちなみに、機能的にはどちらでも問題なさそうな感じでした.
cargo-makeを日常的に使っていて、ちょっとこういう機能が欲しいなとかここを改善してほしいなと思うところがありました. そこで、PowerShellでWrapper関数(コマンドレット)を作成してみました.
タスク一覧
まずは、タスクの一覧表示の改善です.cargo-makeは--list-all-steps
オプションを指定することでタスクの一覧を表示できます.
PS > cargo make --list-all-steps
[cargo-make] INFO - cargo make 0.37.16
[cargo-make] INFO - Build File: Makefile.toml
[cargo-make] INFO - Task: default
[cargo-make] INFO - Profile: development
Hooks
----------
end - By default this task is invoked at the end of every cargo-make run.
init - By default this task is invoked at the start of every cargo-make run.
No Category
----------
dev - Run gradio with watch mode [aliases: default]
resize - Resize image
serve - Serve app
Tools
----------
empty - Empty Task
正直なところ見やすいとは言いづらいですね. これは数が少ないからいいですが、多くなってくるとわかりづらくなります. カテゴリを指定するオプションもありますが、まずはどんなカテゴリがあるかの確認もしたいです.
これを整形して見やすくしましょう.
具体的には出 力内容から必要な文字を読み取って、カスタムオブジェクトに変換して表示します.
こうすることで PowerShell上で色々操作ができるようになります.
ここではさらにcsviewを使って見やすく表示します.
そのためにカスタムオブジェクトからCSV形式に変換(ConvertTo-Csv
)を使います.
これを使うと(コードは後述)さきほどのタスク一覧が次のように表示されます:
PS > psmake -List
┌────────┬───────────────────────────────────────────────┬─────────────┐
│ Name │ Description │ Category │
├────────┼───────────────────────────────────────────────┼─────────────┤
│ dev │ Run gradio with watch mode [aliases: default] │ No Category │
│ resize │ Resize image │ No Category │
│ serve │ Serve app │ No Category │
│ empty │ Empty Task │ Tools │
└────────┴───────────────────────────────────────────────┴─────────────┘
タスク選択
タスク一覧を表示する以外にも、インタラクティブなタスク選択機能も 追加しました. fzfを使ってタスクを選択します.
PS > psmake -Sel
>
6/6 (0)
> end - By default this task is invoked at the end of every cargo-make run
init - By default this task is invoked at the start of every cargo-make run
dev - Run gradio with watch mode [aliases: default]
resize - Resize image
serve - Serve app
empty - Empty Task
複数のmakefile
あまり使うことはありませんが、makefile.toml
とは別にローカル用のmakefileが欲しいことがありました.
そのため、fzfを使って手軽に切り替えられる機能を追加しました.