2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

ClineでAWS CLIの結果が全然取得できない問題を解決する

Last updated at Posted at 2025-06-30

NTTテクノクロス株式会社の渡邉です。

自分の環境でClineが失敗するパターンを見るとCLI実行、特にAWS CLIで引っかかることが多いのに気づいたため、解析した結果をシェアします。

表題の件

Cline経由でAWS CLIを使うと、結果の取得が失敗することがある。この状況を再現させやすいプロンプトは、例えばこう。

AWS東京リージョンの SecurityGroupをAWS CLIで調べて危険な設定のものを一覧にして

このプロンプトを元にClineはSecurityGroupを参照するコマンドをCLIで実行するのだが、結果が取得できない。

aws ec2 describe-security-groups --region ap-northeast-1

{
    "SecurityGroups": [
        {
            "GroupId": "sg-01234567890",
            "IpPermissionsEgress": [
                {
                    "IpProtocol": "-1",
                    "UserIdGroupPairs": [],
                    "IpRanges": [
                        {
                            "CidrIp": "0.0.0.0/0"
                        }
                    ],
:

ターミナルを見ると「:」でどうやら止まっていることがわかる。@terminalメンションを使って伝えようとするも、コマンド実行中の扱いとなり、結果をうまく取得できない。

原因

これはPager(ページ分割)が働いてlessで開かれているからだ。AWS CLI v2からは原則、Client-sideのPagerとして、lessコマンドがデフォルトとなっている。

AWS CLI version 2 provides the use of a client-side pager program for output. By default, this feature returns all output through your operating system’s default pager program.
https://docs.aws.amazon.com/cli/latest/userguide/cli-usage-pagination.html#cli-usage-pagination-clientside

ちなみにAWS CLIのページング処理には下の2つが存在し、ここで問題になるのは後者である。

  • サービス側ページネーション抑止用の--no-paginate
  • クライアント側 Pager 抑止用の--no-cli-pager

OSのPAGER環境変数を設定していれば別だが、特に何も設定してない時はAWS CLI 側で出力先を別のスクリーンに切り替えて出力する。そのため、ClineからVS CodeのTerminalを取得するAPIを叩いてもうまくいかずに、画面が空であると誤認してしまう。

解決方法

こだわりがなければ、Clineの動く環境全体でAWS CLIのPagerを無効化する設定を入れればよい。解法はいくつかある。

# 1. コマンド単位でのPager無効化 
aws ec2 describe-security-groups --no-cli-pager

# 2. プロファイル単位でのPager無効化
aws configure set cli_pager ''

# 3. セッション単位で無効化
export AWS_PAGER=""

Clineでの実用的な話をすると、3. セッション単位での無効化を参考に、Cline向けのルールファイル.clinerulesへ、例えばこのように書けばよい。

.clinerules
## rule

- AWS CLIを使う時は必ず`export AWS_PAGER=""`を適用する。

別解

AWS CLIに関してはこれで十分なのだが、そもそもターミナルへの標準出力を経由しなければPager対応は考えなくてよい。要は中間ファイルに吐かせて読む。AWS CLIに限らずCLI出力の処理で困る度に独自のワークアラウンドを探すのは大変だし、これをルール化するのも一案だろう。

.clinerules
## rule

- データ参照用にCLIを使う時は、必ず取得結果を`tmp/`に格納する。

まとめ

簡潔にまとめると2行になってしまいました。これだけ覚えて帰ってください。

  • AWS CLIの出力が取得できないならPager設定を調整する
  • 複数のCLIツールが標準出力でハマるなら、中間ファイルを挟む動きにする
2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?