🐡

自作Rust製CLIコマンドランチャー「qcl」の紹介

に公開

🚀 覚えない・間違えない CLI!コマンドスニペットランチャー「qcl」を作りました

はじめに

みなさん、ターミナルでよく使うコマンドを 覚えきれない とか
「これって引数なんだっけ?」って毎回ググっていませんか?

私は docker execsshkubectl など、 ちょっとしたコマンドを毎回

  • 履歴を探す
  • コピペする
  • 引数ミスってやり直す
    を繰り返していました。

docker exec -itまで打って、コンテナIDなんだっけ?ってdocker psし直したり・・・

それを解決するために作ったのが、
「qcl (Quick Command Launcher)」 です!

https://github.com/nakkiy/qcl


qcl (Quick Command Launcher)って何?

qcl は、YAMLで定義した「コマンドスニペット」を対話式で選んで実行できる CLI専用ランチャー です。


✅ qclの特徴

  • コマンドスニペットをYAMLで管理
  • インタラクティブにプレースホルダーへ入力/選択
  • 複数の値を一括で選んで埋め込むことも可能(function
  • ミスらない・覚えない!

具体的な使い方

1. インストール

git clone --depth 1 https://github.com/nakkiy/qcl ~/.qcl
cd ~/.qcl
cargo install --path .

インストール後、$HOME/.cargo/binPATH に含まれていることを確認してください。

export PATH="$HOME/.cargo/bin:$PATH"

bashの場合、下記を実行することで ctrl + / で実行することができます。

echo "[ -f ~/.qcl/shell/keybinding.bash ] && source ~/.qcl/shell/keybinding.bash" >> ~/.bashrc

2. スニペットファイルの作成

デフォルトのスニペットファイルは
~/.config/qcl/snippets.yaml に配置します。

サンプルをコピーするだけで動きます!

mkdir -p ~/.config/qcl/
cp ~/.qcl/sample/snippets.yaml ~/.config/qcl/

3. 実行してみる

qcl
  • スニペット一覧が表示される
  • 選ぶ
  • プレースホルダーがある場合は、値を入力 or 選択
  • 最終的なコマンドが表示される!
    (そのまま実行 or コピペして使う)

実際のスニペット例

docker exec を選んで入る

snippets:
  - name: docker-exec
    command: docker exec -it [[container_id from:"docker ps --format '{{.ID}} {{.Names}}'" select:1]] /bin/bash

動作:

  • docker ps の結果を選択肢にして
  • コンテナ名を選んだら
  • 自動的に docker exec -it {container} /bin/bash が組み立てられる!

ssh config を選択してログイン

  - name: ssh-login
    command: ssh [[host from:function]]
    function:
      multi: false
      from: >
        awk '$1 == "Host" {
                if (host != "" && hostname != "" && user != "")
                    print host, hostname, user
                host=$2; hostname=""; user=""
              }
              $1 == "Hostname" {hostname=$2}
              $1 == "User" {user=$2}
              END {
                if (host != "" && hostname != "" && user != "")
                    print host, hostname, user
              }' ~/.ssh/config
      select:
        host: 0

.ssh/configHost を一覧化し、対話的にサーバーを選んで ssh 接続!


なんで作ったの?

シンプルに「覚えるのめんどくさい」「間違えるのがだるい」
そんなCLI生活から脱却するために作りました。

他にも

  • fzf + スクリプト とかでもできるんだろうけど、作りたかったから作った
  • Rustでなにか作りたかったから作った

今後のアップデート予定

  • 選択リストに検索機能を追加
  • スニペットのタグ管理・検索
  • TUIによるスニペット管理機能(qcl tui構想中!)

コントリビュート大歓迎!

「こんなスニペット作った」とか
「この機能ほしい!」とか
気軽にPR・Issueください 👊


最後に

「覚えない・間違えない CLI」
これを目指して作った qcl
ぜひターミナルライフの中に取り入れてみてください!


おわりに

Zennでもフィードバック待ってます!
「こういう使い方してるよ!」とか聞けたら嬉しい!

Discussion