🐡
自作Rust製CLIコマンドランチャー「qcl」の紹介
🚀 覚えない・間違えない CLI!コマンドスニペットランチャー「qcl」を作りました
はじめに
みなさん、ターミナルでよく使うコマンドを 覚えきれない とか
「これって引数なんだっけ?」って毎回ググっていませんか?
私は docker exec
や ssh
、kubectl
など、 ちょっとしたコマンドを毎回
- 履歴を探す
- コピペする
- 引数ミスってやり直す
を繰り返していました。
docker exec -it
まで打って、コンテナIDなんだっけ?ってdocker ps
し直したり・・・
それを解決するために作ったのが、
「qcl (Quick Command Launcher)」 です!
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/bin
が PATH
に含まれていることを確認してください。
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/config
の Host
を一覧化し、対話的にサーバーを選んで ssh
接続!
なんで作ったの?
シンプルに「覚えるのめんどくさい」「間違えるのがだるい」
そんなCLI生活から脱却するために作りました。
他にも
-
fzf
+スクリプト
とかでもできるんだろうけど、作りたかったから作った - Rustでなにか作りたかったから作った
今後のアップデート予定
- 選択リストに検索機能を追加
- スニペットのタグ管理・検索
- TUIによるスニペット管理機能(
qcl tui
構想中!)
コントリビュート大歓迎!
「こんなスニペット作った」とか
「この機能ほしい!」とか
気軽にPR・Issueください 👊
最後に
「覚えない・間違えない CLI」
これを目指して作った qcl
ぜひターミナルライフの中に取り入れてみてください!
おわりに
Zennでもフィードバック待ってます!
「こういう使い方してるよ!」とか聞けたら嬉しい!
Discussion