4 ポイント 投稿者 justn 26 일 전 | 3件のコメント | WhatsAppで共有

数日かけて作った小さな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によるコマンド生成もありません。

まだ小さくて粗削りなサイドプロジェクトですが、毎日ターミナルで同じコマンドを繰り返し入力している人なら、すぐに効果を実感できる部分があると思い、共有します。

GitHub: https://github.com/bssm-oss/ganbatte

3件のコメント

 
recast7838 19 일 전

ありがとうございます

 
runableapp 26 일 전

いいアイデアです。

 
justn 25 일 전

ありがとうございます