Amazon Q Developer CLI v1.10.1で、会話の履歴管理を試す

## はじめに

Amazon Q Developer のコマンドラインエージェント、Amazon Q Developer CLI（以下、Q CLI）v1.10.0が2025年5月16日にリリースされました。（翌日には、いくつかの不具合が修正されたv1.10.1がリリースされました。）
このアップデートにより、Q CLIの会話の履歴管理ができるようになりました。いままでのQ CLIでは、会話の履歴管理ができませんでしたが、v1.10.0では、会話履歴に関する以下の機能が追加されました。

- 同一ディレクトリでの直前の会話を再開する resume オプション
- q chatの会話をJSONファイルに保存する /saveコマンド
- /saveコマンドで保存したJSONファイルを読み込む /loadコマンド

本記事ではこれらの機能を試してみます。
Q CLIのインストールは、参考情報にあげているリンク先を参考にしてください。

## 環境

- Q CLI v1.10.0以上

## 参考情報

https://github.com/aws/amazon-q-developer-cli

https://aws.amazon.com/jp/blogs/news/introducing-the-enhanced-command-line-interface-in-amazon-q-developer/

https://docs.aws.amazon.com/amazonq/latest/qdeveloper-ug/command-line-installing.html

## Q CLI起動時のアスキーアート

`q chat`コマンドでQ CLIを起動すると、以下のようなアスキーアートが表示されます。"Did you know?"欄ではさっそく直前の会話を再開する `resume` オプションのことを教えてくれました。

検証した環境ではAWS Documentation MCP Serverを設定しているので、起動時にMCPサーバーが読み込まれたことが示されています。

![Q CLI起動時のアスキーアート](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/61809/5b272ac2-fe55-4303-9b1b-c9023db2277d.png)

## resume オプション

`q chat`コマンドのヘルプオプションを実行すると、`resume` オプションの説明が表示されます。説明のため、ヘルプの出力を一部省略しています。`q chat -r`もしくは`q chat --resume`コマンドで、同一ディレクトリでの直前の会話を再開すると書かれています。

```console
 ❯ q chat --help
AI assistant in your terminal

Usage: qchat chat [OPTIONS] [INPUT]

Arguments:
  [INPUT]  The first question to ask

Options:
(一部省略)
  -r, --resume                    Resumes the previous conversation from this directory
(一部省略)
```

実際に試してみます。/tmpディレクトリに移動して、`q chat`コマンドを実行します。

```console
$ pwd
/tmp
```

```console
$ q chat
> Amazon Bedrock Guardrailsがサポートしている言語は何? 言語とは、例えば英語や日本語といったものです。
```

すると、Q CLIはAWS Documentation MCP Serverを使って以下のような回答を出力しました。

```console
Amazon Bedrock Guardrailsがサポートしている言語について調べます。AWS公式ドキュメントを検索して確認しましょう。

(途中省略)

Amazon Bedrock Guardrailsがサポートしている言語について調査した結果をお伝えします。

Amazon Bedrock Guardrailsは現在、以下の3つの自然言語をサポートしています：

• 英語 (English)
• フランス語 (French)
• スペイン語 (Spanish)

AWS公式ドキュメントによると、これら以外の言語（日本語や中国語など）では、Guardrailsの機能は効果的に動作
しません。ドキュメントには「Guardrails will be ineffective with anyother language」（他の言語では
Guardrailsは効果がありません）と明記されています。

Guardrailsは、有害なコンテンツの検出やフィルタリング、特定のトピックの拒否、単語フィルター、機密情報
フィルターなどの機能を提供していますが、これらの機能は上記3言語でのみ効果的に動作する設計になっています。
```

![q chatの回答](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/61809/293bea1e-c336-4487-94b6-ea5627c7183b.png)

ここで会話を中段します。

```console
/quit
```

次に、`q chat -r`コマンドを実行します。すると、前回の会話の内容を要約した内容が表示されました。

> 私たちの会話では、Amazon Bedrock Guardrailsがサポートしている言語について調査しました。結論として、Amazon Bedrock Guardrailsは現在、英語、フランス語、スペイン語の3つの自然言語のみをサポートしており、日本語を含むその他の言語では効果的に機能しないことが分かりました。

![q chat -rの結果](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/61809/4314c46b-ac54-4fe5-936b-e8383ce4c26f.png)

そのまま会話を続けてみます。すると、前回の会話の内容をもとに会話を続けることができました。

> \> その情報が掲載されているURLを教えて
>
> Amazon Bedrock Guardrailsがサポートしている言語（英語、フランス語、スペイン語）についての情報が掲載されているURLは以下になります：
>
> https://docs.aws.amazon.com/bedrock/latest/userguide/guardrails.html
>
>このドキュメントの中で、「Important」というラベルの付いた注意書きに「AmazonBedrock Guardrails supports English, French, and Spanish in natural language. Guardrails will be ineffective with any other language.」と明記されています。

![resumeオプションを実行したあとの会話](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/61809/88263e2e-cd2e-4aa7-ab9d-dc6037d8dc9b.png)

### 異なるディレクトリでresumeオプションを実行する

`resume` オプションのヘルプには、以下のように記載されています。

> Resumes the previous conversation from this directory

この説明から、`resume`オプションは、"同一ディレクトリ"での直前の会話を再開することができるようです。
実際に試してみます。一度会話を中断します。

```console
/quit
```

次に、他のディレクトリに移動します。

```console
$ cd ../var/tmp
$ q chat -r
```

すると、さきほどとは異なり前回の会話の要約は表示されませんでした。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/61809/5e6004f3-6601-4c04-a13b-613267126633.png)

前回の会話の要約を求めましたが、会話の履歴はないといった回答が得られました。ディレクトリを移動すると `resume` オプションは効かないことがわかりました。

![ディレクトリを移動してresumeオプションを実行した結果](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/61809/0ef54946-3a65-4588-9b2c-3d9dcc606b99.png)

再度、会話を中断します。もとのディレクトリに戻り、`q chat -r`コマンドを実行します。

```console
$ cd /tmp
$ q chat -r
```

すると、前回の会話の要約が表示されました。もとのディレクトリを移動しても、もとのディレクトリに戻れば会話を再開できることがわかりました。

![もとのディレクトリでresumeオプションを実行した結果](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/61809/8eabe726-144c-45b5-a06b-b00bbb191b61.png)

他にも、ターミナルを`exit`で閉じた場合でも、`q chat -r`コマンドを実行すると前回の会話の要約が表示されました。不意にターミナルを閉じてしまった場合やディレクトリごとに一時的な会話をしている場合に、便利そうです。


## 会話の履歴を保存、読み込みする

`resume`オプションは直前の会話を再開することができますが、会話の履歴を保存することはできません。会話の履歴を保存するには、`/save`コマンドを使用します。会話の履歴を呼び出すには、`/load`コマンドを使用します。

### 会話の履歴を保存する

`/save`コマンドで任意のファイル名を指定することで、会話の履歴やQ CLIの思考過程を保存することができます。

```console
/save chat_history.json
```

このコマンドを実行すると、会話の履歴がJSONファイルに保存されます。

![saveコマンドで会話の履歴を保存する](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/61809/c7a11246-3ef1-4122-b407-ef4aac0efe2b.png)

このように、AWS Documentation MCP ServerをTool Useで利用する様子が保存されています。
![会話履歴の中身](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/61809/9448b600-95d4-4f80-a49d-dbd55c408d2a.png)

### 会話の履歴を読み込む

`/load`コマンドで、`/save`コマンドで保存したJSONファイルを読み込むことができます。ディレクトリを移動して、`/load`コマンドを実行してみます。

```console
$ cd /var/tmp
$ q chat
```

会話履歴を保存したJSONファイルを読み込みます。

```console
> /load /tmp/chat_history.json
```

このように、`/save`コマンドで保存した会話の履歴が読み込まれました。そして、前回の会話の要約を求めたところ、最初の質問である「Amazon Bedrock Guardrailsがサポートしている言語について」と、「ドキュメントのURLについて」の回答が要約されたものが表示されました。`resume`オプションとは異なり、別のディレクトリでも会話の履歴を読み込むことができることがわかりました。
作業を中断する際に会話履歴を保存した場合や、プロジェクトごとに会話履歴を管理したい場合、別の端末で作業を再開したい場合などに有用です。

![loadコマンドで会話の履歴を読み込む](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/61809/ab615692-e3d3-4aeb-b0e9-7bdca033058b.png)

### 履歴をクリアする

すべての会話履歴をクリアするには、`/clear`コマンドを使用します。

```console
/clear
```

## まとめ

Q CLIに追加された`resume`オプションと`/save`コマンド、`/load`コマンドを使うことで、会話の履歴を保存して読み込むことができます。
`resume`オプションは、ターミナルを閉じた場合でももとのディレクトリに戻れば会話を再開できます。`/save`と`/load`コマンドの組み合わせで、会話履歴を作業単位やプロジェクト単位などに分けてJSONファイルで管理できます。過去の会話履歴をもとに新たな作業を行いたい場合など、様々な用途で活用できるのではないでしょうか。