jqの知識ゼロの自分がChatGPTにコマンド作成をお願いしてみた

知識ゼロの状態から30分後にはコマンド実行していました
2023.04.05

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

はじめに

データアナリティクス事業本部 BIチームのkariyaです。

CloudShellでQuickSightをCLI操作した際に実行結果が見にくいなと思っていたところ、jqを使うと出力結果を加工できると社内で教えて頂きました。
「でもjqの知識ゼロだな・・・」と思ったのでChatGPTに手伝ってもらいました。
なお、ChatGPT(無料プラン)での実行結果を記載しています。

やりたいこと

  • CloudShellを使用し、list-analysesでQuickSightの分析一覧を出力する
  • 出力結果を、更新日時の降順にする
  • jqを使用し、ARN、分析の名前、分析のID、更新日時だけを取得する

やってみる

まずはやりたいことをそのままお願いしてみます。

入力

Cloudshellで、下記を実現するコマンドを作成して下さい。
・QuickSightのAnalysisの一覧を出力
・jqでARN、Analysisの名前、AnalysisのId、更新日時に絞り込み
・更新日時を降順で並び替え

出力

aws quicksight list-analyses --aws-account-id <AWSアカウントID> --region <リージョン> --output json | jq '.AnalysisSummaryList | sort_by(.LastUpdatedTime) | reverse | .[] | {ARN: .Arn, Name: .Name, Id: .AnalysisId, LastUpdated: .LastUpdatedTime}'

このコマンドでは、以下のパラメータを使用しています。

aws-account-id: QuickSightのアカウントID
region: QuickSightのリージョン
list-analysesコマンドで取得した結果を、jqを使用して以下のように絞り込んでいます。

AnalysisSummaryList: Analysisの一覧を含むJSONオブジェクトのキー
sort_by(.LastUpdatedTime): LastUpdatedTimeを基準にソート
reverse: ソートを降順にする
.[]: Analysisの一覧を配列から個別のオブジェクトに変換
{ARN: .Arn, Name: .Name, Id: .AnalysisId, LastUpdated: .LastUpdatedTime}: 必要な情報だけを抽出してオブジェクトに変換
実行する前に、AWS CLIとjqがCloudShell上で利用できることを確認してください。また、適切なパラメータでコマンドを実行してください。

コマンドだけでなく、細かい説明まで出力してくれました!初心者の身には大変ありがたいです。
AWSアカウントIDとリージョンは自分の環境に読み替えて、さっそく実行してみます。

なお、AWSアカウントIDはlist-analyses実行時に必須ですが、リージョンは指定しなくても実行可能です。
list-analyses

「必要最低限の設定で実行したい」などの要望がある場合は、ChatGPTに細かく依頼するか、自分でコマンドを加工する必要がありそうです。

実行結果

{
  "ARN": "arn:aws:quicksight:ap-northeast-1:999999999999:analysis/6efcfc08-a748-4507-8ab3-102e2bebacb3",
  "Name": "People Overview analysis",
  "Id": "6efcfc08-a748-4507-8ab3-102e2bebacb3",
  "LastUpdated": "2023-04-05T04:10:11.958000+00:00"
}
{
  "ARN": "arn:aws:quicksight:ap-northeast-1:999999999999:analysis/a5e46751-72df-4154-bd68-8e7b35024118",
  "Name": "Sales Pipeline analysis",
  "Id": "a5e46751-72df-4154-bd68-8e7b35024118",
  "LastUpdated": "2023-04-05T04:10:11.941000+00:00"
}
{
  "ARN": "arn:aws:quicksight:ap-northeast-1:999999999999:analysis/a1bb7d46-7f10-4693-9c2d-2a4e135e815f",
  "Name": "Business Review analysis",
  "Id": "a1bb7d46-7f10-4693-9c2d-2a4e135e815f",
  "LastUpdated": "2023-04-05T04:10:11.940000+00:00"
}
{
  "ARN": "arn:aws:quicksight:ap-northeast-1:999999999999:analysis/0d8ad536-a516-4f20-9b4d-da1624461ebe",
  "Name": "Web and Social Media Analytics analysis",
  "Id": "0d8ad536-a516-4f20-9b4d-da1624461ebe",
  "LastUpdated": "2023-04-05T04:10:11.936000+00:00"
}
(以下しばらくログが続くため省略)

見たい項目は見れたのですが、結果が大量に出力され見づらい状態でした。
始めの数件だけに絞り込めないかを聞いてみます。

入力

ありがとうございます。結果が大量に出てきたため、Analysis3つ分の結果のみ出力するコマンドに変更してください。

出力

申し訳ありません、前回の回答に不備がありました。以下は、CloudShellでQuickSightのAnalysisの一覧を出力し、jqを使用してARN、Analysisの名前、AnalysisのId、更新日時に絞り込み、更新日時を降順で3つ分だけ表示するコマンドです。

aws quicksight list-analyses --aws-account-id <AWSアカウントID> --region <リージョン> --output json | jq '.AnalysisSummaryList | sort_by(.LastUpdatedTime) | reverse | .[:3] | .[] | {ARN: .Arn, Name: .Name, Id: .AnalysisId, LastUpdated: .LastUpdatedTime}'

前回と異なり、[:3]を追加しています。これにより、3つ分だけの結果を表示するようになります。

また、aws-account-idとregionについては、QuickSightのアカウントIDとリージョンに置き換えてコマンドを実行してください。

3件出力するコマンドを追加し、更に説明も付け加えてくれました。親切ですね。
こちらのコマンドも実行してみましょう。

実行結果

{
  "ARN": "arn:aws:quicksight:ap-northeast-1:999999999999:analysis/6efcfc08-a748-4507-8ab3-102e2bebacb3",
  "Name": "People Overview analysis",
  "Id": "6efcfc08-a748-4507-8ab3-102e2bebacb3",
  "LastUpdated": "2023-04-05T04:10:11.958000+00:00"
}
{
  "ARN": "arn:aws:quicksight:ap-northeast-1:999999999999:analysis/a5e46751-72df-4154-bd68-8e7b35024118",
  "Name": "Sales Pipeline analysis",
  "Id": "a5e46751-72df-4154-bd68-8e7b35024118",
  "LastUpdated": "2023-04-05T04:10:11.941000+00:00"
}
{
  "ARN": "arn:aws:quicksight:ap-northeast-1:999999999999:analysis/a1bb7d46-7f10-4693-9c2d-2a4e135e815f",
  "Name": "Business Review analysis",
  "Id": "a1bb7d46-7f10-4693-9c2d-2a4e135e815f",
  "LastUpdated": "2023-04-05T04:10:11.940000+00:00"
}

要望通り、3件分の結果を得ることができました!

おわりに

jqの知識ゼロの状態から、このコマンドを実行するまで30分ほどでした。 ChatGPTが無い状態では、jqの基礎的なWebサイト等を見て勉強してからコマンド作成に入るため、とても30分では終わらなかったと思います。

また、「CloudShellで実施したQuickSightのCLI実行結果をjqで加工する」など、検索してもなかなかヒットしないニッチな組み合わせの質問にぴったりな回答ができるのはChatGPTならではの強みだなと実感しました。
実行できないコマンドを出力することもあるため、出力結果を検証することは忘れずに今後も使っていきたいと思います。

最後までお読み頂きありがとうございました。