Amazon Q CLIで短い自然言語からリソースIDをシェルの変数に保存してみた - GuardDuty Detector ID編

Amazon Q CLIで短い自然言語からリソースIDをシェルの変数に保存してみた - GuardDuty Detector ID編

Amazon Q CLIを使ってちょっとしたスクリプトを爆速で書くためのプロンプトを考えてみました。CloudShellを立ち上げてパッと作業ができます。
Clock Icon2024.10.22

こんにちは、臼田です。

みなさん、AWS CLI駆使してますか?(挨拶

先日面白い機能がCloudShellにやってきました。Amazon Q CLIで楽しいことができるようです。

https://dev.classmethod.jp/articles/aws-cloudshell-supports-amazon-q-cli/

この中でq translateを利用するとプロンプトに合わせてコマンドを生成してくれるようです。

screenshot 2024-10-22 1.01.27

見ただけでめっちゃ良きじゃないですか?

機能自体は以前からあるようですが、私はあまり使ったことがなかったです。

これを見た瞬間私は思いました。

「GuardDutyのDetector IDを取得するCLIとかいつもめんどくさいからAIに任せたい」と。

ちょっとした作業とかスクリプトを書きたい時、大体勘でなんとかしますが、結局少し調べることになるのは往々にしてあることだと思います。それが自然言語で解決するならサイコーでは?

ついでにいい感じに変数に突っ込んでくれるとネ申では?

というわけで試してみました。

やってみた

まず、CloudShellを開いたら適当に打ってみます。

#から始めるとプロンプトとして動いてくれるらしいので、# get guardduty detector idと打ってみます。

$ q translate 'get guardduty detector id'

  Shell · aws guardduty list-detectors --query "DetectorIds[*]" --output text

screenshot 2024-10-22 1.09.59

文頭の#q translateに自動で置き換わります。

意図した通り、aws guardduty list-detectorsでDetector IDを取得するコマンドを生成してくれています。最初からクエリして該当の文字列のみ出力してくれるという気が効いたコマンドですね。実行してみましょう。Execute commandにカーソルがあるのでそのままエンターします。

$ aws guardduty list-detectors --query "DetectorIds[*]" --output text
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

正常な動作が確認できました。

次にこれを変数に保存したいのでget guardduty detector id and save to varと打ってみます。ちなみに英語にもあまり自信がありません。

$ q translate 'get guardduty detector id and save to var'

  Shell · guardduty_detector_id=`aws guardduty list-detectors --query 'DetectorIds[*]' --output text`

良い感じですね。実行して念の為出力して確認します。

$ echo $guardduty_detector_id
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

ヨシ!

これが簡単に作れるのは良いですね。

より良く短い指示を模索する

目的は果たせたのですが、いざという時にもっと短く快適に取得したいです。どんな指示が良さそうか、Claude 3.5 Sonnetに聞いてみました。回答は以下の通り。

はい、さらに簡略化することができます。以下にいくつかの案を示します:

"guardduty id to var"

最も簡潔な形で、動詞を省略しています。
"get guardduty id > var"

プログラミングの記号 ">" を使用して「変数に保存」を表現しています。
"guardduty detector > var"

"id" を省略し、"detector" だけで意図を伝えています。
"save guardduty id"

"var" を省略し、保存することだけを明示しています。
"fetch guardduty > var"

"get" の代わりに "fetch" を使い、"id" を省略しています。
これらの簡略化された指示は、システムの設計や学習データによっては元の指示よりも効果的に機能する可能性があります。ただし、過度の簡略化はシステムの理解を妨げる可能性もあるため、使用するシステムの特性に応じて適切なレベルの簡略化を選択することが重要です。

いろんな候補がありますね。いくつか試していってみます。

まず# guardduty id to var

$ q translate 'guardduty id to var'

  Shell · id=`aws guardduty list-detectors --query "DetectorIds[*]" --output text`

良いですね。次に# get guardduty id > var

$ q translate 'get guardduty id > var'

  Shell · gdid=`aws guardduty list-detectors --query "DetectorIds[]" --output text`

これも良いです。次は# save guardduty id

$ q translate 'save guardduty id'

  Shell · aws guardduty list-detectors --query "DetectorIds[*]" --output text > guardduty.txt

こちらはsaveの意図がファイル保存と解釈されていまいましたね。違う指示のほうが良さそうです。

上2つの案が良さそうですね。変数名にブレがある(GuardDutyのDetector IDはかなり省略方法にブレがあるためと考えられる)ので、これを固定するなら# guardduty id to var gidとすると行けそうでした。(私はgid派)

$ q translate 'guardduty id to var gid'

  Shell · gid=`aws guardduty list-detectors --query "DetectorIds[*]" --output text`

これで捗りそうですね。

まとめ

Amazon Q CLIを使ってちょっとしたスクリプトを爆速で使っていくために、短いプロンプトの指示でIDを変数に保存させてみました。

こういうアイデアがすぐに試せるのが生成AIのメリットですよね。ガンガン活用しましょう!

おまけ

プロンプトは日本語でも行けるらしいので以下のようにもできます。

screenshot 2024-10-22 1.31.35

残念ながら英語よりも格段に入力が必要なのであんまり使わないかもしれませんが、複雑な指示とか英語が思い浮かばないときは日本語もいけるということは覚えておくといいかもですね。

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.