はじめに
ChatGPT APIが出たので早速さわってみました。せっかくなので何か便利なものをということで自分向けに使えそうなツールをつくっていたら
良いかんじに動作したのでご紹介します。
つくったものは、「ChatGPTを用いた自然言語によるシェルコマンドランチャー」です。百聞は一見にしかずと言うことでまずは動作するところをみてください。
概要
wanna
コマンドは、ChatGPTを用いた自然言語によるシェルコマンドランチャーです。自然言語によって、bash script
を生成し、名付けし、管理できます。
コマンドライン上での操作は簡単に多くのことを行うことができるため、非常に便利です。しかし、多くのコマンドやオプションの組み合わせを覚えておくのは熟練したプログラマでもむずかしく、Google検索やman
コマンドなどを駆使して思い出しながら実行することも多くあるでしょう。
たとえば、「このディレクトリの配下にあるすべての.pyファイルを再帰的に発見して、それらの行数の合計を出力する」 といったタスクを行おうとするとき、find
やxargs
、 wc
などのコマンドをどのように組み合わせたら良いのかを一発で思い出すのは中々難しいです。
wanna think
このようなときにwanna think
コマンドを使います。
$ wanna think このディレクトリの配下にあるすべての.pyファイルを再帰的に発見して、それらの行数の合計を出力する
と打てば、AIアシスタントが自動的に次のようなbash scriptを生成します。
#!/usr/bin/env bash
find . -name "*.py" | xargs wc -l | awk '{total += $1} END{print total}'
あなたはただ、それをみて、実行するかしないかを決めれば良いだけです。
? What's next? (Use arrow keys)
» Do
Save
Another Question
Exit
あなたの依頼に対して、AIはスクリプトを生成し、その解説をします。
Do
を選べば、提案されたスクリプトを実際に実行してその結果を表示します。
実行後に問題なく動作することを確認したら、保存をすることができます。
? I thought of the following names. Which one do you like? (Use arrow keys)
» count_py_lines
py_line_counter
recursive_py_counter
py_line_sum
そういえば、「コンピュータサイエンスで最も難しいことは"命名"である」とフィルカールトンも言っていました。
このAIは、生成したスクリプトに丁度良い名前も提案してくれます。あなたは、コードレビューアとして良さそうな名前を選ぶだけです。
wanna do
wanna do
コマンドを使えば、過去に保存したコマンドを実行することができます。
ただ単にwanna do
と入力すればインクリメンタルに保存済のコマンドを選び、実行できます。
$ wanna do
$ wanna do random_passwords
のようにコマンド名を直接打って実行することもできます。
wanna list
記録済のスクリプトをリストアップします。
$ wanna list
count_py_lines :このディレクトリの配下にあるすべての.pyファイルを再帰的に発見して、それらの行数の合計を出力する
top_memory_usage :メモリ使用量の多いプロセスを上位10個出力する
random_passwords :ランダムに10個のパスワードを生成する
これを用いると、たとえば、こんなことができます。
$ wanna list | peco | xargs wanna do
インストール
インストールは、pipを用いて簡単にできます。python3.10以上の環境で動作します。
pip install wanna
また、OEPNAI_API_KEYを使うため、ご自身のアカウントでtokenを取得してください。
export OPENAI_API_KEY="sk-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
雑感
さわってみて思ったのは、text-davinci-003
よりも素直でプロンプトがストレートに記述できるのと、コードの中にthink_xxxx
のような関数を定義しているときに、思考可能な何かをプログラムに組み込んでいる実感がわいてわくわくしました。
あわせてこちらもご一読ください。
本記事に関するイベントについて
登壇します。是非ご参加ください!