Macのzshでawscliの補完を有効化する

最近、ローカルのラップトップマシンは順次、zshに乗り換え始めたんだけど、
Bashと同じノリでawscliの補完を有効化しようとして

complete -C aws_completer aws

としてsourceしたらエラーになってしまった。

/Users/noguchiwataru/.zshrc:13: command not found: complete

zshに関しては aws_zsh_completer.sh というのを読み込むらしいので、
findで探してみたらパスが通っているところにあった

% find / -name aws_zsh_completer.sh 2>/dev/null
/usr/local/bin/aws_zsh_completer.sh

なので

# ~/.zshrc
export AWS_ACCESS_KEY_ID=AKIAIOSFODNN7EXAMPLE
export AWS_SECRET_ACCESS_KEY=wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY
export AWS_DEFAULT_REGION=ap-northeast-1
aws_zsh_completer.sh

.zshrc に書いてsourceすればOKかな?

[noguchiwataru@Macintosh] ~
% source ~/.zshrc
/usr/local/bin/aws_zsh_completer.sh: line 18: autoload: command not found
/usr/local/bin/aws_zsh_completer.sh: line 19: compinit: command not found
/usr/local/bin/aws_zsh_completer.sh: line 20: bashcompinit: command not found

だめだった。。。
よくよく考えたらzshシェルスクリプト内で別シェルとしてさらにスクリプト実行したら意味が無いので、
ここでは aws_zsh_completer.sh をsourceするのが正しいですよね。

# ~/.zshrc
export AWS_ACCESS_KEY_ID=AKIAIOSFODNN7EXAMPLE
export AWS_SECRET_ACCESS_KEY=wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY
export AWS_DEFAULT_REGION=ap-northeast-1
source aws_zsh_completer.sh

今度はエラーでなかったけど、あれ、補完効かないぞ。。。ぼくの幻覚なのかな。。。
でもみんなこの書き方で動いているっぽいし、なんでだろう。

で、よく調べてみたら始めの方に記述していたのがいけなかった。
.zshrc の一番最後の方に書いたらうまく動くようになった。

# ~/.zshrc
# (snip)
export AWS_ACCESS_KEY_ID=AKIAIOSFODNN7EXAMPLE
export AWS_SECRET_ACCESS_KEY=wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY
export AWS_DEFAULT_REGION=ap-northeast-1
source /usr/local/bin/aws_zsh_completer.sh
complete -C aws_completer aws
# [EOF]

参考文献