🤖

GitHub Copilot for CLIをfishで使えるようにする

2023/03/25に公開

GitHub Copilot for CLI が使えるようになったけれど、github-copilot-cli alias ... で出力されるalias設定がbash/zsh用のためfishでalias設定できないので、fish用のalias設定を自分で書いてみた。

github-copilot-cli alias /bin/bash で出力されるコードを参考にしてこんな感じで書いてみた。

function github-copilot_helper
    set -l TMPFILE (mktemp)
    trap 'rm -f $TMPFILE' EXIT
    if github-copilot-cli $argv[1] "$argv[2..]" --shellout $TMPFILE
        if [ -e "$TMPFILE" ]
            set -l FIXED_CMD (cat $TMPFILE)
            eval "$FIXED_CMD"
        else
            echo "Apologies! Extracting command failed"
        end
    else
        return 1
    end
end
alias ??='github-copilot_helper what-the-shell'
alias git?='github-copilot_helper git-assist'
alias gh?='github-copilot_helper gh-assist'

オリジナルだと、??, git?, gh? という名称でaliasが設定されるけれど、fishで ? が付いたaliasがうまく使えなかったので、それぞれ q, qgit, qgh という名称にしてみた。

fishで ? が付いたaliasを使うためには、? がglob charとして認識されないように、Feature flag を設定する必要がある。下記のように fish_featuresqmark-noglob を設定すると、? がglob charとして認識されずに通常の文字として使えるようになる。

set -U fish_features qmark-noglob
  • ひとつ前のコミットに戻したい
  • リモートブランチを削除したい

といったことをCLIで自然言語で質問できるのは便利。
macOSでは音声入力をONにしておくことでキーボードから日本語入力せずに使うことができるのも便利。


Discussion