fzfでpackage.jsonのscriptsを選んで実行
npm run foo
やpnpm run bar
を毎回タイピングして実行するのは面倒ですし、実行される内容まで細かく覚えていられません。そこで、fzfを使って実行します。
以前Zennに書いた記事ではpnpm
の方に対応していませんでしたが、今回は対応させました!
動作例
次のように、コマンド名 = 実行内容
のリストをfzfで選んで実行できます。
fzfを使っているため当然絞り込みできます。
必要なもの
今回はzshを使った例です。zsh以外の人はよしなに書き換えてください。
実行方法
Node.jsのプロジェクトにあるpackage.json
にて、Ctrl+x,nを入力すると実行できます。
ホットキーは必要に応じて書き換えましょう。
コード
いったんコード全体を載せます。次の項目から分けて解説します。
pnpmだった場合に切り替える
まずpnpmを使っている場合は書き換えます。
必要なファイル・コマンドが無い場合
package.json
とjq
が無い場合はエラーにします。
send-break
を使わないと、エラーになったときに次のプロンプトが表示されません。Enterを押せばよいのですが、せっかくなので気持ちを新たにプロンプトも切り替えたいところです。
send-break
を使えば、エラーになったときに次のプロンプトに切り替えてくれます。
scripts
を取得
jqを使ってpackage.json
のscripts
の中身を取っています。
取得した中身はつぎのようにコマンド名 = 実行内容
のリストになります。
jqの書き方を詳しく知りたい方は公式ドキュメントやとほほのjq入門あたりを読みましょう。
package.json
にscripts
が無かったらエラーにします。
fzfにリストを渡す
ここまできたらあとはいよいよfzfにリストを渡します。FZF_DEFAULT_OPTS
の設定に左右されないよう、デフォルトオプションを空にしています。
awk
を使って=
の前、つまりコマンド名を抜き出して変数に入れます。
何も選ばれなかったらそこで終了します。プロンプトのテーマによってはreset-prompt
を使わないとカーソルの位置がずれます。
ZLE経由で実行
あとは現在のプロンプトの入力をpnpm run dev
のように書き換えて実行です。BUFFER=
で入力を書き換えることで、コマンドの履歴として残すことができます。
今回はZLEを使ったため、実行にはZLEのウィジェットとしての登録とキーバインドの設定が必要です。
キーバインドの割り当て状況を知りたいならbindkey
コマンドを実行しましょう。一覧がずらっと出てきます。
npm run ◯◯
、pnpm run ◯◯
をfzfで実行できるようなスクリプトの紹介でした。fzfとZLEって本当に便利です。