ターミナルがダサいとモテない。gh copilot suggestをスマートに使う。

ターミナルがダサいとモテない。gh copilot suggestをスマートに使う。

gh copilot suggest使ってわからないコマンドはcopilotに聞こう!

ターミナルがダサいとモテない。gh copilot suggestをスマートに使う

Photo by Roman Synkevych on Unsplash

巷ではVibe Codingってキーワードが流行ってますね。CursorwindsurfClineなどなど

弊社でもDevinCursorを使い始めました。
社内ではPyCharmが主流なので、今のところgithub copilotとのコンビネーションが多いのかな?

github copilot便利みたいですね。
自分はNeoVimだからまだ活用してるぜ!ってテンションで言えないです😅

NeoVimのgithub copilotに関わるものはいくつかありますが、自分は今のところgithub/copilot.vimを暫定的に使っています。
実は便利だなというほど使えてないというか、自分はSuggestを無視してることが多い気がします😅

GitHub - github/copilot.vim: Neovim plugin for GitHub Copilot

NeoVimにはVibe Coding系はいくつかありますが、

GitHub - joshuavial/aider.nvim

GitHub - yetone/avante.nvim: Use your Neovim like using Cursor AI IDE!

GitHub - olimorris/codecompanion.nvim: ✨ AI-powered coding, seamlessly in Neovim

これらは一通り一度Installして使ってみたんですが、思いっきり使いこなせているかと言うとまだ使いこなせてません。
個人的にchatgptもclaudeもgeminiも課金して使える環境がありますが・・・正直コストの話も大きいかも・・・😅

copilot系もいくつかあります。

GitHub - zbirenbaum/copilot.lua: Fully featured & enhanced replacement for copilot.vim complete…

GitHub - zbirenbaum/copilot-cmp: Lua plugin to turn github copilot into a cmp source

今日はVibe Codingにあやかって、Terminalでもcopilotを便利に使おうというのが主題になっています。

AI Terminal

まず最初にAIでTerminalという観点でwarp terminalを紹介しておきます。

Warp: The intelligent terminal

有償ですがLLMとやり取りしながらできるっぽいです。

自分もmacにwarp入れてますが、ちゃんと使ってないので詳しくないです。自分はWezTerm使ってます。

だんだんこういう世界も始まってるんだなぁと・・・

Vive Codingなんておしゃれな名前ついてるから、Terminalでの作業も名前付けたい😂

  • Vive Terminal(う、う〜〜ん🤔)

  • Vive Shell(普通過ぎるけどこれかなぁ)

  • Vive Ops(これか?!!!だがしかし・・・わかりにくいかもなぁ🤔)

  • Vive ShellOps(う、う〜〜〜〜〜んくどいかなぁ🤔)

誰か決めてください🤣

AIつかってTerminalでもVibe Shellしようぜ!

一旦Vibe Shell(2024/04/24時点)で進めます🤣

Requirements

この3つです。

GitHub CLI

ここにInstall Documentがあります。

GitHub - cli/cli: GitHub’s official command line tool

さっと入れてしまいましょう!
自分の場合はmacOSなのでHomebrewでInstallしてます。

Plain text
brew install gh

GitHub CLI クイックスタート

GitHub CLI クイックスタート - GitHub Docs

クイックスタートを読んで開始できる準備を始めましょう。

GitHub Copilot for CLI

Install方法はここにあります。

CLIG での GitHub Copilot のインストール - GitHub Docs

これでInstallできます。

Plain text
gh extension install github/gh-copilot

Installされたかの確認は

Plain text
gh extension list
Plain text
NAME        REPO                       VERSION
gh copilot  github/gh-copilot          v1.1.0

こんな形で出力されると思います。

ghcs CLIでのGitHub Copilotの構成

ここにあります。

CLI での GitHub Copilot の構成 - GitHub Docs

Plain text

echo 'eval "$(gh copilot alias -- bash)"' >> ~/.bashrc

初めてgh copilotを起動するといろいろ確認されます。
分析用にLog送るかとかそんな内容です。
ここの設定は個人の判断に任せます。

CLI での GitHub Copilot の構成 - GitHub Docs

ここをみるとわかると思います。

gh copilot suggest

それでは実際にgh copilot suggestをしてみましょう。

macOSなので、まずはDocumentsの配下の一覧を出力するコマンドを聞いてみます。

Plain text
gh copilot suggest "Documents配下のファイルの一覧を出力したい"

gh copilot suggestの画面(1)

何について聞いてるのか聞かれるので、ここでは普通にコマンドなので”generic shell command”を選択します。

gh copilot suggestの画面(2)

そうすると、これどうするか聞かれますね
コピーするの?説明が欲しいの?みたいな感じですね
一旦説明してもらいます。

gh copilot suggestの画面(3)

こんな感じになります。

Copyします。

gh copilot suggestの画面(4)

するとshellのpromptが返ってくるので
おもむろにCmd+vすると

gh copilot suggestの画面(5)

コピペできました。

これが全体の流れです。

gum

ちょっとこのままではスムーズじゃないのとコマンドも長いので、ちょっと工夫してスマートにしてみましょう。

GitHub - charmbracelet/gum: A tool for glamorous shell scripts 🎀

gumはとても多機能でTerminalでの入力をいろいろな形で表現、制御してくれます。

セレクタ用意したり、YES/NOの選択を求めたり、ちょっとTUIとしてもおしゃれな感じにしてくれます。

ここではgumのinputを利用してgh copilot suggestへ渡す入力をTUIで制御していきます。

Install gum

普通にHomebrewもあります。
go installでもInstallできます。

Plain text
brew install gum
Plain text
go install github.com/charmbracelet/gum@latest

gum help

Installできたらhelpを確認しましょう。

prompt/placeholder/cursor/headerの4要素にそれぞれ内容のテキストと色設定があります。
色設定については環境変数でも設定できるようです。

Plain text
❯ gum input --help
Usage: gum input [flags]

Prompt for some input

Flags:
  -h, --help                               Show context-sensitive help.
  -v, --version                            Print the version number

      --placeholder="Type something..."    Placeholder value ($GUM_INPUT_PLACEHOLDER)
      --prompt="> "                        Prompt to display ($GUM_INPUT_PROMPT)
      --cursor.mode="blink"                Cursor mode ($GUM_INPUT_CURSOR_MODE)
      --value=""                           Initial value (can also be passed via stdin)
      --char-limit=400                     Maximum value length (0 for no limit)
      --width=0                            Input width (0 for terminal width) ($GUM_INPUT_WIDTH)
      --password                           Mask input characters
      --[no-]show-help                     Show help keybinds ($GUM_INPUT_SHOW_HELP)
      --header=""                          Header value ($GUM_INPUT_HEADER)
      --timeout=0s                         Timeout until input aborts ($GUM_INPUT_TIMEOUT)
      --[no-]strip-ansi                    Strip ANSI sequences when reading from STDIN ($GUM_INPUT_STRIP_ANSI)

Style Flags
  --prompt.foreground=""            Foreground Color ($GUM_INPUT_PROMPT_FOREGROUND)
  --prompt.background=""            Background Color ($GUM_INPUT_PROMPT_BACKGROUND)
  --placeholder.foreground="240"    Foreground Color ($GUM_INPUT_PLACEHOLDER_FOREGROUND)
  --placeholder.background=""       Background Color ($GUM_INPUT_PLACEHOLDER_BACKGROUND)
  --cursor.foreground="212"         Foreground Color ($GUM_INPUT_CURSOR_FOREGROUND)
  --cursor.background=""            Background Color ($GUM_INPUT_CURSOR_BACKGROUND)
  --header.foreground="240"         Foreground Color ($GUM_INPUT_HEADER_FOREGROUND)
  --header.background=""            Background Color ($GUM_INPUT_HEADER_BACKGROUND)

setup bash

Installも済んだので組み込んでいきます。

自分の場合はBashなので.bashrcにセットアップしていきます。
ここでは、先に紹介したghのSetupも含めて表記します。

Plain text
if command -v gh &> /dev/null; then
  eval "$(gh completion --shell $(basename ${SHELL}))"
  eval "$(gh copilot alias -- $(basename ${SHELL}))"

.bashrc

Plain text
if command -v gh &> /dev/null; then
  eval "$(gh completion --shell $(basename ${SHELL}))"
  eval "$(gh copilot alias -- $(basename ${SHELL}))"

  if command -v gum &> /dev/null; then
    function _gum_gh_copilot_suggest() {
      declare -x gum_gh_copilot_suggest_input=$(gum input --cursor.foreground="#80FFEA" --header="gh copilot suggest target shell" --header.foreground="#7766CC")
      gh copilot suggest --target shell "$gum_gh_copilot_suggest_input"
    }
    bind '"\C-g":"_gum_gh_copilot_suggest\n"'
  fi
fi

ちょっと書き方に癖がありますが・・・🤣
yadmでmacOSだけじゃなく、Linux環境なども手元にあり管理を統合しているので、Installの漏れなどが発生しても良いように、このような形にしてます😂

適度に色付けたりちょっとDracula Themeっぽくしたりしてます🧛

bashのshortcut keyとして”Control + g”にしました。

これでBash上で”Ctl + g”することでいつでもgumを呼び出し、入力をしgh copilot suggestに渡すことができます。

自分の場合は shell-out optionは利用せず、TargetだけShellに設定してます。

Execute

それでは実際に動かしましょう。

おもむろにCtl + g

日本語もできます

おもむろにCtl + gの画面

gh copilotのメニューが出るのでExplainして貰いましょう

gh copilotのメニューが出るのでExplainして貰いましょうの画面(1)

gh copilotのメニューが出るのでExplainして貰いましょうの画面(2)

Copy command to clipboardしましょう

macOSなのでCommand + vでclipboardからPasteできます。

Copy command to clipboardしましょうの画面

実際に出力されたのはこのコマンドです。

Plain text
ls -d ~/Documents/*/

ちょっぴり出力がかゆいけど目的は達成できると思います。

lazygitをdeltaをinstallしたい

もう少し複雑なことを聞いてみましょう。

lazygitとdeltaのインストール方法をCopilot Suggestに質問する画面

Copilot Suggestが生成したlazygitとdeltaのインストールコマンド

おおおおおおお

lazygitからdeltaがgit-deltaだってわかってらっしゃる🤣

感想

もう少し複雑なことを依頼してみるのが良い気がするけど、思いつかなかったのでここまでにします。

ちょっとすぐ思いつくレベルのことしかGitHub Copilotに聞けませんでしたが・・・
ほんとに困ったときに使えるかもしれないですね。
自分にはあまり必要なものじゃないかもしれない。

Vibe Shellしたい方はやってみてください。

注意点

こういったTerminalでのOperationでコマンドを聞きたくなる方は、Linuxのコマンドを苦手としていたり、コンピュータ的な経験値の観点で初心者な方が多いと思います。

CLIでのGitHub Copilot の責任ある使用について以下にあります。

CLI での GitHub Copilot の責任ある使用 - GitHub Docs

まず前提としてGitHub Copilotはとても優秀です。私自身もそう思います。

ただし、その出力されたものが正しいかの確認は自身でする必要があります。
Unix/Linuxのコマンドラインの世界では、環境に対して破壊的なものもたくさんあります。
例としてはファイルの削除などのコマンドは気をつけた方が良いです。
Unix/Linuxの一部のコマンドは発行する権限次第では、簡単にOSを破壊することできます。

またExplainも活用した方が良いと思います。
gh copilotが提供してくれるExplainだけではなく、実際に発行されるCommandのHelpもあわせて確認しましょう。

そしてセキュリティについての配慮も必要です。
この場合はどんなコマンドかを問いかけているだけなのでセキュリティ的に気をつけることはそれほど必要ないと考えていますが、利用に関して必要以上の情報を渡さないといったことも注意しましょう。

最後に付け加えるとすれば、AIの力を借りることは良いことだと思います。生産性、効率向上などの観点ではとても良い効果を発揮してくれます。
ですが2025年の現時点において、あらゆる面において信頼性の高いものでは残念ながらありませんし、少なくともコンピュータにおける何もかもを解決できるものではありません。
現時点ではAIを活用するには、それなりのベースとなる基礎知識やスキルも必要だと考えています。
もちろん近い将来、AIの発展で更に使いやすいものになっていくと思います。ただ現時点ではまだです。

なのでまだ経験値が足りない、知識が足りないと思う方々は自身のスキルアップや学習の補助として活用されることを念頭において触るのが良いと思います。

ターミナル環境について他の記事も書いているので、よろしければこちらもご覧ください!
『ターミナルがダサいとモテない』シリーズ一覧

転載:ターミナルがダサいとモテない。gh copilot suggestをスマートに使う。