本記事は SmartHR Advent Calender 21日目の記事です。
はじめに
普段 Git を利用して開発をしていますが、気づいたら手元に不要なブランチでいっぱい...ということがよくあります。一個ずつ git branch -D hoge
というの手間。選択したブランチだけを一括で削除する便利コマンドがないものか...と感じていたときがありました。
約4年前の2020年に peco を利用して、複数ブランチの一括削除スクリプトを用意しそれを利用していました。
今回はTypeScriptの勉強がてら同じような機能を再実装してみたいと思います。
成果物はこちら
TypeScript を利用してGitブランチの複数選択削除ツール git-branch-deleter-cli というCLIツールを作ってみました。
使い方
git-branch-deleter
コマンドを実行するとローカルのブランチ一覧が表示されます。十字キーの上下で移動して、削除したいブランチをスペースキーで選択します。
$ git-branch-deleter
? Select branches to delete): (Press <space> to select, <a> to toggle all, <i> to invert selection, and <enter> to proceed)
❯◯ bar
◯ foo
◯ fuga
◯ hoge
エンターキーを押すと削除確認が聞かれます。再度エンタキーを押すと...
✔ Select branches to delete): bar, foo, fuga, hoge
? Do you want to delete these branches?
bar
foo
fuga
hoge (Use arrow keys)
❯ Yes
No
一括で削除されるぅ〜、気持ちいぃ〜!
Deleted branch: bar
Deleted branch: foo
Deleted branch: fuga
Deleted branch: hoge
とこれだけのツールなのですが個人的にはとても便利です。
利用したライブラリ
Inquirer.js
Inquirer.js は、Node.js アプリケーションで対話型のコマンドラインインターフェース(CLI)を作成するためのライブラリです。ユーザーからの入力や選択を簡単に扱うことができ、対話的な CLI を簡単に作ることができます。
今回の実装では削除したいブランチを複数選択するために Checkbox, 削除前のはい/いいえ確認用に Select を利用しました。
以下の記事にとても詳しくまとまっているのでご参考ください。
対話型CLIライブラリのInquirer.jsを試してみた - コドモン Product Team Blog
Simple Git
Simple Git は、Node.js アプリケーションで Git コマンドを簡単に実行できるようにするためのライブラリです。
今回の実装では手元のブランチ一覧の取得とブランチの削除時に利用しました。
npm link で簡易的にCLI化
npm link
は、ローカル開発中の npm パッケージのテストや別プロジェクトで簡単に利用できるようにする便利なコマンドです。リンクを設定するだけで、リアルタイムに変更を反映することができます。
今回はこれを利用してCLIとして利用することにしました。あくまで個人用のツールとして利用する分には十分です。
まとめ
Inquirer.js を利用することで自分がイメージした通りにGitブランチ一覧の表示と複数選択を実現することができました。
ちょっとしたことですが、ブランチの削除確認を挟むことができたのも良かったです。
TypeScript を利用してCLIを実装するのは初めてでしたが、npm link を利用することで簡単に個人用のCLIツールを作ることができると知れたのは発見でした。
また何か良いアイデアが浮かんだら自分用のツールを作ってみたいと思います。