こんにちは。あやかです。
友達がターミナルでexport AWS_PROFILE=って打ったときに、Tabキーでプロファイル名がサクッと補完されるのを見て「いいなぁ」と思っていたんです。でも、設定するのが面倒で後回しにしていました。
今回、思い切って記事にすることで自分を追い込んで、実際に設定してみることにしました。
やりたかったこと
私はAWS CLIで複数のプロファイルを使い分けています。具体的には、hinatato-RO(ReadOnly権限)とhinatato-PU(PowerUser権限)をスイッチロールで切り替えて使う構成です。
毎回export AWS_PROFILE=hinatato-ROとか手打ちするのは面倒なので、以下の2つを補完できるようにしたいと思っていました。
export AWS_PROFILE=の後でプロファイル名を補完aws s3などのサブコマンドを補完
実装前の環境確認
まず、現在の環境を確認しました。
AWS CLIのバージョン
aws --version
aws-cli/2.33.17 Python/3.13.12 Darwin/25.2.0 source/arm64
Homebrew経由でインストールしたAWS CLI v2を使っています。
プロファイル構成
~/.aws/configはこんな感じです。
[default]
region = ap-northeast-1
[profile hinatato-RO]
region = ap-northeast-1
[profile hinatato-PU]
region = ap-northeast-1
シンプルに3つのプロファイルがある状態です。
既存の.zshrc
補完機能を設定する前の.zshrcはこんな感じでした。
# Created by `pipx` on 2026-02-07 01:11:12
export PATH="$PATH:/Users/ayaka/.local/bin"
# Added by LM Studio CLI (lms)
export PATH="$PATH:/Users/ayaka/.lmstudio/bin"
# End of LM Studio CLI section
[ -f ~/.fzf.zsh ] && source ~/.fzf.zsh
# zsh-autosuggestions
source $(brew --prefix)/share/zsh-autosuggestions/zsh-autosuggestions.zsh
eval "$(starship init zsh)"
TMOUT=1
TRAPALRM() {
zle reset-prompt
}
AWS関連の設定は何も入っていませんでした。
実装手順
1. aws_completerの場所を確認
まず、AWS CLIの補完ツールがどこにあるか確認しました。
which aws_completer
/opt/homebrew/bin/aws_completer
Homebrewでインストールしたので、/opt/homebrew配下にありました。
2. zsh用の補完ファイルを探す
Homebrew版のAWS CLIには、zsh専用の補完ファイルが用意されていることが分かりました。
find /opt/homebrew/Cellar/awscli -name "_aws" 2>/dev/null
/opt/homebrew/Cellar/awscli/2.33.17/share/zsh/site-functions/_aws
このファイルを使うのが一番確実そうです。
3. .zshrcに設定を追加
.zshrcのeval "$(starship init zsh)"の前に、以下を追加しました。
# ===== AWS CLI補完設定 =====
# zsh補完システムを有効化
autoload -Uz compinit && compinit
# Homebrew管理下の補完ファイルのパスを追加
fpath=(/opt/homebrew/share/zsh/site-functions $fpath)
# AWS CLI補完を有効化(Homebrew版のzsh補完ファイルを使用)
if [ -f /opt/homebrew/Cellar/awscli/2.33.17/share/zsh/site-functions/_aws ]; then
source /opt/homebrew/Cellar/awscli/2.33.17/share/zsh/site-functions/_aws
fi
# AWS_PROFILE環境変数の補完を追加
_aws_profiles() {
local profiles
profiles=($(grep -E '^\[profile' ~/.aws/config | sed 's/\[profile \(.*\)\]/\1/' | tr '\n' ' '))
profiles+=(default)
_describe 'aws profiles' profiles
}
# export AWS_PROFILE= の後で補完を有効化
compdef _aws_profiles -value-,AWS_PROFILE,-default-
# ===== AWS CLI補完設定ここまで =====
4. 設定を反映
source ~/.zshrc
エラーが出なければOKです。
動作確認
AWS_PROFILEの補完
export AWS_PROFILE=
ここまで入力してTabキーを押すと…
ちゃんとdefault、hinatato-RO、hinatato-PUが候補として表示されました!
aws s3サブコマンドの補完
aws s3
ここまで入力してTabキーを押すと…
ls、cp、mb、syncなどのサブコマンドがずらっと表示されました。
ハマったポイント
実装中にいくつかハマったポイントがありました。
bash用のcompleteコマンドが使えない
最初、ネットで見つけたサンプルをそのまま使おうとしたら、こんなエラーが出ました。
/Users/ayaka/.zshrc:18: command not found: complete
これはbash用のcompleteコマンドをzshで使おうとしたのが原因でした。zshでbashの補完を使う場合は、autoload bashcompinit && bashcompinitを先に実行する必要があります。
ただ、今回はHomebrew版のAWS CLIにzsh専用の補完ファイル(_aws)が用意されていたので、そちらを使う方がスマートでした。
aws_completerが直接動かない
試しにaws_completerを直接実行してみたら、何も出力されませんでした。
aws_completer "aws s3 "
これは環境変数COMP_LINEとCOMP_POINTを指定する必要があったからです。
COMP_LINE="aws s3 " COMP_POINT=7 aws_completer
こうすると、ちゃんとサブコマンド一覧が出力されました。でも、結局はzsh専用の補完ファイルを使ったので、この問題は解消されました。
まとめ
zshでAWS CLIの補完機能を有効化してみました。
特にexport AWS_PROFILE=の後でプロファイル名を補完できるようになったのが便利です。
設定自体は.zshrcに10行ちょっと追加するだけなので、同じようにAWS CLIを使っている人は試してみるといいかもしれません。
ようやく重い腰を上げて設定しましたが、もっと早くやっておけばよかったなと思いました。こういう小さな効率化の積み重ねって、地味に大事ですよね。
それでは、また。