shell historyの反復コマンドを見つけてalias/workflowに置き換えてくれるCLIを作りました
(github.com/bssm-oss)数日かけて作った小さなCLIのサイドプロジェクトを共有します。
shell aliasは良いものです。速くて、シンプルで、手になじみます。
でも、aliasをずっと.zshrcに押し込んでいくやり方は長続きしないと思っていました。
最初のうちは問題ありません。
alias gs='git status -sb'
alias dc='docker compose'
問題は、これが増え続けることです。
Git alias、Docker alias、pnpm alias、ssh alias、プロジェクトごとのaliasが1つのファイルに積み重なり、あとになると自分が何を作っておいたのかも忘れてしまいます。
aliasは明らかに生産性のために作ったはずなのに、いつの間にか記憶力テストになってしまいます。
もっともったいないのはshell historyでした。
自分が繰り返し打っているコマンドやコマンドシーケンスは、すでにhistoryの中に蓄積されています。ところが、ほとんどのshellはそれを単なる過去の記録として置いているだけです。
そこでganbatteを作りました。バイナリ名はgnbです。
ganbatteはshell historyを分析して、反復コマンドはalias候補に、繰り返されるコマンドシーケンスはworkflow候補に推薦するCLIです。
brew install bssm-oss/tap/ganbatte
gnb suggest # 反復コマンドとworkflow候補を探す
gnb migrate # 既存のshell aliasを取り込む
gnb # TUIで探索
たとえばこんな感じです。
=== Alias Suggestions ===
1. c = claude
Used 5 times · saves ~25 keystrokes
=== Workflow Suggestions ===
1. git-add
Step 1: git add .
Step 2: git commit -m "update"
Step 3: git push
Applying all suggestions would save ~89 keystrokes based on your history.
Atuinが「自分が何を入力したか」をうまく覚えてくれる存在だとすれば、ganbatteは「自分が繰り返し入力しているもの」を今後も使えるコマンドに変えてくれる方向に近いです。
既存のaliasも取り込めます。
gnb migrate
引数なしで実行すると、TUIでaliasとworkflowを検索して実行できます。
gnb
グローバルaliasとプロジェクトごとの.ganbatte.tomlを分けて使うことができ、危険なコマンドには確認プロンプトを付けることもできます。
[alias.nuke]
cmd = "git reset --hard HEAD"
confirm = true
重要なのは、すべてローカルで動くという点です。
shell historyやtrack logをサーバーに送ることはありません。telemetry、アカウント、cloud sync、AIによるコマンド生成もありません。
まだ小さくて粗削りなサイドプロジェクトですが、毎日ターミナルで同じコマンドを繰り返し入力している人なら、すぐに効果を実感できる部分があると思い、共有します。
3件のコメント
ありがとうございます
いいアイデアです。
ありがとうございます