🚀

GPTをCLIから呼び出して作業を自動化する - GPT-CLIの紹介

2023/08/15に公開

GPTをCLIから呼び出して開発を楽にする gpt-cli というツールを公開したので紹介します。

https://github.com/nullnull/gpt-cli

気に入ったらStarお願いします〜!

使い方

OpenAIのChat CompletionsへのAPIリクエストを実行できます。

$ npm install -g @nullnull/gpt-cli
$ ai こんにちは
こんにちは!何かお手伝いできることがありますか?

これだけだとN番煎じなのですが、標準入力やファイル読み込みを行う機能があります。
意外と他の既存ツールにはない機能です。

$ echo "こんにちは" | ai "英語に翻訳して"
Hello
$ ai --file foo.ts --write "console.log()を全て削除して"
# foo.tsが書き換わる

これを工夫して使うと、劇的に便利なツールとなります。
次で、便利なユースケースとしてi18n対応の紹介をしましょう。

ユースケース - i18n対応

日本語で作ってきたWebサービスをi18n対応するために、今までサービス中にベタ書きしてきた日本語を t() のような関数で括る作業を考えます。
日本語テキストはJSXの中に現れたり、プロパティとしてリテラルで現れたりします。コメントの中にも現れたりします。

知りうる限りはこれを一括でいい感じにやる方法はないのですが、なんと gpt-cli を使うと一発で完了します。

ai --file UsersTable.tsx -w "Reactのサービスをi18n対応しようと考えています。
ソースコード中の日本語文をt()という関数でくくってください。
また、tという関数がまだimportされていなかったら、
import { t } from 'i18next'
という形でimportも定義してください"
+ import { t } from 'i18next';
+
function FooComponent() {
-	return <FooItem label="ラベル">
-    こんにちは
+	return <FooItem label={t('ラベル')}>
+    {t('こんにちは')}
	</FooItem>;
}

※大きいファイルをGPT-4で扱うと、かなりトークンを消費するのでお気をつけて!

これを特定のディレクトリ以下のファイル全てに実行したい時はどうすればいいでしょうか?
それもgpt-cli君に聞いてみましょう。 ai command を使うと、コマンドを生成することもできます。

$ ai command "以下のコマンドを、srcフォルダ以下の全ての *.tsxファイルに
適用するコマンドを教えてください。
また、進行状況を知りたいので、コマンドを実行するたびに、
実行したファイル名を表示するようにしてください。

コマンド:
ai --file UsersTable.tsx -w \"Reactのサービスをi18n対応しようと考えています。
ソースコード中の日本語文をt()という関数でくくってください。
また、tという関数がまだimportされていなかったら、
import { t } from 'i18next'という形でimportも定義してください\""

# -----Command-----
# find src -name "*.tsx" -exec echo {} \; -exec ai --file {} -w "Reactのサービスをi18n対応しようと考えています。ソースコード中の日本語文をt()という関数でくくってください。
# また、tという関数がまだimportされていなかったら、import { t } from 'i18next'という形でimportも定義してください" \;

# ----Explanation----
# 上記のコマンドはfindコマンドを用いて、"src" ディレクトリから全ての".tsx"ファイルを探し、それぞれを対象にaiコマンドを実行します。
# エコーコマンドをエグゼクトオプションの前に用いることで、対象ファイル名を表示します。

# また, "-exec"は、検索結果の各ファイルに対して指定したコマンドを実行します。
# "{}"はfindコマンド由来の特殊なプレースホルダで、現在処理しているファイルパスを表しています。
# "\";\""は-execオプションの終わりを示すために必要なシンタックスです。

# ? 🤖 Would you like to execute this command? (Use arrow keys)
# ❯ ✅ Run this command
#   🔁 Input further instructions
#   📋 Copy
#   ❌ Cancel

いい感じに生成されました!

詳しい使い方

READMEをご覧ください。
ai command と似たようなことはCopilot for CLIでもできるので、waitlistに通った方はむしろそっちを使った方が良いと思いますが、
ai config より言語を日本語にできるので、その点では便利かなと思っています。

※裏側のプロンプトをそんなに頑張っていないので、もろもろバグったりしたらごめんなさい

おわりに

ここで紹介したような処理は、Copilot LabsCopilot for CLIでも可能ですが、自分でこれらのサービスを触ってみた感じ現状だとかなり精度が低いように思ったので、自分でGPT-4を触れる環境を作ってみました。
多分、CopilotはまだGpt-3.5ベースなのかな…?

コマンドラインからGPTが呼べること、また標準入出力が使えることなどで一気に夢が広がった感覚があります。
また 「コマンドを組み合わせると色んなことができる」のようなUNIX哲学はやはり偉大 だなあと思いました。

こういったツールを使いこなして、生産性を100倍にしていきましょう!FBお待ちしています!

Discussion