Amazon Qを使ってCLIの補完/自然言語でshellコマンド作成

## これは何?

Amazon Q DeveloperにCLIツールがあり，これを使うことでCLIでのコマンド入力を効率化できます。
本記事では，Amazon Q Developer CLIツールについて調べたことをまとめます。
以下は何ができるかのイメージです。

コマンドの補完
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3718390/df1a168d-6005-4dcf-9ef7-3672bda13a5f.png)

Inline: 入力途中のものから予測してくれる

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3718390/53bbe1ab-3e76-4b6e-9e47-8a889c1aa4fb.png)
(自分の環境だと灰色での補完候補が見えなかったので[公式の画像](https://docs.aws.amazon.com/ja_jp/amazonq/latest/qdeveloper-ug/command-line-inline.html)をお借りしました)

q chatでチャットを使う
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3718390/f05f444a-b55d-470d-b566-d3467026056b.png)

translateで自然言語からbashスクリプトを作成する

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3718390/bef47998-e1a8-4d2d-8796-1430c3d687bf.png)

---

## Amazon Q Developerを使い始める前にチェックしたこと

### 料金

[Amazon Q Developer公式](https://aws.amazon.com/q/developer/pricing/)によるとDeveloper Free Tierがあるので無料で試せます。
Proライセンスだとエンタープライズアクセスコントロールなど企業で使うなら欲しい機能がついてそうですが，自分はFree Tierを一旦使っています。

### 入力データを学習に使用させない設定

[Amazon Q Developerのサービス改善](https://docs.aws.amazon.com/ja_jp/amazonq/latest/qdeveloper-ug/service-improvement.html)に記載があります。

> Amazon Q Developer Pro または Amazon Q Business のコンテンツは、サービスの改善には使用されません。

とあるので有料ユーザは設定不要です。

> Amazon Q Developer 無料利用枠でサービス改善のためのコンテンツ使用からオプトアウトする方法は、Amazon Q を利用する環境によって異なります。

無料ユーザで気になる人は自分でオプトアウトの設定が必要です。
今回の環境であれば，インストール後に`q`コマンドで立ち上がる画面の設定からオフにできます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3718390/111c1178-d742-4a99-8724-5d82c4956d48.png)

---

## 環境構築

### インストール

[コマンドライン用のAmazon Qをインストールする](https://docs.aws.amazon.com/ja_jp/amazonq/latest/qdeveloper-ug/command-line-installing.html)に記載があるのでそのままやるだけです。

macOS，Linux(AppImage)，Ubuntuで使用可能です。

- 自分はUbuntuを使っているので以下を実行しました。

```shell
curl --proto '=https' --tlsv1.2 -sSf https://desktop-release.q.us-east-1.amazonaws.com/latest/amazon-q.deb -o amazon-q.deb
sudo apt install -y ./amazon-q.deb
q
```
(自分は再起動が求められたので再起動したら動いた)

`q`を実行するとAmazon Builder IDでのサインインが求められます。

:::note info
Amazobn Builder IDはAWSのアカウントとは別なので注意
:::

### 既にCLIでの補完機能を使っている場合干渉するかも

自分はoh-my-zshのカスタムプラグインである，[zsh-autocomplete](https://github.com/marlonrichert/zsh-autocomplete)を使用しているのですが，これが干渉してしまいAmazon Qによる補完がすぐに消えてしまう事象が発生しました。
２つ補完がでてもあれなので，zsh-autocompleteを一旦止めました。

---

## 各機能を試してみる!

### コマンド補完

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3718390/df1a168d-6005-4dcf-9ef7-3672bda13a5f.png)

デフォルトでは上下矢印キーで補完候補の切り替えが行えます。

:::note info
試しにネットワークをオフにしても動いたので出先でも使えて安心です。
:::

自分は使いづらかったのでtabキーにより補完候補を一つ下に進むように設定しました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3718390/e050dce8-c193-4438-ab08-2f71fbd7d824.png)

:::note info
shift tabで補完候補を一つ上にしたかったのですが，自分の環境だとうまく動きませんでした。
:::

また，インストールされているコマンドのオプションとは別に，現在入力中にコマンドから補完候補を推測してくれる機能もあるようです。(こっちはネットワークをオフにすると動かなくなった)
うhttps://docs.aws.amazon.com/ja_jp/amazonq/latest/qdeveloper-ug/command-line-inline.html
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3718390/b9d828c8-32da-4af3-8c6c-ecce9e59c5ed.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3718390/f8fc8613-1188-41a6-8be3-3fcc9cca55f8.png)


### Inline

現在ターミナルに入力しているコマンドから次の候補を推測して補完候補を出してくれます(2025年2月16日現在ではzshのみ)。

デフォルトでは入力中に→を入力することでコマンドの続きを書いてくれます(イメージ的にはGitHub Copilotの補完に近いかも)。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3718390/53bbe1ab-3e76-4b6e-9e47-8a889c1aa4fb.png)
(自分の環境だと灰色での補完候補が見えなかったので[公式の画像](https://docs.aws.amazon.com/ja_jp/amazonq/latest/qdeveloper-ug/command-line-inline.html)をお借りしました)

### Chat

`q chat`コマンドで起動するチャット機能です。
コンテキスト変数を使ったチャットができます。

> - @git: 現在のブランチ、ステージングされた変更とステージングされていない変更、コミット履歴など、git リポジトリのステータスに関する情報を渡すことができます。
> - @env: Amazon Q にローカルシェル環境変数を提供できます。これは、開発のセットアップと設定を理解するのに役立ちます。
> - @history: 最近のシェルコマンド履歴を Amazon Q と共有して、実行したアクションと作業中のコンテキストに関するインサイトを得ることができます。
> [コマンドラインでの Amazon Q とのチャット](https://docs.aws.amazon.com/ja_jp/amazonq/latest/qdeveloper-ug/command-line-chat.html)

以下は自分のリポジトリに対して使い方を聞いて見た例です。

```shell
q chat                                  2

> @history how to start this repository
Using shell history

Based on the command history, I can see you're in the /home/tomita/GateKeeper 
directory and tried to run docker compose up which was interrupted (exit code 
130, typically indicating a Ctrl+C interruption).

To start this repository, here are the steps you should follow:

1. First, make sure you're in the correct directory (which you already are):
bash
cd GateKeeper


2. Run Docker Compose to start the services:
bash
docker compose up


If you want to run it in detached mode (in the background), you can use:
bash
docker compose up -d


If you encounter any issues, you might want to try:

1. Rebuilding the containers:
bash
docker compose up --build


2. Or if you need to start fresh:
bash
# Stop and remove containers, networks
docker compose down

# And then start again
docker compose up


3. To view logs when running in detached mode:
bash
docker compose logs -f


If you're encountering any specific errors while starting up, please share them 
and I can provide more targeted assistance

```

試した感じですが，遅くても1~2秒くらいでは応答が帰ってくるのでGitHub Copilot Chatに比べてだいぶ早いなと感じます。
TODO: 精度などもそのうち検証する。

::: note info
2025年2月16日現在では英語でのチャットしかできないので，今後に期待。

```shell
q chat                   127

Hi, I'm Amazon Q. I can answer questions about your shell and CLI tools!
You can include additional context by adding the following to your prompt:

@history to pass your shell history
@git to pass information about your current git repository
@env to pass your shell environment

> こんにちは

I can only respond to messages in English. Please rephrase your message in 
English and I'll be happy to help
```
2025年3月10日現在日本語がつかえるようになっています。
```shell
q chat


Hi, I'm Amazon Q. Ask me anything.

Things to try
• Fix the build failures in this project.
• List my s3 buckets in us-west-2.
• Write unit tests for my application.
• Help me understand my git status

/acceptall    Toggles acceptance prompting for the session.
/help         Show the help dialogue
/quit         Quit the application


> こんにちは。あなたの名前はなんですか

こんにちは！私の名前はAmazon Qです。AWSによって開発されたAIアシスタントで、技術
的な質問やAWSに関する質問、コーディング、ファイル操作、コマンド実行など、さまざ
まなことをお手伝いできます。

何かお手伝いできることはありますか？
```
:::

### Translate

自然言語からbashスクリプトを作成する機能です。
個人的にはこの機能が一番気に入っています。

- ターミナル上からプロンプトを入力できる(`q translate`するだけ)
- 作成したコマンドをレビュー後にそのまま実行できる
    - 実行前に手直しすることも可能。
- コマンド実行後に`q translate`から抜けてくれる(地味に嬉しい)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3718390/a090715c-20b2-45c7-a78c-8ed59fb27288.png)

---

## 感想

ターミナルを使うのが自分は結構好きなので，ターミナルとブラウザの往復をすることがなくLLMによる恩恵を受けられるのがすごく便利だなと感じました。
また，通常の補完のみであればオフラインでも使用できる点も嬉しいです。

---

## かんれｎ

https://qiita.com/sigma_devsecops/items/84bab9fb22269f232c48