すべてのプロダクト
Search
ドキュメントセンター

Alibaba Cloud CLI:出力のフィルタリングとフォーマット

最終更新日:Jun 06, 2026

Alibaba Cloud CLI コマンドは、JSON 形式で結果を返します。JMESPath 式を使用して特定のフィールドを抽出するには --cli-query オプションを使用し (出力は JSON のまま)、結果をテーブルとして表示するには --output オプションを使用できます。また、この 2 つを組み合わせることもできます。まずフィルタリングを行い、次にテーブル形式で表示します。

説明

このトピックのコマンドを実行する前に、Alibaba Cloud CLI がインストールおよび設定されていることを確認してください。詳細については、「Alibaba Cloud CLI のインストール、更新、アンインストール」および「認証情報の設定と管理」をご参照ください。

--cli-query による JSON 出力のフィルタリング

--cli-query オプションは JMESPath 式を受け取り、API レスポンスに適用します。フィルタリングされた結果は JSON のままなので、スクリプトや jq などの後続のツールで直接処理できます。

構文:

aliyun <product> <operation> --cli-query "<JMESPath expression>"

以下の例では、Elastic Compute Service (ECS) の DescribeInstances レスポンスを使用して、一般的なフィルタリングパターンを示します。

例 1: 値のリストを抽出する

すべてのインスタンス ID を抽出します。

aliyun ecs DescribeInstances --biz-region-id cn-hangzhou --cli-query "Instances.Instance[].InstanceId"

出力例:

[
  "i-1234567891234567****",
  "i-abcdefghijklmnop****"
]

例 2: 複数のフィールドを抽出する

各インスタンスの InstanceIdStatus を抽出します。

aliyun ecs DescribeInstances --biz-region-id cn-hangzhou --cli-query "Instances.Instance[].[InstanceId,Status]"

出力例:

[
  [
    "i-1234567891234567****",
    "Stopped"
  ],
  [
    "i-abcdefghijklmnop****",
    "Running"
  ]
]

例 3: 条件によるフィルタリング

実行中のインスタンスの ID のみを抽出します。

aliyun ecs DescribeInstances --biz-region-id cn-hangzhou --cli-query "Instances.Instance[?Status=='Running'].InstanceId"

出力例:

[
  "i-abcdefghijklmnop****"
]

例 4: 出力構造の再構成

JMESPath の複数選択ハッシュ式を使用して、レスポンスをカスタムキー名を持つオブジェクトの配列に再構成します。

aliyun ecs DescribeInstances --biz-region-id cn-hangzhou --cli-query "Instances.Instance[].{id:InstanceId,status:Status}"

出力例:

[
  {
    "id": "i-1234567891234567****",
    "status": "Stopped"
  },
  {
    "id": "i-abcdefghijklmnop****",
    "status": "Running"
  }
]
説明

上記の例では、一般的な構文のみを取り上げています。JMESPath は、パイプ式、組み込み関数、その他の高度な機能もサポートしています。完全な構文については、「JMESPath Tutorial」をご参照ください。

--cli-querynull を返す場合は、式内のフィールド名が API レスポンスのキーと完全に一致していることを確認してください (フィールド名ではケースセンシティブです)。

適切なオプションの選択

次のテーブルを参考に、シナリオに適したオプションを判断してください。

シナリオ

オプション

説明

スクリプトで値を抽出する

--cli-query

出力は JSON なので、jq などのツールで直接処理できます。

ターミナルで結果を参照する

--output

テーブル形式は、生の JSON よりも読みやすくなります。

フィルタリングしてテーブルとして表示する

両方

--cli-query でまずデータをフィルタリングまたは再構成し、次に --output で結果をテーブル形式でフォーマットします。詳細は、前述の「--cli-queryによるJSON出力のフィルタリング」セクションの例4をご参照ください。

--output オプションのパラメーター

Alibaba Cloud CLI は、レスポンスから特定のフィールドを抽出してテーブルとして表示するための --output オプションを提供します。

--output オプションは、次のパラメーターをサポートしています。

パラメーター

説明

cols

テーブルに表示する列。

形式: cols="<column1>,<column2>"。複数の列名はカンマ (,) で区切ります。

  • object 型の場合、列名は JSON レスポンスのキーと一致する必要があります。

  • array 型の場合、カスタム列名を定義し、コロン (:) を使用してゼロベースの配列インデックスにマッピングします。

  • object 型: cols="InstanceId,Status"

  • array 型: cols="name:0,type:1"

rows

テーブル行のデータソースパス。JMESPath 構文を使用して、JSON レスポンス内のデータの場所を指定します。

rows="Instances.Instance[]"

num

行番号列を表示するかどうかを指定します。

true に設定すると、テーブルの左側に行番号列が追加されます。行番号は 0 から始まります (1 からではありません)。デフォルト値: false

num="true"

背景情報

Alibaba Cloud API のクエリ操作は、JSON 形式の構造化データを返しますが、これは読みにくい場合があります。

  1. すべての ECS インスタンスを取得する場合を例に、次のコマンドを実行します。

    aliyun ecs DescribeInstances --biz-region-id cn-hangzhou
  2. レスポンス例 (一部):

    {
      "PageNumber": 1,
      "TotalCount": 2,
      "PageSize": 10,
      "RequestId": "2B76ECBD-A296-407E-BE17-7E668A609DDA",
      "Instances": {
        "Instance": [
          {
            "ImageId": "ubuntu_16_0402_64_20G_alibase_20171227.vhd",
            "InstanceTypeFamily": "ecs.xn4",
            "VlanId": "",
            "InstanceId": "i-1234567891234567****",
            "Status": "Stopped",
            "SecurityGroupIds": {
              "SecurityGroupId": [
                "sg-bp12345678912345****",
                "sg-bp98765432198765****"
              ]
            }
          },
          {
            "ImageId": "ubuntu_16_0402_64_20G_alibase_20171227.vhd",
            "InstanceTypeFamily": "ecs.xn4",
            "VlanId": "",
            "InstanceId": "i-abcdefghijklmnop****",
            "Status": "Running",
            "SecurityGroupIds": {
              "SecurityGroupId": [
                "sg-bp1abcdefghijklm****",
                "sg-bp1zyxwvutsrqpon****"
              ]
            }
          }
        ]
      }
    }

例 1: ルートレベルのフィールドを抽出する

  1. 次のコマンドを実行して、RequestId フィールドを抽出します。このフィールドはレスポンスのルートレベルにあるため、rows パラメーターは必要ありません。

    aliyun ecs DescribeInstances --biz-region-id cn-hangzhou --output cols=RequestId
  2. 出力例:

    RequestId
    ---------
    2B76ECBD-A296-407E-BE17-7E668A609DDA

例 2: ネストされたフィールドを抽出する

  1. 次のコマンドを実行して、InstanceIdStatus フィールドを抽出します。これらのフィールドの JMESPath パスは Instances.Instance[] なので、rowsrows="Instances.Instance[]" に設定します。JMESPath 構文の詳細については、「JMESPath Tutorial」をご参照ください。

    aliyun ecs DescribeInstances --biz-region-id cn-hangzhou --output cols="InstanceId,Status" rows="Instances.Instance[]"
  2. 出力例:

    InstanceId             | Status
    ----------             | ------
    i-1234567891234567**** | Stopped
    i-abcdefghijklmnop**** | Running
  3. 行番号を表示するには、numtrue に設定します。出力例:

    Num | InstanceId             | Status
    --- | ----------             | ------
    0   | i-1234567891234567**** | Stopped
    1   | i-abcdefghijklmnop**** | Running

例 3: 配列から要素を抽出する

  1. 次のコマンドを実行して、SecurityGroupId 配列から特定の要素を抽出します。この配列の JMESPath パスは Instances.Instance[].SecurityGroupIds.SecurityGroupId です。

    aliyun ecs DescribeInstances --biz-region-id cn-hangzhou --output cols="sg1:0,sg2:1" rows="Instances.Instance[].SecurityGroupIds.SecurityGroupId"
  2. 出力例:

    sg1                     | sg2
    ---                     | ---
    sg-bp12345678912345**** | sg-bp98765432198765****
    sg-bp1abcdefghijklm**** | sg-bp1zyxwvutsrqpon****