ChatGPT を使うと Linux 系シェルのコマンドを PowerShell のコマンドに変換するのがとても楽でしたので紹介します。
タイトルは ChatGPT にフォーカスしていますが、元ネタの記事自体がすごく有益なので、ぜひ元ネタの記事を読んでいただければと思います。
やりたかったこと
# がついたブランチ名にシェル上で素早く git checkout したい。( git switch 使えよという話は今回は無しでお願いします)
私が現在やっているプロジェクトではブランチ名の先頭に #チケット番号 のように Redmine のチケット番号を # 始まりで記載する必要があります。
これが結構曲者でして、 # 始まりだと PowerShell 上ではコメント扱いとなります。なので git checkout '#11111_hoge' のように ' や " などでブランチ名を囲ってあげる必要があります。
' や " などでブランチ名を囲って書こうとすると、今度は Tab キーによるブランチ名の補完が効きません。英単語ならまだしも、チケット番号のように意味のない数字の羅列の手打ちはキツイです。
なので私はマウスでコピペしていました。でもマウスを使っても作業効率は納得いくレベルにはなりませんでした。そもそもマウス無しで操作したくてシェルを使っているので、本末転倒です。
解決方法
こちらの Qiita の記事を参考にさせてもらいました。
fzf というファジーファインダを使いインタラクティブにブランチを切り替えるという手法です。素晴らしいですね!
# 始まりのブランチを fzf 経由にした場合、 '' で囲まなくて良くなるかどうかは謎ですが試してみる価値はありそうです。
さて、記事内で紹介されているコマンドは bash などの Linux 系シェルのコマンドになっています。私の今の開発環境は Windows で、 PowerShell を使っています。そして、 PowerShell のコマンドはほとんど知りません…。 xargs の代わりのコマンドを調べるのも面倒くさいです。
ここでやっと ChatGPT に登場してもらいます。
記事で紹介されていたコマンドをぶっこんで、変換してもらいます。
そして、コマンドをコピペして PowerShell 上で動作させてみたところ意図通りの動作をしていました!もっと効率の良いやり方があるかもしれませんが、とりあえず動けばいいってときはこれで十分です。
あとは自分の好みに fzf の出力をいじって $PROFILE にでもコマンド登録してあげれば完成です。
# git checkout を fzf を使って行うためのコマンド
function gio($cmdname) {
git branch | Out-String -Stream | fzf --height 10% --layout=reverse --info=inline | ForEach-Object { $_.Trim() } | ForEach-Object { git checkout $_ }
}
gio というコマンドで実行できるようにしました。(O は checkOut の Out の部分から取りました。センス無いですがタイプしやすさ重視でこうしました。)これで # はじまりのブランチ名も怖くありません。
ChatGPT ありがとう!

