

# Configuring command completion in the AWS CLI
<a name="cli-configure-completion"></a>

AWS Command Line Interface (AWS CLI) には、**Tab** キーを使用して部分的に入力されたコマンドを完了できる bash 互換のコマンド補完機能が含まれています。ほとんどのシステムでは、これを手動で設定する必要があります。

AWS CLI バージョン 2 の自動プロンプト機能のについては、「[AWS CLI でのコマンドプロンプトの有効化と使用](cli-usage-parameters-prompting.md)」を参照してください。

**Topics**
+ [仕組み](#cli-command-completion-about)
+ [Linux または macOS でのコマンド補完の設定。](#cli-command-completion-linux)
+ [Windows でのコマンド補完の設定。](#cli-command-completion-windows)

## 仕組み
<a name="cli-command-completion-about"></a>

コマンド、パラメータ、またはオプションの一部を入力すると、コマンド補完機能によってコマンドが自動的に入力されるか、コマンドの候補リストが表示されます。コマンド補完を使用するには、コマンドの一部を入力し、ほとんどのシェルで通常は*[Tab]* (タブ) になっている保管キーを押します。

次の例は、コマンド補完を使用するさまざまな方法を示しています。
+ コマンドの一部を入力して *Tab* キーを押すと、コマンドの候補リストが表示されます。

  ```
  $ aws dynamodb dTAB
  delete-backup                        describe-global-table
  delete-item                          describe-global-table-settings
  delete-table                         describe-limits
  describe-backup                      describe-table
  describe-continuous-backups          describe-table-replica-auto-scaling
  describe-contributor-insights        describe-time-to-live
  describe-endpoints
  ```
+ パラメータの一部を入力して *Tab* キーを押すと、パラメータの候補リストが表示されます。

  ```
  $ aws dynamodb delete-table --TAB
  --ca-bundle              --endpoint-url           --profile              
  --cli-connect-timeout    --generate-cli-skeleton  --query                
  --cli-input-json         --no-paginate            --region               
  --cli-read-timeout       --no-sign-request        --table-name           
  --color                  --no-verify-ssl          --version              
  --debug                  --output
  ```
+ パラメータを入力して *Tab* キーを押すと、リソース値の候補リストが表示されます。この機能は、AWS CLI バージョン 2 でのみ使用できます。

  ```
  $ aws dynamodb delete-table --table-name TAB
  Table 1                  Table 2                  Table 3
  ```

## Linux または macOS でのコマンド補完の設定。
<a name="cli-command-completion-linux"></a>

Linux または macOS でコマンド補完を設定するには、使用しているシェルの名前と `aws_completer` スクリプトの場所を知っている必要があります。

**注記**  
コマンド補完は自動的に設定され、Amazon Linux を実行する Amazon EC2 インスタンス上でデフォルトで有効化されます。

**Topics**
+ [コンプリータがフォルダがパスにあることを確認します](#cli-command-completion-path)
+ [コマンド補完を有効にする](#cli-command-completion-enable)
+ [コマンド補完の確認](#cli-command-completion-test)

### コンプリータがフォルダがパスにあることを確認します
<a name="cli-command-completion-path"></a>

AWS コンプリータを正常に動作させるには、`aws_completer` がシェルのパス上にある必要があります。「`which`」コマンドで、コンプリータがパスにあるかどうかをチェックできます。

```
$ which aws_completer
/usr/local/bin/aws_completer
```

「which」コマンドで補完するものが見つからない場合は、次の手順を使用してコンプリータのフォルダをパスに追加します。

#### ステップ 1: AWS コンプリータを見つける
<a name="cli-command-completion-locate"></a>

 AWS コンプリータの場所は、使用するインストール方法によって異なります。
+ **パッケージマネージャー** - `pip`、`yum`、`brew`、および `apt-get` などのプログラムは通常、AWS コンプリータ (またはシンボリックリンク) を標準のパスの場所にインストールします。
  + `pip` を「`--user`」パラメータを**指定せずに**を使用した場合、デフォルトのパスは「`/usr/local/bin/aws_completer`」です。
  + `pip` を「`--user`」パラメータと**共に使用した**場合デフォルトのパスは「`/home/username/.local/bin/aws_completer`」です。
+ **バンドルインストーラ** - バンドルされたインストーラを使用した場合、デフォルトのパスは「`/usr/local/bin/aws_completer`」です。

他のすべてが失敗した場合は、`find` コマンドを使用して AWS コンプリータのファイルシステムを検索します。

```
$ find / -name aws_completer
/usr/local/bin/aws_completer
```

#### ステップ 2: シェルを識別する
<a name="cli-command-completion-shell"></a>

使用しているシェルを特定するには、次のコマンドのいずれかを使用します。
+ **echo \$1SHELL** - シェルのプログラムファイル名を表示します。これは通常、ログイン後に別のシェルを起動しない限り、使用中のシェルの名前と一致します。

  ```
  $ echo $SHELL
  /bin/bash
  ```
+ **ps** - 現在のユーザーに対して実行中のプロセスを表示します。それらの 1 つはシェルです。

  ```
  $ ps
    PID TTY          TIME CMD
   2148 pts/1    00:00:00 bash
   8756 pts/1    00:00:00 ps
  ```

#### ステップ 3: コンプリータをパスに追加する
<a name="cli-command-completion-path-add"></a>

1. ユーザーフォルダーでシェルのプロファイルスクリプトを見つけます。

   ```
   $ ls -a ~/
   .  ..  .bash_logout  .bash_profile  .bashrc  Desktop  Documents  Downloads
   ```
   + **Bash** – `.bash_profile`、`.profile`、または `.bash_login`。
   + **Zsh** -`.zshrc` 
   + **Tcsh** - `.tcshrc`、`.cshrc`、または `.login`

1. 次の例のように、プロファイルスクリプトの末尾にエクスポートコマンドを追加します。「`/usr/local/bin/`」を、前のセクションで検出したフォルダに置き換えます。

   ```
   export PATH=/usr/local/bin/:$PATH
   ```

1. 変更が有効になるように、プロファイルを現在のセッションに再ロードします。`.bash_profile` を最初のセッションで見つけたシェルスクリプトの名前で置き換えます。

   ```
   $ source ~/.bash_profile
   ```

### コマンド補完を有効にする
<a name="cli-command-completion-enable"></a>

コンプリータがパスにあることを確認したら、使用しているシェル上で適切なコマンドを実行して、コマンド補完を有効にします。コマンドをシェルのプロファイルに追加して、新しいシェルを開くたびに実行できます。各コマンドで、「*/usr/local/bin/*」パスを、[コンプリータがフォルダがパスにあることを確認します](#cli-command-completion-path) のシステムにあるパスに置き換えます。
+ **`bash`** - 組み込みコマンド「`complete`」を使用します。

  ```
  $ complete -C '/usr/local/bin/aws_completer' aws
  ```

  前のコマンドを `~/.bashrc` に追加して、新しいシェルを開くたびに実行します。`~/.bash_profile` はソースとして `~/.bashrc` を使用して、コマンドがログインシェルでも実行されるようにできます。
+  **`zsh`** - コマンド補完を実行するには、 `bashcompinit` プロファイルスクリプトの最後に次の自動ロード行を追加して「`~/.zshrc`」を実行する必要があります。

  ```
  $ autoload bashcompinit && bashcompinit
  $ autoload -Uz compinit && compinit
  ```

  コマンド補完を有効にするには、組み込みコマンド `complete` を使用します。

  ```
  $ complete -C '/usr/local/bin/aws_completer' aws
  ```

  前のコマンドを `~/.zshrc` に追加して、新しいシェルを開くたびに実行します。
+  **`tcsh`** – 「`tcsh`」の補完は、補完の振る舞いを定義するためのワードタイプとパターンを取ります。

  ```
  > complete aws 'p/*/`aws_completer`/'
  ```

  前のコマンドを `~/.tcshrc` に追加して、新しいシェルを開くたびに実行します。

コマンド補完を有効にした後は、「[コマンド補完の確認](#cli-command-completion-test)」は動作しています。

### コマンド補完の確認
<a name="cli-command-completion-test"></a>

コマンド補完を有効にしたら、シェルをリロードし、コマンドの一部を入力し、**Tab** を押して使用可能なコマンドを表示します。

```
$ aws sTAB
s3              ses             sqs             sts             swf
s3api           sns             storagegateway  support
```

## Windows でのコマンド補完の設定。
<a name="cli-command-completion-windows"></a>

**注記**  
PowerShell による補完の処理 (さまざまな補完キーを含む) についての詳細は、*Microsoft PowerShell Docs* の [about\$1Tab\$1Expansion](https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.core/about/about_tab_expansion) を参照してください。

Windows で PowerShell のコマンド補完を有効にするには、PowerShell で次の手順を実行します。

1. 次のコマンドで「`$PROFILE`」を開きます。

   ```
   PS C:\> Notepad $PROFILE
   ```

   「`$PROFILE`」がない場合は、次のコマンドを使用してユーザープロファイルを作成します。

   ```
   PS C:\> if (!(Test-Path -Path $PROFILE ))
   { New-Item -Type File -Path $PROFILE -Force }
   ```

   PowerShell プロファイルの詳細については、*Microsoft Docs* ウェブサイトの「[Windows PowerShell ISE でプロファイルを使用する方法](https://docs.microsoft.com/en-us/powershell/scripting/windows-powershell/ise/how-to-use-profiles-in-windows-powershell-ise)」を参照してください。

1. コマンド補完を有効にするには、次のコードブロックをプロファイルに追加し、保存し、ファイルを閉じます。

   ```
   Register-ArgumentCompleter -Native -CommandName aws -ScriptBlock {
       param($commandName, $wordToComplete, $cursorPosition)
           $env:COMP_LINE=$wordToComplete
           if ($env:COMP_LINE.Length -lt $cursorPosition){
               $env:COMP_LINE=$env:COMP_LINE + " "
           }
           $env:COMP_POINT=$cursorPosition
           aws_completer.exe | ForEach-Object {
               [System.Management.Automation.CompletionResult]::new($_, $_, 'ParameterValue', $_)
           }
           Remove-Item Env:\COMP_LINE     
           Remove-Item Env:\COMP_POINT  
   }
   ```

1. コマンド補完を有効にしたらシェルをリロードして、コマンドの一部を入力し、**[Tab]** (タブ) を押して使用可能なコマンドを順次表示させます。

   ```
   $ aws sTab
   ```

   ```
   $ aws s3
   ```

   補完で使用できるコマンドを表示するには、コマンドの一部を入力して、**Ctrl** \$1 **[Space]** (スペース) を押します。

   ```
   $ aws sCtrl + Space
   s3              ses             sqs             sts             swf
   s3api           sns             storagegateway  support
   ```