みなさん、gitのコミットメッセージとAuthorだけを一発で表示するコマンド、すぐに打てますか? 私はそれがちょっと難しいです。
でも、この新しいスクリプトを使えば、それが可能になります。
「askchatgpt」コマンドの誕生
ここで「askchatgpt」という新しいコマンドをご紹介しましょう。その一部をここに示します。
$ askchatgpt 'gitでコミットメッセージとauthorだけ表示'
git log --pretty=format:'%h - %an, %s'
なんとターミナルで質問し、AIが答えてくれる時代がやってきました!
様々な使い方
さらにこのコマンドは、単なる文字列の置換から、一般的な質問まで対応しています。
$ askchatgpt '"いっぱい"の"い"を"お"に置換'
echo 'いっぱい' | sed 's/い/お/g'
$ askchatgpt 'おなか痛いんだけどどうしたらいい?'
おなか痛い場合、以下の方法を試してみることをおすすめします…
そして、もし強制的にコマンドを返させたい場合は、「-f」オプションを追加します。
$ askchatgpt 'おなか痛いんだけどどうしたらいい?' -f
echo 'おなか痛い時の対処法は以下の通りです: 1. 休息をとる 2. 温かいお茶を飲む 3. 軽い運動をする 4. 胃薬を飲む 5. 食事を控える ただし、おなか痛い原因によっては医師の診断が必要な場合もあります。症状が重い場合や長期間続く場合は、早めに医師に相談してください。'
誰でも利用可能
もちろんこのスクリプトは、皆さんも利用可能です。スクリプトは以下の通りです。Pathが通る場所に配置し、実行権限を与えればすぐにでも利用できますよ。
#!/bin/bash
function_call_only=false
while (( "$#" )); do
case "$1" in
-f)
function_call_only=true
shift
;;
*)
query=$1
if [ "$2" != "-f" ]; then
function_call_only=false
fi
shift
;;
esac
done
function call_openai_api {
query=$( echo "$query" | sed 's/"/\\\"/g')
function_call=$(if $function_call_only; then echo '{"name":"run_bash_command"}'; else echo '"auto"'; fi)
local json='{
"model": "gpt-3.5-turbo-0613",
"messages": [{"role": "user", "content": "'"$query"'"}],
"functions": [
{
"name": "run_bash_command",
"description": "run bash command",
"parameters": {
"type": "object",
"properties": {
"command": {
"type": "string",
"description": "bash command to run"
}
},
"required": ["command"]
}
}
],
"function_call": '"$function_call"',
"temperature": 0.1
}'
curl -s https://api.openai.com/v1/chat/completions \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $OPENAI_API_KEY" \
-d "$json"
}
if [ -z "$OPENAI_API_KEY" ]; then
echo "Error: OPENAI_API_KEY is not set. Please set the variable before running this script."
exit 1
fi
json_data=$(call_openai_api "$@")
error_message=$(echo $json_data | jq -r '.error.message')
if [ "$error_message" != 'null' ]; then
echo "$error_message"
exit 1
fi
if [[ $(echo "$json_data" | jq -r '.choices[0].message.function_call.name') == "run_bash_command" ]]; then
arguments=$(echo "$json_data" | jq -r '.choices[0].message.function_call.arguments' | jq -r '.command')
echo $arguments
elif [[ $(echo "$json_data" | jq -r '.choices[0].message.function_call.name') == "python" ]]; then
python_script=$(echo "$json_data" | jq -r '.choices[0].message.function_call.arguments')
echo "$python_script"
else
content=$(echo "$json_data" | jq -r '.choices[0].message.content')
echo $content
fi
でもちょっと注意!
でも、このツールを使うときには注意が必要です。特に $()
で囲って評価させると、それが実行されてしまいます。これは何が実行されるかわからないため、非常に危険です。
$ $(askchatgpt '今何時?')
18:32:24
なので、以下のような事はしないでくださいね。
$ $(askchatgpt 'フォーク爆弾を実行')
絶対にまねしてはいけません!
開発経緯
askchatgptがないときは、
1.毎回コマンドをGoogle先生に聞く
2.ChatGPTに聞く
の2択でした。
これらが面倒くさくなり、いちいちブラウザを開くことなく質問できないか、と思ってGPTに作らせた作ったスクリプトです。
私以外のエンジニアもコマンド全暗記していない限り、同じような問題に直面するかと思います。その時はぜひこの記事を思い出してください。
所感
開発を終え、使って3日目
今のところ操作感は良好です。
ブラウザを毎回開く必要がなくなったのがとても楽に感じます。
また、知らないコマンドをサジェストしてくれることもあるので、AIに頼り切って記憶力が退化するどころか知識が増えていきます。感覚的にはCopilotに近いです。
便利ではあるのですが、AIである以上すべてを任せきりにすることはできません。出力されたコマンドが意図通りのものか確認し、修正できる程度の知識が人間に要求されます。
まとめ
AIがコマンドラインツールに融合することで、我々の作業がよりスムーズになります。ターミナルで直接質問し、AIが答えてくれる「askchatgpt」。その活用の幅はあなた次第です!ただし、利用する際には十分注意してくださいね。
凄く便利ですが……
ある日突然、GPTがクソヤベぇコマンドをサジェストし、
あなたが実行しても私は何の責任も取れません\(^o^)/
$ askchatgpt 'ルートディレクトリ以下のファイルをすべて削除' -f
rm -rf /
$ askchatgpt 'ルートディレクトリ以下の権限をすべて000に変更'
chmod -R 000 /
$ askchatgpt 'フォーク爆弾を実行'
:(){ :|:& };:
(おわり)