👏

GitHub Copilot CLI使ってみた!

2023/03/23に公開
2

本題

招待されたので早速使っていきます。
執筆している時点ではwaitlistに登録する必要があります。

https://githubnext.com/

CopilotCLIは何ができるの?
シェルコマンドを自然言語で説明すると、GitHub Copilotがコマンドを生成します。

Usage: Copilot CLI [options] [command]

A CLI experience for letting GitHub Copilot help you on the command line.

Options:
  -V, --version                        output the version number
  -h, --help                           display help for command

Commands:
  auth                                 Retrieve and store a GitHub Access
                                       Token.
  alias <shell path>                   Add convenient GitHub Copilot CLI
                                       aliases to your shell.
  what-the-shell [options] <query...>  Use GitHub Copilot to get shell commands
                                       from natural language descriptions.
  git-assist [options] <query...>      Translate a natural language description
                                       of a git command to an actual git
                                       command.
  gh-assist [options] <query...>       Convert plain english to GitHub CLI
                                       commands.
  help [command]                       display help for command

使用方法 Copilot CLI [オプション] [コマンド]。

GitHub Copilotにコマンドラインで助けてもらうためのCLI体験です。

オプションです:
  -V, --version バージョン番号を出力する
  -h, --help コマンドのヘルプを表示します。

コマンドを紹介します:
  auth GitHub Accessを取得・保存する。
                                       トークンを使用します。
  alias <シェルパス> 便利なGitHub Copilot CLIを追加する。
                                       のエイリアスをシェルに追加します。
  what-the-shell [options] <query...> GitHub Copilotを使用してシェルコマンドを取得する。
                                       を自然言語の記述から翻訳する。
  git-assist [options] <query...> 自然言語による記述を翻訳する。
                                       gitコマンドを実際のgitの
                                       コマンドを使用します。
  gh-assist [options] <query...> 平文からGitHub CLIに変換する。
                                       コマンドを表示します。
  help [command] コマンドのヘルプを表示する

みなさんいな突然ですが、RailsでPostモデルを作ってくださいと言われたら作れますか?
(細かいコラムなどは考えない)

えーっと確かrails g m〜。

普段Railsを使わないとわかりません。
いちいちGoogleで調べるのもめんどくさいです。
そんな時はCopilotに聞きましょう。

╰─>$ github-copilot-cli what-the-shell Postモデルを作るには\?

 ──────────────────── Command ────────────────────

rails g model Post title:string body:text

 ────────────────── Explanation ──────────────────

○ rails is the Ruby on Rails command line tool.
  ◆ g is an alias for generate.
    ◇ model Post title:string body:text generates a new model called Post with
the attributes title and body.

  ✅ Run this command
  📝 Revise query
❯ ❌ Cance

今のは簡単すぎたのでもう少し難しいタスクを与えてみます。

╰─>$ github-copilot-cli what-the-shell 拡張子が.jsのファイルを検索して、ただしnode_modulesは除外

 ──────────────────── Command ────────────────────

find . -name "*.js" | grep -v node_modules

 ────────────────── Explanation ──────────────────

○ find is used to list files.
  ◆ . specifies that we search in the current directory.
  ◆ -name "*.js" stipulates that we search for files ending in .js.
○ | grep means we pass that list of files to grep which filters the list.
  ◆ -v node_modules means we exclude all files containing node_modules in its
path.

❯ ✅ Run this command
  📝 Revise query
  ❌ Cancel

やっぱ .ts のファイルを検索したいですね。
Revise queryを選択して修正してみます。

.tsも検索できるようにして

 ──────────────────── Command ────────────────────

find . -name "*.js" -o -name "*.ts" | grep -v node_modules

 ────────────────── Explanation ──────────────────

○ find is used to list files.
  ◆ . specifies that we search in the current directory.
  ◆ -name "*.js" stipulates that we search for files ending in .js.
  ◆ -o specifies that we want to search for files matching either of the two
patterns.
  ◆ -name "*.ts" stipulates that we search for files ending in .ts.
○ | grep means we pass that list of files to grep which filters the list.
  ◆ -v node_modules means we exclude all files containing node_modules in its
path.

❯ ✅ Run this command
  📝 Revise query
  ❌ Cancel

うまくいきました!

上手くいかなかった事

ffmpegを使って動画を変換するコマンドは教えてくれましたが、フォルダ内の動画をすべて変換するコマンドは失敗しました。
多分私がfish shellを使っているからです。

コメントにてご指摘いただきました。
Atsunori Saitoさんありがとうございます。

日本語のプロンプトでは失敗してしまいましたが、英語のプロンプトでは成功しました。

 ──────────────────── Command ────────────────────

for file in *.mov; ffmpeg -i $file -c:v libx264 -crf 23 -c:a aac -b:a 192k
-movflags +faststart $file.mp4; end

 ────────────────── Explanation ──────────────────

○ The for loop iterates over a list of items and executes its body for each,
using the loop variable $file.
  ◆ The list of items is *.mov which means all files ending in .mov in the
current directory.
○ The loop body executes one command for each file:
  ◆ ffmpeg -i $file -c:v libx264 -crf 23 -c:a aac -b:a 192k -movflags +faststart
 $file.mp4 converts the current file to mp4.
    ◇ -i $file specifies the input file.
    ◇ -c:v libx264 specifies that we want to use the libx264 codec for video.
    ◇ -crf 23 specifies the quality of the video, where lower is better.
    ◇ -c:a aac specifies that we want to use the aac codec for audio.
    ◇ -b:a 192k specifies the bitrate of the audio.
    ◇ -movflags +faststart specifies that we want to optimize the file for
streaming.
    ◇ $file.mp4 specifies the output file.

  ✅ Run this command
  📝 Revise query
❯ ❌ Cancel⏎

動作確認したところ、問題なく動作しました。
やはり英語は正義。

まとめ

まだプレビュー版なので、まだまだ改善されていくと思います。
今後も使っていきたいと思います。
PCを破壊するコマンドを吐く可能性も0%ではないのでしっかりと内容を理解した上で実行しまょう。
もし内容がわからない場合はGPTとかに尋ねましょう。

GitHubで編集を提案

Discussion